Advertisement
Bibodui

Stack

Dec 9th, 2020
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.68 KB | None | 0 0
  1. #include <iostream>
  2. #include <Windows.h>
  3.  
  4. using namespace std;
  5.  
  6. struct Node
  7. {
  8.     int Value;
  9.     Node* Next;
  10. };
  11.  
  12. Node* stack;
  13.  
  14. void Initial(Node*);
  15. void Output(Node*);
  16. void DeleteAll(Node*&);
  17. void AddElement(Node*&, int);
  18. void DeleteElement(Node*&, int);
  19.  
  20. int main()
  21. {
  22.     int q;
  23.  
  24.     do
  25.     {
  26.         SetConsoleOutputCP(1251);
  27.         SetConsoleCP(1251);
  28.  
  29.         cout << "Выберите действие:" << endl;
  30.         cout << "1. Ввести элементы стека" << endl;
  31.         cout << "2. Вывести стек на экран" << endl;
  32.         cout << "3. Удалить весь стек" << endl;
  33.         cout << "4. Добавить новый элемент в стек" << endl;
  34.         cout << "5. Удалить элемент из стека" << endl;
  35.         cout << "0. Выход" << endl;
  36.  
  37.         cin >> q;
  38.  
  39.         if (q == 1)
  40.             Initial(stack);
  41.         else if (q == 2)
  42.             Output(stack);
  43.         else if (q == 3)
  44.             DeleteAll(stack);
  45.         else if (q == 4)
  46.         {
  47.             cout << "Введите значение нового элемента" << endl;
  48.             int elem;
  49.             cin >> elem;
  50.             AddElement(stack, elem);
  51.         }
  52.         else if (q == 5)
  53.         {
  54.             int elem = 0;
  55.             DeleteElement(stack, elem);
  56.         }
  57.        
  58.  
  59.     } while (q != 0);
  60. }
  61.  
  62. void Initial(Node *stack)//инициализация стека
  63. {
  64.     stack = nullptr;
  65.     Node* tmp;//tmp - "рабочий" указатель
  66.     int elem;
  67.  
  68.     cout << "Введите элементы списка:" << endl;
  69.     cin >> elem;
  70.     while (elem != 0)
  71.     {
  72.         tmp = new Node;
  73.         tmp->Value = elem;
  74.         tmp->Next = stack;
  75.         stack = tmp;
  76.         cin >> elem;
  77.     }
  78. }
  79.  
  80. void Output(Node *stack)//Вывод стека
  81. {
  82.     if (stack == nullptr)
  83.         cout << "Стек пуст" << endl;
  84.     else
  85.     {
  86.         Node *tmp = stack;
  87.         while (tmp != nullptr)
  88.         {
  89.             cout << '\t' << tmp->Value << endl;
  90.             tmp = tmp->Next;
  91.         }
  92.     }
  93. }
  94.  
  95. void DeleteAll(Node*& stack)
  96. {
  97.     while (stack != nullptr)
  98.     {
  99.         Node* tmp = stack->Next;
  100.         delete stack;
  101.         stack = tmp;
  102.     }
  103. }
  104.  
  105. void AddElement(Node*& stack, int elem)
  106. {
  107.     Node* tmp = new Node;
  108.     tmp->Value = elem;
  109.     tmp->Next = stack;
  110.     stack = tmp;
  111. }
  112.  
  113. void DeleteElement(Node*& stack, int elem)
  114. {
  115.     if (stack == nullptr)
  116.         cout << "Стек пуст" << endl;
  117.     else
  118.     {
  119.         Node* tmp = new Node;
  120.         elem = stack->Value;
  121.         tmp = stack;
  122.         stack = tmp->Next;
  123.         delete tmp;
  124.     }
  125. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement