Advertisement
Pandarec13

Untitled

May 18th, 2020
30
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.74 KB | None | 0 0
  1. #include <iostream>
  2. #include <ctime>
  3. #include <cassert>
  4.  
  5. class Node {
  6. public:
  7. int value;
  8. Node *next;
  9. Node *prev;
  10. };
  11.  
  12. class Deque {
  13. protected:
  14. Node *head = NULL;
  15. Node *tail = NULL;
  16. int sizeOfDeque = 0;
  17.  
  18. void push_front(int value) {
  19. if (head == NULL) {
  20. Node *Temp = new Node;
  21. Temp->value = value;
  22. Temp->next = NULL;
  23. Temp->prev = NULL;
  24. head = Temp;
  25. tail = Temp;
  26. }
  27. else {
  28. Node *Temp = new Node;
  29. head->prev = Temp;
  30. Temp->value = value;
  31. Temp->next = head;
  32. Temp->prev = NULL;
  33. head = Temp;
  34. }
  35. ++sizeOfDeque;
  36. }
  37.  
  38. void push_back(int value) {
  39. if (head == NULL) {
  40. Node *Temp = new Node;
  41. Temp->value = value;
  42. Temp->next = NULL;
  43. Temp->prev = NULL;
  44. head = Temp;
  45. tail = Temp;
  46. }
  47. else {
  48. Node *Temp = new Node;
  49. tail->next = Temp;
  50. Temp->value = value;
  51. Temp->prev = tail;
  52. Temp->next = NULL;
  53. tail = Temp;
  54. }
  55. ++sizeOfDeque;
  56. }
  57.  
  58. void pop_front() {
  59. if (sizeOfDeque > 0) {
  60. Node *Temp = head;
  61. head = head->next;
  62. delete Temp;
  63. --sizeOfDeque;
  64. }
  65. else
  66. std::cout << "Deque is empty!" << std::endl;
  67. }
  68. void pop_back() {
  69. if (sizeOfDeque > 0) {
  70. Node *Temp = tail;
  71. tail = tail->prev;
  72. delete Temp;
  73. --sizeOfDeque;
  74. }
  75. else
  76. std::cout << "Deque is empty!" << std::endl;
  77. }
  78.  
  79. void init(int initSize) {
  80. for (int i = 0; i != initSize; ++i) {
  81. push_back(rand() % 100);
  82. }
  83. }
  84.  
  85. void isEmpty() {
  86. if (!sizeOfDeque)
  87. std::cout << "Deque is empty!" << std::endl;
  88. else
  89. std::cout << "Deque is not empty!" << std::endl;
  90. }
  91.  
  92. void checkValues() {
  93. if (!sizeOfDeque)
  94. std::cout << "Deque is empty!" << std::endl;
  95. else {
  96. for (int i = 0; i < sizeOfDeque; ++i) {
  97. int temp = head->value;
  98. std::cout << temp << std::endl;
  99. pop_front();
  100. push_back(temp);
  101. }
  102. }
  103. }
  104.  
  105. void front() {
  106. if (!sizeOfDeque)
  107. std::cout << "Deque is empty!" << std::endl;
  108. else
  109. std::cout << head->value << std::endl;
  110. }
  111. void back() {
  112. if (!sizeOfDeque)
  113. std::cout << "Deque is empty!" << std::endl;
  114. else
  115. std::cout << tail->value << std::endl;
  116. }
  117.  
  118. };
  119.  
  120. class DequeD : Deque {
  121. public:
  122. void push_frontD(int number) { push_front(number); }
  123. void push_backD(int number) { push_back(number); }
  124. void pop_frontD() { pop_front(); }
  125. void pop_backD() { pop_back(); }
  126. void isEmptyD() { isEmpty(); }
  127. void initD(int sizeOfDeque) { init(sizeOfDeque); }
  128. void checkValuesD() { checkValues(); }
  129. void frontD() { front(); }
  130. void backD() { back(); }
  131. int size() { return sizeOfDeque; }
  132. int &operator[] (int index);
  133.  
  134. void ShellSort(DequeD deque,int n)
  135. {
  136. int i,j,count;
  137. int d=n;
  138. d=d/2;
  139. while (d>0)
  140. {
  141. for (i=0; i<n-d; i++)
  142. {
  143. j=i;
  144. while (j>=0 && deque[j]>deque[j+d])
  145. {
  146. count=deque[j];
  147. deque[j]=deque[j+d];
  148. deque[j+d]=count;
  149. j--;
  150. }
  151. }
  152. d=d/2;
  153. }
  154. for (i=0; i<n; i++) std::cout<<deque[i]<<" "; //вывод массива
  155.  
  156.  
  157. }
  158. };
  159.  
  160. int &DequeD::operator[] (int index) {
  161. Node *Temp = head;
  162. for (int i = 0; i < index; ++i) {
  163. push_back(Temp->value);
  164. Temp = head->next;
  165. pop_front();
  166. }
  167. for (int i = 0; i < index; ++i) {
  168. push_front(tail->value);
  169. pop_back();
  170. }
  171. return Temp->value;
  172. }
  173.  
  174. int main()
  175. {
  176. srand(time(NULL));
  177. DequeD Example;
  178. int choice = 0, choiceInit = 0;
  179. std::cout << "Type any number to init the deque, 0 to continue\n";
  180. std::cin >> choiceInit;
  181.  
  182. if (choiceInit) {
  183. std::cout << "Size?\n";
  184. int sizeOfDeque=0;
  185. std::cin >> sizeOfDeque;
  186. Example.initD(sizeOfDeque);
  187. std::cout << "Deque has been initialized!\n";
  188. }
  189.  
  190.  
  191.  
  192. while(choice != 12) {
  193. std::cout << "Enter number:\n" <<
  194. "1 - push_front\n" <<
  195. "2 - push_back\n" <<
  196. "3 - pop_front\n" <<
  197. "4 - pop_back\n" <<
  198. "5 - check all\n" <<
  199. "6 - check front\n" <<
  200. "7 - check back\n" <<
  201. "8 - get value\n" <<
  202. "9 - set value\n" <<
  203. "10 - check empty\n" <<
  204. "11 - ShellSort\n" <<
  205. "12 - stop\n" <<
  206. "> ";
  207. std::cin >> choice;
  208. if (choice == 1) {
  209. std::cout << "Type any integer number: ";
  210. int number;
  211. std::cin >> number;
  212. Example.push_frontD(number);
  213. }
  214. if (choice == 2) {
  215. std::cout << "Type any integer number: ";
  216. int number;
  217. std::cin >> number;
  218. Example.push_backD(number);
  219. }
  220. if (choice == 3) {
  221. std::cout << "Done!\n";
  222. Example.pop_frontD();
  223. }
  224. if (choice == 4) {
  225. std::cout << "Done!\n";
  226. Example.pop_backD();
  227. }
  228. if (choice == 5) {
  229. Example.checkValuesD();
  230. }
  231. if (choice == 6) {
  232. Example.frontD();
  233. }
  234. if (choice == 7) {
  235. Example.backD();
  236. }
  237. if (choice == 8) {
  238. int tempIndex;
  239. std::cout << "Type index" << std::endl;
  240. std::cin >> tempIndex;
  241. if (tempIndex >= 0 && tempIndex < Example.size()) {
  242. std::cout << Example[tempIndex] << std::endl;
  243. }
  244. else
  245. std::cout << "error" << std::endl;
  246. }
  247. if (choice == 9) {
  248. int tempIndex;
  249. std::cout << "Type index" << std::endl;
  250. std::cin >> tempIndex;
  251. if (tempIndex >= 0 && tempIndex < Example.size()) {
  252. std::cout << "Type value" << std::endl;
  253. std::cin >> Example[tempIndex];
  254. }
  255. else
  256. std::cout << "error" << std::endl;
  257. }
  258. if (choice == 10) {
  259. Example.isEmptyD();
  260. }
  261. if (choice == 11) {
  262. Example.ShellSort(Example,Example.size());
  263.  
  264. }
  265. }
  266.  
  267. return 0;
  268. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement