Стек у C ++ STL з прикладом

Зміст:

Anonim

Що таке std :: stack?

Стек - це структура даних, яка працює на основі техніки LIFO (Last In First Out). Стек std :: дозволяє додавати та видаляти елементи лише з одного кінця.

Клас std :: stack - це контейнерний адаптер. Об'єкти контейнера містять дані подібного типу даних. Ви можете створити стек з різних контейнерів послідовностей. Якщо контейнер не надається, за замовчуванням буде використовуватися незабруднена речовина. Контейнерні адаптери не підтримують ітератори, тому його не можна використовувати для обробки даних.

У цьому підручнику з C ++ ви дізнаєтесь

  • Що таке std :: stack?
  • Синтаксис стека
  • Типи членів
  • Операції в стеку
  • Впровадження стека
  • push () і pop ()
  • empty (), size (), top ()
  • emplace () і swap ()
  • Стек у STL

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

Щоб створити стек, ми повинні включити в наш код файл заголовка . Потім ми використовуємо цей синтаксис для визначення std :: stack:

template  > class stack;
  • Тип - це тип елемента, що міститься у стеці std ::. Це може бути будь-який допустимий тип 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. Використовуйте функцію loop і empty (), щоб перевірити, чи стек НЕ порожній. The! є оператором NOT.
  13. Друк поточного вмісту стека на консолі.
  14. Викличте функцію pop () у стеку.
  15. Кінець тіла циклу while.
  16. Кінець основного () елемента функції.

empty (), size (), top ()

У стеки є вбудовані функції, за допомогою яких ви можете пограти зі стеком та його значеннями. До них належать:

  • 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. Створити об'єкт стека вул.
  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. Кінець тіла основної () функції.

Стек у 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 :: дозволяє додавати та видаляти елементи лише з одного кінця.
  • Клас std :: stack - це контейнерний адаптер, що містить елементи подібного типу даних.
  • Стек можна створити з різних контейнерів послідовності.
  • Якщо ви не надасте контейнер, контейнер deque буде використовуватися за замовчуванням.
  • Функція push () призначена для вставки елементів у стек.
  • Функція pop () призначена для видалення верхнього елемента з кроку.
  • Функція empty () призначена для перевірки, чи є стек порожнім чи ні.