Стек в C ++ STL с примером

Содержание:

Anonim

Что такое std :: stack?

Стек - это структура данных, которая работает на основе метода LIFO (Last In First Out). Std :: stack позволяет добавлять и удалять элементы только с одного конца.

Класс std :: stack - это адаптер контейнера. Объекты-контейнеры содержат данные аналогичного типа. Вы можете создать стек из различных контейнеров последовательностей. Если контейнер не указан, по умолчанию будет использоваться контейнер deque. Адаптеры контейнера не поддерживают итераторы, поэтому его нельзя использовать для управления данными.

В этом руководстве по C ++ вы узнаете

  • Что такое std :: stack?
  • Синтаксис стека
  • Типы участников
  • Операции в стеке
  • Реализация стека
  • push () и pop ()
  • пустой (), размер (), верх ()
  • emplace () и swap ()
  • Стек в STL

Синтаксис стека

Чтобы создать стек, мы должны включить заголовочный файл в наш код. Затем мы используем этот синтаксис для определения std :: stack:

template  > class stack;
  • Тип - это Тип элемента, содержащегося в std :: stack. Это может быть любой допустимый тип C ++ или даже пользовательский тип.
  • Контейнер - это Тип нижележащего объекта-контейнера.

Типы участников

Вот типы членов стека:

  • value_type - Первый параметр шаблона, T. Он обозначает типы элементов.
  • container_type - второй параметр шаблона, Container. Он обозначает базовый тип контейнера.
  • size_type - Целочисленный тип без знака.

Операции в стеке

Стек C ++ поддерживает следующие основные операции:

  • push - добавляет / помещает элемент в стек.
  • pop - Удаляет / выталкивает элемент из стека.
  • peek - возвращает верхний элемент стека, не удаляя его.
  • isFull - Проверяет, заполнен ли стек.
  • isEmpty - Проверяет, пуст ли стек.

Реализация стека

Шаг 1) Изначально у нас пустой стек. Верх пустого стека устанавливается на -1.

Шаг 2) Затем мы поместили элемент 5 в стек. Верх стека будет указывать на элемент 5.

Шаг 3) Затем мы поместили элемент 50 в стек. Верх стека смещается и указывает на элемент 50.

Шаг 4) Затем мы выполнили операцию выталкивания, удалив верхний элемент из стека. Элемент 50 извлекается из стопки. Теперь верх стека указывает на элемент 5.

push () и pop ()

Функции stack :: push () добавляют новый элемент в начало стека. После вставки размер стека увеличивается на 1. Функция принимает следующий синтаксис:

stack.push(value)

Значение - это элемент, который нужно вставить в стек.

Функция stack :: pop () удаляет верхний элемент стека. Это самый новый элемент в стопке. После удаления размер стопки уменьшается на 1. Вот синтаксис функции:

stack.pop()

Функция не принимает параметров.

Пример 1:

#include #include using namespace std;int main() {stack st;st.push(10);st.push(20);st.push(30);st.push(40);st.pop();st.pop();while (!st.empty()) {cout << ' ' << st.top();st.pop();}}

Выход:

Вот скриншот кода:

Пояснение к коду:

  1. Включите файл заголовка iostream в наш код, чтобы использовать его функции.
  2. Включите файл заголовка стека в наш код, чтобы использовать его функции.
  3. Включите пространство имен std в наш код, чтобы использовать его классы без его вызова.
  4. Вызовите функцию main (). Программная логика должна быть добавлена ​​в эту функцию.
  5. Создайте стек st для хранения целочисленных значений.
  6. Используйте функцию push (), чтобы вставить значение 10 в стек.
  7. Используйте функцию push (), чтобы вставить значение 20 в стек.
  8. Используйте функцию push (), чтобы вставить значение 30 в стек.
  9. Используйте функцию push (), чтобы вставить значение 40 в стек.
  10. Используйте функцию pop (), чтобы удалить верхний элемент из стека, то есть 40. Теперь верхний элемент становится 30.
  11. Используйте функцию pop (), чтобы удалить верхний элемент из стека, то есть 30. Теперь верхний элемент становится 20.
  12. Используйте цикл while и функцию empty (), чтобы проверить, НЕ пуст ли стек. ! - оператор НЕ.
  13. Печать текущего содержимого стека на консоли.
  14. Вызовите функцию pop () в стеке.
  15. Конец тела цикла while.
  16. Конец тела функции main ().

пустой (), размер (), верх ()

Стеки имеют встроенные функции, которые вы можете использовать, чтобы поэкспериментировать со стеком и его значениями. К ним относятся:

  • empty () - проверяет, пуст ли стек.
  • size () - возвращает размер стека, то есть количество элементов в стеке.
  • top () - обращается к элементу стека вверху.

Пример 2:

#include #include using namespace std;void createStack(stack  mystack){stack  ms = mystack;while (!ms.empty()){cout << '\t' << ms.top();ms.pop();}cout << '\n';}int main(){stack  st;st.push(32);st.push(21);st.push(39);st.push(89);st.push(25);cout << "The stack st is: ";createStack(st);cout << "\n st.size() : " << st.size();cout << "\n st.top() : " << st.top();cout << "\n st.pop() : ";st.pop();createStack(st);return 0;}

Выход:

Вот скриншот кода:

Пояснение к коду:

  1. Включите файл заголовка iostream в наш код, чтобы использовать его функции.
  2. Включите файл заголовка стека в наш код, чтобы использовать его функции.
  3. Включите пространство имен std в нашу программу, чтобы использовать его классы, не вызывая его.
  4. Создайте функцию createStack, которую мы можем использовать для создания стека mystack. Стек будет содержать набор целых чисел.
  5. Начало тела функции createStack.
  6. Создайте экземпляр типа данных mystack и присвойте ему имя ms.
  7. Используйте цикл while и функцию empty (), чтобы проверить, пуст ли стек.
  8. Начало тела цикла while.
  9. Используйте функцию top (), хранящуюся в верхней части стека. Символ \ t создаст новую вкладку.
  10. Используйте функцию pop (), чтобы удалить элемент наверху стека.
  11. Конец тела цикла while.
  12. Напечатайте пустую строку на консоли.
  13. Конец тела функции createStack.
  14. Вызовите функцию main (). Логика программы должна быть добавлена ​​в тело функции main ().
  15. Начало тела функции main ().
  16. Создайте объект стека st.
  17. Используйте функцию push (), чтобы вставить элемент 32 в стек.
  18. Используйте функцию push (), чтобы вставить элемент 21 в стек.
  19. Используйте функцию push (), чтобы вставить элемент 39 в стек.
  20. Используйте функцию push (), чтобы вставить элемент 89 в стек.
  21. Используйте функцию push (), чтобы вставить элемент 25 в стек.
  22. Напечатайте текст на консоли.
  23. Вызовите функцию createStack, чтобы выполнить указанные выше операции вставки в стек.
  24. Напечатайте размер стопки на консоли рядом с другим текстом.
  25. Распечатайте элемент вверху стопки на консоли.
  26. Напечатайте текст на консоли.
  27. Удалите элемент наверху стека. Затем он вернет элементы, оставшиеся в стеке.
  28. Вызовите функцию createStack, чтобы выполнить указанные выше операции.
  29. Программа должна вернуть значение после успешного завершения.
  30. Конец тела функции main ().

emplace () и swap ()

Это другие встроенные функции стека:

  • emplace () - конструирует, а затем вставляет новый элемент в начало стека.
  • swap () - обменивает содержимое стека с содержимым другого стека.

Пример 3:

#include #include #include using namespace std;int main() {stack st1;stack st2;st1.emplace(12);st1.emplace(19);st2.emplace(20);st2.emplace(23);st1.swap(st2);cout << "st1 = ";while (!st1.empty()) {cout << st1.top() << " ";st1.pop();}cout << endl << "st2 = ";while (!st2.empty()) {cout << st2.top() << " ";st2.pop();}}

Выход:

Вот скриншот кода:

Пояснение к коду:

  1. Включите файл заголовка iostream в наш код, чтобы использовать его функции.
  2. Включите файл заголовка стека в наш код, чтобы использовать его функции.
  3. Включите файл заголовка cstdlib в наш код, чтобы использовать его функции.
  4. Включите пространство имен std в наш код, чтобы использовать его классы без его вызова.
  5. Вызовите функцию main (). Логика программы будет добавлена ​​в тело этой функции.
  6. Объявите стек с именем st1 для хранения целочисленных значений.
  7. Объявите стек с именем st2 для хранения целочисленных значений.
  8. Используйте функцию emplace (), чтобы вставить целое число 12 в стек с именем st1.
  9. Используйте функцию emplace (), чтобы вставить целое число 19 в стек с именем st1.
  10. Используйте функцию emplace (), чтобы вставить целое число 20 в стек с именем st2.
  11. Используйте функцию emplace (), чтобы вставить целое число 23 в стек с именем st2.
  12. Используйте функцию swap (), чтобы поменять местами содержимое двух стеков, st1 и st2. Содержимое стека st1 нужно переместить в стек st2. Содержимое стека st2 нужно переместить в стек st1.
  13. Напечатайте текст на консоли.
  14. Используйте оператор while и функцию empty (), чтобы проверить, не пуст ли стек st1.
  15. Вывести на консоль содержимое стека st1. Знак "" добавляет пространство между элементами стека при их печати на консоли.
  16. Выполните функцию pop () в стеке st1, чтобы удалить верхний элемент.
  17. Конец тела оператора while.
  18. Напечатайте текст на консоли. Endl - это ключевое слово C ++ для конечной строки. Он перемещает курсор мыши на следующую строку, чтобы начать печать оттуда.
  19. Используйте оператор while и функцию empty (), чтобы проверить, не пуст ли стек st2.
  20. Вывести на консоль содержимое стека st2. Знак "" добавляет пространство между элементами стека при их печати на консоли.
  21. Выполните функцию pop () в стеке st2, чтобы удалить верхний элемент.
  22. Конец тела оператора while.
  23. Конец тела функции main ().

Стек в STL

STL (Стандартная библиотека шаблонов) поставляется с классами шаблонов, которые предоставляют общие структуры данных C ++. Следовательно, стек также может быть реализован на STL. Мы просто включаем эту библиотеку в наш код и используем ее для определения стека.

stack st;

Приведенный выше синтаксис объявляет стек st для элементов типа данных T.

Пример 3:

#include #include #include using namespace std;int main() {stack st;st.push(12);st.push(19);st.push(20);cout << st.top();cout << st.size();}

Выход:

Вот скриншот кода:

Пояснение к коду:

  1. Включите файл заголовка iostream в наш код, чтобы использовать его функции.
  2. Включите файл заголовка стека в наш код, чтобы использовать его функции.
  3. Включите файл заголовка cstdlib в наш код, чтобы использовать его функции.
  4. Включите пространство имен std в наш код, чтобы использовать его классы без его вызова.
  5. Вызовите функцию main (). Логика программы должна быть добавлена ​​в тело этой функции.
  6. Объявите стек st для хранения целочисленных данных.
  7. Добавьте элемент 12 в стек.
  8. Добавьте элемент 19 в стек.
  9. Добавьте элемент 20 в стек.
  10. Распечатайте элемент вверху стопки на консоли.
  11. Вывести размер стопки на консоль.
  12. Конец тела функции main ().

Резюме:

  • Стек - это структура данных, которая работает на основе метода LIFO (Last In - First Out).
  • Std :: stack позволяет добавлять и удалять элементы только с одного конца.
  • Класс std :: stack - это адаптер-контейнер, содержащий элементы аналогичного типа данных.
  • Стек может быть создан из различных контейнеров последовательностей.
  • Если вы не предоставите контейнер, по умолчанию будет использоваться контейнер двухсторонней очереди.
  • Функция push () предназначена для вставки элементов в стек.
  • Функция pop () предназначена для удаления верхнего элемента из шага.
  • Функция empty () предназначена для проверки, пуст стек или нет.