Maxim_Leo

Untitled

Apr 24th, 2022
20
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.94 KB | None | 0 0
  1. #include <iostream>
  2. #define n_ 10
  3. using namespace std;
  4.  
  5. class Stack {
  6. public:
  7. int value;
  8. Stack* next;
  9. Stack* head;
  10. Stack* CreateElem(int x) {
  11. Stack* p;
  12. p = new Stack;
  13. p->value = x;
  14. p->next = nullptr;
  15. return p;
  16. }
  17. Stack() {
  18. next = nullptr;
  19. head = nullptr;
  20. }
  21. bool isEmpty() {
  22. if (head == nullptr) return true;
  23. else return false;
  24. }
  25. Stack* push(int value) {
  26. Stack* p = CreateElem(value);
  27. p->next = head;
  28. head = p;
  29. return head;
  30. }
  31. Stack* pop() {
  32. Stack* p = head;
  33. head = head->next;
  34. delete[] p;
  35. return head;
  36. }
  37. void top() {
  38. if (this->head == nullptr) cout << "Стек пуст"<<endl;
  39. else cout << "Вершина стэка: " << this->head->value<<endl;
  40. }
  41. void show() {
  42. Stack* p=head;
  43. while (p->next!=nullptr) {
  44. cout << p->value;
  45. p = p->next;
  46. }
  47. cout << p->value<<" ";
  48. }
  49. };
  50.  
  51. struct stack {
  52. int a[n_];
  53. int index;
  54. };
  55. void Create(struct stack* stack) {
  56. stack->index=NULL;
  57. }
  58. bool isEmpty_(struct stack* stack) {
  59. if (stack->index == NULL) return true;
  60. else return false;
  61. }
  62. void push_(int elem, struct stack* stack) {
  63. if (stack->index == n_) cout << "Стэк полон";
  64. else {
  65.  
  66. stack->a[stack->index] = elem;
  67. stack->index = stack->index + 1;
  68. }
  69. }
  70. void pop_(struct stack* stack) {
  71. if (stack->index == NULL) cout<<"Нельзя удалить элемент из пустого стэка";
  72. else {
  73. stack->a[stack->index] = NULL;
  74. stack->index = stack->index - 1;
  75. }
  76. }
  77. void show_(struct stack* stack) {
  78. if (stack->index == NULL) cout << "Пустой стэк";
  79. int i =stack->index-1;
  80. for (i; i >=0; i--) {
  81. if(stack->a[i]!=NULL) cout << stack->a[i]<<" ";
  82. }
  83. }
  84. int main() {
  85. setlocale(LC_ALL, "Russian");
  86. int select;
  87. cout << "Выберите способ: "<<endl;
  88. cout << "1)Цепной стэк" << endl;
  89. cout << "2)Сплошной стэк" << endl;
  90. cin >> select;
  91. if (select == 1) {
  92. int n, n1, x;
  93. string string1;
  94. Stack stack;
  95. cout << "Пустой стэк создан" << endl;
  96. cout << "Проверка стэка на пустоту: " << stack.isEmpty() << endl;
  97. cout << "Введите количество элементов для заполнения стэка: ";
  98. cin >> n;
  99. for (int i = 0; i < n; i++) {
  100. cout << "Введите элемент: ";
  101. cin >> x;
  102. stack.push(x);
  103. }
  104. cout << "Проверка стэка на пустоту: " << stack.isEmpty() << endl;
  105. if (stack.isEmpty() == 0) stack.top();
  106.  
  107. else 0;
  108. cout << "Вывод элементов стэка" << endl;
  109. stack.show();
  110. cout << endl;
  111. cout << "Хотите ли вы удалить элементы и сколько?" << endl;
  112. cin >> string1;
  113. if (string1 == "yes" or string1 == "Yes") {
  114. cin >> n1;
  115. for (int i = 0; i < n1; i++) {
  116. stack.pop();
  117. cout << endl;
  118. }
  119. stack.show();
  120. }
  121. else cout << "конец";
  122.  
  123. }
  124. else if (select == 2) {
  125. stack* stk = new stack;
  126. int n, n1,x=0;
  127. string string1;
  128. Create (stk);
  129. cout << "Пустой стэк создан" << endl;
  130. cout << "Проверка стэка на пустоту: " << isEmpty_(stk) << endl;
  131. cout << "Введите количество элементов для заполнения стэка: ";
  132. cin >> n;
  133. for (int i = 0; i < n; i++) {
  134. cout << "Введите элемент: ";
  135. cin >> x;
  136. push_(x,stk);
  137. }
  138. cout << "Проверка стэка на пустоту: " << isEmpty_(stk) << endl;
  139. cout << "Вывод элементов стэка" << endl;
  140. show_(stk);
  141. cout << endl;
  142. cout << "Хотите ли вы удалить элементы и сколько?" << endl;
  143. cin >> string1;
  144. if (string1 == "yes" or string1 == "Yes") {
  145. cin >> n1;
  146. for (int i = 0; i < n1; i++) {
  147. pop_(stk);
  148. cout << endl;
  149. }
  150. show_(stk);
  151. }
  152. else cout << "конец";
  153. }
  154. else cout << "Неправильный номер";
  155.  
  156. }
Advertisement
Add Comment
Please, Sign In to add comment