fork download
  1. #include<iostream>
  2. using namespace std;
  3. template <class Ty>
  4. class D{
  5. long long int frn,bac;
  6. long long int s,len;
  7. Ty *dq;
  8. public:
  9. D()
  10. {
  11. frn=-1;
  12. bac=-1;
  13. s=0;
  14. len=0;
  15. }
  16. D(long long int si,Ty x)
  17. {
  18. frn=-1;
  19. bac=-1;
  20. s=0;
  21. s=si;
  22. dq=new Ty[s];
  23. len=1;
  24. frn=0;
  25. bac=0;
  26. dq[bac]=x;
  27. for(long long int i=1;i<si;i++)
  28. {
  29. bac=(bac+1)%s;
  30. dq[bac]=x;
  31. len++;
  32. }
  33. }
  34. bool empty()
  35. {
  36. return frn==-1;
  37. }
  38. bool isFull()
  39. {
  40. return (bac+1)%s==frn;
  41. }
  42. void resize(long long int x)
  43. {
  44. Ty *tem,*t1;
  45. long long int os=s;
  46. //cout<<"os="<<os<<endl;
  47. //cout<<"s="<<s<<endl;
  48. t1=new Ty[os];
  49.  
  50. tem=dq;
  51. long long int k=0;
  52. for(long long int i=frn;i!=(bac+1)%os;i=(i+1)%os)
  53. {
  54. t1[k++]=tem[i];
  55. }
  56. frn=0;
  57. bac=k-1;
  58.  
  59.  
  60. if(os<=x){
  61. s=x;
  62. //cout<<"in line 62 bac= s= len="<<bac<<s<<len<<endl;
  63. dq=new Ty[s];
  64. for(long long int i=frn;i!=(bac+1)%os;i=(i+1)%os)
  65. {
  66. dq[i]=t1[i];
  67. }
  68. delete [] t1;
  69. for(long long int i=bac+1;i<s;i++)
  70. {
  71. dq[i]=0;
  72. bac++;
  73. len++;
  74. }
  75. }
  76. else
  77. {
  78. s=x;
  79. //cout<<"in line 79 s="<<s<<endl;
  80. dq=new Ty[s];
  81. for(long long int i=frn;i!=(bac+1)%os;i=(i+1)%os)
  82. {
  83. dq[i]=t1[i];
  84. }
  85. delete [] t1;
  86. if(len>s){
  87. //cout<<"in line 87 len= s="<<len<<"" ""<<s<<endl;
  88. long long int count=len-s;
  89.  
  90. for(long long int i=0;i<count;i++)
  91. {
  92. bac--;
  93. s--;
  94. len--;
  95. }
  96. }
  97. else
  98. {
  99. long long int count =s-len;
  100. for(long long int i=0;i<count;i++)
  101. {
  102. dq[i+bac+1]=0;
  103. len++;
  104. }
  105. bac=bac+count;
  106. }
  107. }
  108. }
  109. void resize_ar()
  110. {
  111. Ty *tem;
  112. long long int os=s;
  113. s=2*s;
  114. tem=dq;
  115. dq=new Ty[s];
  116. for(long long int i=0;i<os;i++)
  117. {
  118. dq[i]=tem[i];
  119. }
  120. delete [] tem;
  121. if(bac<frn)
  122. {
  123. //cout<<"in line 56\n";
  124. for(long long int i=0;i<frn;i++)
  125. {
  126. dq[i+os]=this->dq[i];
  127. }
  128.  
  129. bac=(bac+os)%s;
  130. }
  131. }
  132. void push_back(Ty x)
  133. {
  134. if(isFull())
  135. {
  136. resize_ar();
  137. bac=(bac+1)%s;
  138. dq[bac]=x;
  139. //cout<<"in line 70\n";
  140. len++;
  141. }
  142. else
  143. {
  144. if(frn==-1)
  145. {
  146. frn=0;
  147. bac=0;
  148. dq[bac]=x;
  149. len=1;
  150. }
  151. else
  152. {
  153. bac=(bac+1)%s;
  154. dq[bac]=x;
  155. len++;
  156. }
  157. }
  158. }
  159. void pop_front()
  160. {
  161. if(empty())
  162. {
  163. //cout<<"Queue is empty"<<endl;
  164. }
  165. else
  166. {
  167. len--;
  168. if(frn==bac)
  169. {
  170. frn=-1;
  171. bac=-1;
  172. }
  173. else
  174. {
  175. frn=(frn+1)%s;
  176. }
  177. }
  178. }
  179. void pop_back()
  180. {
  181. if(empty())
  182. {
  183. //cout<<"Queue is empty"<<endl;
  184. }
  185. else
  186. {
  187. len--;
  188. if(frn==bac)
  189. {
  190. frn=-1;
  191. bac=-1;
  192. }
  193. else
  194. {
  195. if(bac==0)
  196. bac=s-1;
  197. else
  198. bac=(bac-1)%s;
  199. }
  200. }
  201. }
  202. void push_front(Ty x)
  203. {
  204. if(isFull())
  205. {
  206. resize_ar();
  207. if(frn!=0){
  208. frn=(frn-1)%s;
  209. dq[frn]=x;
  210. len++;
  211. }
  212. else{
  213. frn=s-1;
  214. dq[frn] =x;
  215. len++;
  216. }
  217. }
  218. else
  219. {
  220. if(frn==-1)
  221. {
  222. frn=0;
  223. bac=0;
  224. dq[bac]=x;
  225. len=1;
  226. }
  227. else
  228. {
  229. if(frn!=0){
  230. frn=(frn-1)%s;
  231. dq[frn]=x;
  232. len++;
  233. }
  234. else{
  235. frn=s-1;
  236. dq[frn] =x;
  237. len++;
  238. }
  239.  
  240. }
  241. }
  242. }
  243. Ty operator [] (long long int x)
  244. {
  245. return dq[x];
  246. }
  247. Ty front()
  248. {
  249. return dq[frn];
  250. }
  251. Ty back()
  252. {
  253. return dq[bac];
  254. }
  255. void display()
  256. {
  257. cout<<"frn="<<frn<<" "<<"bac="<<bac<<" "<<"s="<<s<<" "<<"len="<<len<<endl;
  258. for(long long int i=0;i<len;i++)
  259. {
  260. cout<<dq[(frn+i)%s]<<endl;
  261. }
  262.  
  263. }
  264. };
  265. int main()
  266. {
  267. D<int>q(5,4);
  268. q.display();
  269. //cout<<"Pushback60"<<endl;
  270. q.push_back(60);
  271. q.display();
  272. q.resize(6);
  273. q.display();
  274. //cout<<"popback"<<endl;
  275. q.pop_back();
  276. q.display();
  277. //cout<<"popfront"<<endl;
  278. q.pop_front();
  279. q.display();
  280. //cout<<"push_front70"<<endl;
  281. q.push_front(70);
  282. q.display();
  283. //cout<<"push_front70"<<endl;
  284. q.push_front(70);
  285. q.display();
  286. //cout<<"push_front80,90,100,63"<<endl;
  287. q.push_back(80);
  288. q.push_back(90);
  289. q.push_back(100);
  290. q.push_back(63);
  291. q.display();
  292. //cout<<"push_back65"<<endl;
  293. q.push_back(65);
  294. q.display();
  295. //cout<<"pop_back()*2"<<endl;
  296. q.pop_back();
  297. q.pop_back();
  298. q.display();
  299. q.resize(11);
  300. q.display();
  301.  
  302.  
  303.  
  304. }
Success #stdin #stdout 0s 4368KB
stdin
Standard input is empty
stdout
frn=0 bac=4 s=5 len=5
4
4
4
4
4
frn=0 bac=5 s=10 len=6
4
4
4
4
4
60
frn=0 bac=5 s=6 len=6
4
4
4
4
4
60
frn=0 bac=4 s=6 len=5
4
4
4
4
4
frn=1 bac=4 s=6 len=4
4
4
4
4
frn=0 bac=4 s=6 len=5
70
4
4
4
4
frn=5 bac=4 s=6 len=6
70
70
4
4
4
4
frn=5 bac=2 s=12 len=10
70
70
4
4
4
4
80
90
100
63
frn=5 bac=3 s=12 len=11
70
70
4
4
4
4
80
90
100
63
65
frn=5 bac=1 s=12 len=9
70
70
4
4
4
4
80
90
100
frn=0 bac=10 s=11 len=11
70
70
4
4
4
4
80
90
100
0
0