Що таке std :: stack?
Стек - це структура даних, яка працює на основі техніки LIFO (Last In First Out). Стек std :: дозволяє додавати та видаляти елементи лише з одного кінця.
Клас std :: stack - це контейнерний адаптер. Об'єкти контейнера містять дані подібного типу даних. Ви можете створити стек з різних контейнерів послідовностей. Якщо контейнер не надається, за замовчуванням буде використовуватися незабруднена речовина. Контейнерні адаптери не підтримують ітератори, тому його не можна використовувати для обробки даних.
У цьому підручнику з C ++ ви дізнаєтесь
- Що таке std :: stack?
- Синтаксис стека
- Типи членів
- Операції в стеку
- Впровадження стека
- push () і pop ()
- empty (), size (), top ()
- emplace () і swap ()
- Стек у STL
Синтаксис стека
Щоб створити стек, ми повинні включити в наш код файл заголовка
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();}}
Вихід:
Ось скріншот коду:
Пояснення коду:
- Включіть файл заголовка iostream у наш код, щоб використовувати його функції.
- Включіть файл заголовка стека в наш код, щоб використовувати його функції.
- Включіть у наш код простір імен std, щоб використовувати його класи, не викликаючи його.
- Виклик функції main (). У цій функції слід додати логіку програми.
- Створіть стек st для зберігання цілочисельних значень.
- Використовуйте функцію push (), щоб вставити значення 10 у стек.
- Використовуйте функцію push (), щоб вставити значення 20 у стек.
- Використовуйте функцію push (), щоб вставити значення 30 у стек.
- Використовуйте функцію push (), щоб вставити значення 40 у стек.
- За допомогою функції pop () видаліть верхній елемент зі стека, тобто 40. Верхній елемент тепер стає 30.
- За допомогою функції pop () видаліть верхній елемент зі стека, тобто 30. Верхній елемент тепер стає 20.
- Використовуйте функцію loop і empty (), щоб перевірити, чи стек НЕ порожній. The! є оператором NOT.
- Друк поточного вмісту стека на консолі.
- Викличте функцію pop () у стеку.
- Кінець тіла циклу while.
- Кінець основного () елемента функції.
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;}
Вихід:
Ось скріншот коду:
Пояснення коду:
- Включіть файл заголовка iostream у наш код, щоб використовувати його функції.
- Включіть файл заголовка стека в наш код, щоб використовувати його функції.
- Включіть у нашу програму простір імен std, щоб використовувати її класи, не викликаючи її.
- Створіть функцію createStack, яку ми можемо використовувати для створення стека mystack. У стеку буде набір цілих чисел.
- Початок тіла функції createStack.
- Створіть екземпляр типу даних mystack і надавши йому ім'я ms.
- Використовуйте цикл while та функцію empty (), щоб перевірити, чи порожній стек.
- Початок тіла циклу while.
- Використовуйте функцію top (), що зберігається у верхній частині стека. Символ \ t створить нову вкладку.
- За допомогою функції pop () видаліть елемент у верхній частині стека.
- Кінець тіла циклу while.
- Роздрукуйте пустий рядок на консолі.
- Кінець тіла функції createStack.
- Виклик функції main (). Логіку програми слід додати в тілі функції main ().
- Початок тіла функції main ().
- Створити об'єкт стека вул.
- Використовуйте функцію push (), щоб вставити елемент 32 у стек.
- Використовуйте функцію push (), щоб вставити елемент 21 у стек.
- Використовуйте функцію push (), щоб вставити елемент 39 у стек.
- Використовуйте функцію push (), щоб вставити елемент 89 у стек.
- Використовуйте функцію push (), щоб вставити елемент 25 у стек.
- Роздрукуйте текст на консолі.
- Викличте функцію createStack, щоб виконати вищезазначені операції вставки в стек.
- Надрукуйте розмір стека на консолі поряд з іншим текстом.
- Надрукуйте елемент у верхній частині стека на консолі.
- Роздрукуйте текст на консолі.
- Видаліть елемент у верхній частині стека. Потім він поверне елементи, що залишилися в стеку.
- Викличте функцію createStack для виконання вищевказаних операцій.
- Після успішного завершення програма повинна повертати значення.
- Кінець тіла функції 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();}}
Вихід:
Ось скріншот коду:
Пояснення коду:
- Включіть файл заголовка iostream у наш код, щоб використовувати його функції.
- Включіть файл заголовка стека в наш код, щоб використовувати його функції.
- Включіть файл заголовка cstdlib у наш код, щоб використовувати його функції.
- Включіть у наш код простір імен std, щоб використовувати його класи, не викликаючи його.
- Виклик функції main (). Логіка програми буде додана до тіла цієї функції.
- Оголосіть стек з іменем st1 для зберігання цілочисельних значень.
- Оголосіть стек з іменем st2 для зберігання цілочисельних значень.
- Використовуйте функцію emplace (), щоб вставити ціле число 12 у стек з іменем st1.
- Використовуйте функцію emplace (), щоб вставити ціле число 19 у стек з іменем st1.
- Використовуйте функцію emplace (), щоб вставити ціле число 20 у стек з іменем st2.
- Використовуйте функцію emplace (), щоб вставити ціле число 23 у стек з іменем st2.
- Використовуйте функцію swap (), щоб поміняти місцями вміст двох стеків, st1 та st2. Вміст стека st1 слід перемістити в стек st2. Вміст стека st2 слід перемістити в стек st1.
- Роздрукуйте текст на консолі.
- За допомогою оператора while та функції empty () перевірте, чи не є порожнім стек st1.
- Роздрукуйте вміст стека st1 на консолі. "" Додає простір між елементами стека під час їх друку на консолі.
- Виконайте функцію pop () у стеку st1, щоб видалити верхній елемент.
- Кінець тіла оператора while.
- Роздрукуйте текст на консолі. Endl - це ключове слово C ++ для кінцевого рядка. Він переміщує курсор миші до наступного рядка, щоб розпочати друк звідти.
- За допомогою оператора while та функції empty () перевірте, чи не порожній стек st2.
- Роздрукуйте вміст стека st2 на консолі. "" Додає простір між елементами стека під час їх друку на консолі.
- Виконайте функцію pop () у стеку st2, щоб видалити верхній елемент.
- Кінець тіла оператора while.
- Кінець тіла основної () функції.
Стек у STL
STL (стандартна бібліотека шаблонів) постачається з класами шаблонів, що забезпечують загальні структури даних C ++. Отже, стек також може бути реалізований в STL. Ми просто включаємо цю бібліотеку в наш код і використовуємо її для визначення стека.
stackst;
Вищезазначений синтаксис оголошує стек 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();}
Вихід:
Ось скріншот коду:
Пояснення коду:
- Включіть файл заголовка iostream у наш код, щоб використовувати його функції.
- Включіть файл заголовка стека в наш код, щоб використовувати його функції.
- Включіть файл заголовка cstdlib у наш код, щоб використовувати його функції.
- Включіть у наш код простір імен std, щоб використовувати його класи, не викликаючи його.
- Виклик функції main (). Логіку програми слід додати в тілі цієї функції.
- Оголосіть стек st для зберігання цілочисельних даних.
- Додайте елемент 12 в стек.
- Додайте елемент 19 в стек.
- Додайте елемент 20 в стек.
- Надрукуйте елемент у верхній частині стека на консолі.
- Роздрукуйте розмір стека на консолі.
- Кінець тіла функції main ().
Короткий зміст:
- Стек - це структура даних, яка працює на основі техніки LIFO (Last In First Out).
- Стек std :: дозволяє додавати та видаляти елементи лише з одного кінця.
- Клас std :: stack - це контейнерний адаптер, що містить елементи подібного типу даних.
- Стек можна створити з різних контейнерів послідовності.
- Якщо ви не надасте контейнер, контейнер deque буде використовуватися за замовчуванням.
- Функція push () призначена для вставки елементів у стек.
- Функція pop () призначена для видалення верхнього елемента з кроку.
- Функція empty () призначена для перевірки, чи є стек порожнім чи ні.