Advertisement
Guest User

Untitled

a guest
Jan 24th, 2020
127
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.75 KB | None | 0 0
  1. #include "pch.h"
  2. #include <iostream>
  3.  
  4. template <typename T>
  5. class list {
  6. public:
  7. class node {
  8. public:
  9. node*next;
  10. T key;
  11. node() {
  12. next = nullptr;
  13. }
  14. };
  15. int _size;
  16. node* head;
  17. node*front;
  18. list() {
  19. head = nullptr;
  20. front = nullptr;
  21. int _size = 0;
  22. }
  23.  
  24. void push(T key) {
  25. node*n = new node();
  26. n->key = key;
  27.  
  28. front->next = n;
  29. front = n;
  30.  
  31. if (head == nullptr)
  32. head = front;
  33.  
  34. _size++;
  35. }
  36.  
  37. void rem(int i) {
  38. int j = 0;
  39. node*n = head;
  40. node*p = nullptr;
  41. while (j < i) {
  42. p = n;
  43. n = n->next;
  44. j++;
  45. }
  46.  
  47. if (p == nullptr) {
  48. front = n->next;
  49. }
  50. else {
  51. p->next = n->next;
  52. }
  53. }
  54.  
  55. T operator [](int i) {
  56. int j = 0;
  57. node*n = head;
  58. while (j < i) {
  59. n = n->next;
  60. j++;
  61. }
  62.  
  63. return n->key;
  64. }
  65.  
  66. int size() {
  67. return _size;
  68. }
  69. };
  70. ////////////////////////////////////////////////////////////////////////////////////
  71.  
  72. #include <iostream>
  73. #include <list>
  74. using namespace std;
  75.  
  76. template<typename T, typename C>
  77. class Stack {
  78. private:
  79. C container;
  80. public:
  81. //Не обязательно их писать, но Кеков сказал, что это больше похоже на структуру паттерна
  82. virtual void push(T key) = 0;
  83. virtual T pop() = 0;
  84. virtual bool empty() = 0;
  85. virtual T top() = 0;
  86. virtual int size() = 0;
  87. };
  88.  
  89. //Специализация стека под лист из STL
  90. template<typename T>
  91. class Stack<T, list<T>> {
  92. private:
  93. list<T> container; //несущий контейнер
  94. public:
  95. void push(T key)
  96. {
  97. container.push_back(key);
  98. }
  99. T pop()
  100. {
  101. auto it = container.end();
  102. advance(it, -1);
  103. T key = *it;
  104. container.pop_back();
  105. return key;
  106. }
  107. bool empty()
  108. {
  109. return container.size() == 0;
  110. }
  111. int size() {
  112. return container.size();
  113. }
  114. T top() {
  115. auto it = container.end();
  116. advance(it, -1);
  117. T key = *it;
  118. return key;
  119. }
  120. };
  121.  
  122. template<typename T, typename C>
  123. class Queue {
  124. private:
  125. C container;
  126. public:
  127. virtual void push(T key) = 0;
  128. virtual T pop() = 0;
  129. virtual bool empty() = 0;
  130. virtual T top() = 0;
  131. virtual int size() = 0;
  132. };
  133.  
  134.  
  135. template<typename T>
  136. class Queue<T, list<T>> {
  137. private:
  138. list<T> container;
  139. public:
  140. void push(T key) {
  141. container.push_back(key);
  142. }
  143. bool empty() {
  144. return container.size() == 0;
  145. }
  146. int size() {
  147. return container.size();
  148. }
  149. T top() {
  150. auto it = container.begin();
  151. T key = *it;
  152. return key;
  153. }
  154. T pop() {
  155. auto it = container.begin();
  156. T key = *it;
  157. container.erase(it);
  158. return key;
  159. }
  160. };
  161.  
  162. template<typename T, typename C>
  163. class PriorityQueue {
  164. private:
  165. C container;
  166. public:
  167. virtual void push(T key) = 0;
  168. virtual T pop() = 0;
  169. virtual bool empty() = 0;
  170. virtual T top() = 0;
  171. virtual int size() = 0;
  172. };
  173.  
  174. template<typename T>
  175. class PriorityQueue<T, list<T>> {
  176. private:
  177. list<T> container;
  178. public:
  179. void push(T key) {
  180. container.push_back(key);
  181. container.sort();
  182. }
  183.  
  184. bool empty() {
  185. return container.size() == 0;
  186. }
  187. int size() {
  188. return container.size();
  189. }
  190. T top() {
  191. auto it = container.begin();
  192. T key = *it;
  193. return key;
  194. }
  195. T pop() {
  196. auto it = container.begin();
  197. T key = *it;
  198. container.erase(it);
  199. return key;
  200. }
  201. };
  202.  
  203. int main()
  204. {
  205. list<int> l;
  206. l.push(1);
  207. l.push(2);
  208. l.push(3);
  209. l.rem(1);
  210. std::cout << "Hello World!\n";
  211. }
  212.  
  213. // Запуск программы: CTRL+F5 или меню "Отладка" > "Запуск без отладки"
  214. // Отладка программы: F5 или меню "Отладка" > "Запустить отладку"
  215.  
  216. // Советы по началу работы
  217. // 1. В окне обозревателя решений можно добавлять файлы и управлять ими.
  218. // 2. В окне Team Explorer можно подключиться к системе управления версиями.
  219. // 3. В окне "Выходные данные" можно просматривать выходные данные сборки и другие сообщения.
  220. // 4. В окне "Список ошибок" можно просматривать ошибки.
  221. // 5. Последовательно выберите пункты меню "Проект" > "Добавить новый элемент", чтобы создать файлы кода, или "Проект" > "Добавить существующий элемент", чтобы добавить в проект существующие файлы кода.
  222. // 6. Чтобы снова открыть этот проект позже, выберите пункты меню "Файл" > "Открыть" > "Проект" и выберите SLN-файл.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement