Advertisement
Guest User

Untitled

a guest
Apr 25th, 2018
53
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.86 KB | None | 0 0
  1.  
  2. #include <iostream>
  3. #include <ctime>
  4. #include <stdlib.h>
  5.  
  6. using namespace std;
  7. //---Декларация структурного типа---//
  8. struct Stack { //
  9. int info; //
  10. Stack* next; //
  11. } *begin, *t; //
  12. //---Декларация прототипов функций пользователя---//
  13. Stack* InStack(Stack**, int); // Функция формирования элементов стека
  14. void View(Stack*); // Функция просмотра информации стека
  15. void Del_All(Stack**); // Функция очистки памяти
  16. void Task(Stack **); // Функция замены местами крайних элементов
  17.  
  18. int main()
  19. {
  20. int i, in, n, kod;
  21. Stack *begin = NULL;
  22. while (true) {
  23. cout << "\n\tCreate - 1.\n\tAdd - 2.\n\tView - 3.\n\tDel - 4.\n\tTask -5\n\tEXIT - 0.\n\t";
  24. cin >> kod;
  25. switch (kod) {
  26. case 1: case 2:
  27. if (kod == 1 && begin != NULL) { //Если создаем новый стек, должны освободить память, занятую предыдущим
  28. cout << "Clear Memory first!" << endl;
  29. break;
  30. }
  31. cout << "Input kol = "; cin >> n;
  32. srand(time(0));
  33. for (i = 1; i <= n; i++) {
  34. in = rand() % 100 - 30; //Заполняем информационную часть случайными числами от -30 до 100
  35. begin = InStack(&begin, in);
  36. }
  37. if (kod == 1) cout << "Create " << n << endl;
  38. else cout << "Add " << n << endl;
  39. break;
  40. case 3:
  41. if (!begin) {
  42. cout << "Stack Is Empty!" << endl;
  43. break;
  44. }
  45. cout << "--Stack--" << endl;
  46. View(begin);
  47. break;
  48. case 4:
  49. Del_All(&begin);
  50. cout << "Memory Free!" << endl;
  51. break;
  52. case 5:
  53. if (begin == NULL) {
  54. cout << "Stack is Empty!" << endl;
  55. break;
  56. }
  57. Task(&begin);
  58. cout << "Deleted every 3ed element!" << endl;
  59. break;
  60. case 0:
  61. if (begin != NULL)
  62. Del_All(&begin);
  63. return 0; //Выход (EXIT)
  64. }
  65. }
  66. return 0;
  67. }
  68.  
  69. //---Функция добавления элемента в стек---//
  70. Stack* InStack(Stack **p, int in) { //
  71. Stack *t = new Stack; //Захват памяти для элемента
  72. t->info = in; //Формируем информационную часть
  73. t->next = *p;
  74. *p = t; //Формируем адресную часть
  75. return t;
  76. }
  77.  
  78. //---Функция просмотра стека---//
  79. void View(Stack *p) {
  80. Stack *t = p;
  81. while (t != NULL) {
  82. cout << t << " " << t->info << " " << t->next << endl; //Вывод на экран информационной части
  83. t = t->next;
  84. }
  85. }
  86.  
  87. //---Функция освобождения памяти--//
  88. void Del_All(Stack **p) {
  89. while (*p != NULL) {
  90. t = *p;
  91. *p = (*p)->next;
  92. delete t;
  93. }
  94. }
  95.  
  96. //--Функция удаления каждого 3 элемента--//
  97. void Task(Stack **b) {
  98. if (!(b)) {
  99. cout << "No elements\n";
  100. return;
  101. }
  102. Stack *t1 = *b;
  103. while (t1 != NULL && t1->next != NULL) {
  104. Stack *t2 = t1->next;
  105. t1->next = t2->next;
  106. if (t2->next == NULL) t1 = t1;
  107. else t1 = t2->next;
  108. delete t2;
  109. }
  110.  
  111. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement