Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <string>
- #include <iomanip>
- #include <cassert>
- template<typename T>
- struct StackNode
- {
- explicit StackNode(const T &value)
- : value(value)
- {}
- T value;
- StackNode *next = nullptr;
- };
- template<typename T>
- struct Stack
- {
- void push(const T &value)
- {
- auto *newFirst = new StackNode<T>(value);
- newFirst->next = first; // Линкуем с предыдущим Nod'ом
- first = newFirst; // Первый Node - первый
- }
- T pop()
- {
- assert(first != nullptr);
- T result = first->value; // Копируем результат
- StackNode<T> *prev = first; // Сохраняем бывший указатель
- first = first->next; // Перемещаемся вперед
- delete prev; // Освобождаем память
- return result;
- }
- ~Stack()
- {
- while (first != nullptr) {
- // Пока есть значения - удаляем их
- pop();
- }
- }
- StackNode<T> *first = nullptr;
- };
- int main()
- {
- Stack<std::string> stack;
- size_t amount;
- std::cout << "=INPUT==" << std::endl;
- std::cout << "Amount: ";
- std::cin >> amount;
- std::cin.ignore();
- for (size_t i = 0; i < amount; i++) {
- std::string value;
- std::cout << "[" << std::setw(2) << "] Value: ";
- std::getline(std::cin, value);
- stack.push(value);
- }
- std::cout << "==OUTPUT==" << std::endl;
- while (stack.first != nullptr) {
- std::cout << stack.pop() << std::endl;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement