Advertisement
Guest User

Untitled

a guest
Dec 11th, 2017
55
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.08 KB | None | 0 0
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. template <typename T> class list
  5. {
  6. struct element
  7. {
  8. T data;
  9. element * prev;
  10. element(T x, element *elem): data(x), prev(elem){};
  11. };
  12. int length;
  13. element* top;
  14. public:
  15.  
  16. list ()
  17. {
  18. length = 0;
  19. top = NULL;
  20. }
  21. bool empty()
  22. {
  23. if (length == 0)
  24. return 1;
  25. else return 0;
  26. }
  27. void push_front (T x)
  28. {
  29. insert(x, 0);
  30. }
  31. void pop_front ()
  32. {
  33. T templength = length;
  34. element *temptop = top;
  35. if (length > 0)
  36. {
  37. while (templength != 2)
  38. {
  39. temptop = temptop->prev;
  40. templength--;
  41. }
  42. }
  43. temptop->prev = NULL;
  44. delete temptop;
  45. length--;
  46. }
  47. void insert (T i, T x)
  48. {
  49. if (i + 1 == length)
  50. push_back(x);
  51. if ((length >= i + 1) && i >= 0)
  52. {
  53. T templength = length;
  54. element* temp = new element (top->data, top);
  55. top = temp;
  56. temp = top;
  57. temp = temp->prev;
  58. while (templength != i + 1)
  59. {
  60. temp->data = temp->prev->data;
  61. temp = temp->prev;
  62. templength--;
  63. }
  64. temp->data = x;
  65. delete temp;
  66. length++;
  67. }
  68. }
  69. T back()
  70. {
  71. return top->data;
  72. }
  73. T front()
  74. {
  75. T templength = length;
  76. element *temptop = top;
  77. if (length > 0)
  78. {
  79. while (templength != 1)
  80. {
  81. temptop = temptop->prev;
  82. templength--;
  83. }
  84. }
  85. T res = temptop->data;
  86. delete temptop;
  87. return res;
  88. }
  89. void pop_back()
  90. {
  91. top = top->prev;
  92. length --;
  93. }
  94.  
  95. void push_back (T x)
  96. {
  97. element* temp = new element (x, top);
  98. top = temp;
  99. length ++;
  100. delete temp;
  101. }
  102. void clear()
  103. {
  104. top = 0;
  105. length = 0;
  106. }
  107. void resize( int i, T value)
  108. {
  109. if (i > length)
  110. {
  111. while (i != length)
  112. {
  113. push_back(value);
  114. }
  115. }
  116. }
  117. void resize( int i)
  118. {
  119. while (length != i)
  120. {
  121. pop_back();
  122. }
  123. }
  124. int size ()
  125. {
  126. return length;
  127. }
  128. void remove(T value)
  129. {
  130. T templength = length;
  131. element *temptop = top;
  132. int k = 0;
  133. while (templength != 1)
  134. {
  135. if ( k == 1)
  136. {
  137. if (temptop->prev->data == value)
  138. {
  139. temptop->prev = temptop->prev->prev;
  140. length--;
  141. }
  142. else
  143. temptop = temptop->prev;
  144. templength--;
  145. } else {
  146. if (top->data == value)
  147. {
  148. top = top->prev;
  149. temptop = top;
  150. length--;
  151. templength--;
  152. }
  153. k = 1;
  154. }
  155.  
  156. }
  157. }
  158. T& operator[](int i)
  159. {
  160. T templength = length;
  161. element* temptop = top;
  162. while (templength != i + 1)
  163. {
  164. temptop = temptop->prev;
  165. templength--;
  166. }
  167. T res = temptop->data;
  168. delete temptop;
  169. return res;
  170. }
  171. void swap(element *f, element *s)
  172. {
  173. int check = 0;
  174. if (s -> prev == top)
  175. check = 1;
  176. if (s -> prev == f)
  177. {
  178. s ->prev = f ->prev ;
  179. f ->prev = s ->prev ->prev;
  180. s ->prev ->prev = f;
  181. } else
  182. {
  183. element *fdop = f ->prev;
  184. element *sdop = s ->prev;
  185. element *prfdop = fdop -> prev;
  186. s ->prev = fdop;
  187. fdop ->prev = sdop ->prev;
  188. f ->prev = sdop;
  189. sdop ->prev = prfdop;
  190. }
  191. if (check == 1)
  192. top = s->prev;
  193. }
  194. void sort()
  195. {
  196. for (int k = 1; k <= length; k++)
  197. {
  198. element* temptop = new element(NULL, top);
  199. for (int templength = length; templength > k; templength--)
  200. {
  201. if (temptop->prev ->prev->data > temptop ->prev ->data)
  202. {
  203. swap(temptop->prev ,temptop);
  204. }
  205. temptop = temptop-> prev;
  206. }
  207. delete temptop;
  208. }
  209. }
  210. element *end()
  211. {
  212. element* temptop = new element(NULL, top);
  213. top = temptop;
  214. temptop = top;
  215. delete temptop;
  216. return top->prev;
  217. }
  218. element *begin()
  219. {
  220. element* temptop = top;
  221. T templength = length;
  222. for (; templength > 0; templength--)
  223. {
  224. temptop = temptop->prev;
  225. }
  226. return temptop-> prev;
  227. }
  228. struct Iterator
  229. {
  230. public:
  231. element *it;
  232. void operator= (element *out)
  233. {
  234. it = out ;
  235. }
  236. T operator* ()
  237. {
  238. return it->data;
  239. }
  240. element* operator--()
  241. {
  242. it = it->prev;
  243. return it;
  244. }
  245. bool operator == (element* temp)
  246. {
  247. if (it == temp)
  248. return 1;
  249. return 0;
  250. }
  251. bool operator!= (element* temp)
  252. {
  253. if (it != temp)
  254. return 1;
  255. return 0;
  256. }
  257. };
  258. ~list ()
  259. {
  260. delete top;
  261. }
  262. };
  263.  
  264.  
  265. int main()
  266. {
  267. list<int> a;
  268. a.push_back(9);
  269. a.push_back(5);
  270. a.push_back(1);
  271. a.push_back(4);
  272. for (int i = 0; i < a.size(); i ++)
  273. {
  274. cout << a[i];
  275. }
  276. cout << endl;
  277. a.sort();
  278. for (int i = 0; i < 4; i++)
  279. cout << a[i];
  280.  
  281. return 0;
  282. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement