Advertisement
Toliak

lab10

Dec 1st, 2018
322
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.71 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3. #include <iomanip>
  4. #include <cassert>
  5.  
  6. template<typename T>
  7. struct StackNode
  8. {
  9.     explicit StackNode(const T &value)
  10.         : value(value)
  11.     {}
  12.  
  13.     T value;
  14.     StackNode *next = nullptr;
  15. };
  16.  
  17. template<typename T>
  18. struct Stack
  19. {
  20.     void push(const T &value)
  21.     {
  22.         auto *newFirst = new StackNode<T>(value);
  23.  
  24.         newFirst->next = first;         // Линкуем с предыдущим Nod'ом
  25.         first = newFirst;               // Первый Node - первый
  26.     }
  27.     T pop()
  28.     {
  29.         assert(first != nullptr);
  30.  
  31.         T result = first->value;        // Копируем результат
  32.         StackNode<T> *prev = first;     // Сохраняем бывший указатель
  33.         first = first->next;            // Перемещаемся вперед
  34.  
  35.         delete prev;                    // Освобождаем память
  36.         return result;
  37.  
  38.     }
  39.     ~Stack()
  40.     {
  41.         while (first != nullptr) {
  42.             // Пока есть значения - удаляем их
  43.             pop();
  44.         }
  45.     }
  46.  
  47.     StackNode<T> *first = nullptr;
  48. };
  49.  
  50. int main()
  51. {
  52.     Stack<std::string> stack;
  53.  
  54.     size_t amount;
  55.     std::cout << "=INPUT==" << std::endl;
  56.     std::cout << "Amount: ";
  57.     std::cin >> amount;
  58.     std::cin.ignore();
  59.  
  60.     for (size_t i = 0; i < amount; i++) {
  61.         std::string value;
  62.         std::cout << "[" << std::setw(2) << "] Value: ";
  63.         std::getline(std::cin, value);
  64.  
  65.         stack.push(value);
  66.     }
  67.  
  68.     std::cout << "==OUTPUT==" << std::endl;
  69.     while (stack.first != nullptr) {
  70.         std::cout << stack.pop() << std::endl;
  71.     }
  72.  
  73.     return 0;
  74. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement