Стеки — це тип контейнерних адаптерів із типом роботи LIFO (останній прийшов — першим вийшов), де новий елемент додається на одному кінці (вгорі), а елемент видаляється лише з цього кінця. Стек використовує інкапсульований об’єкт будь-якого вектор або deque (за замовчуванням) або список (послідовний контейнерний клас) як базовий контейнер, надаючи певний набір функцій-членів для доступу до його елементів.
np.argmax
Якщо є плутанина в запам’ятовуванні основної різниці між стеком і чергою, то просто знайдіть приклад із реального життя для цієї диференціації. Для стосу, стосу книг ми можемо легко взяти верхню книгу, а для черги пам’ятайте, коли вам потрібно стояти в черзі попереду банкомату для зняття готівки, тоді перша людина, яка знаходиться поблизу банкомату, матиме першу можливість зняти гроші з банкомату. Отже, черга працює за типом FIFO (першим прийшов, першим вийшов).
Синтаксис стека: -
Щоб створити стек, ми повинні включити файл заголовка в наш код. Потім ми використовуємо цей синтаксис для визначення std::stack:
| шаблон |
Тип – тип елемента, що міститься в std::stack. Це може бути будь-який дійсний тип C++ або навіть тип, визначений користувачем.
Контейнер – тип базового об’єкта контейнера.
Типи учасників: -
value_type - перший параметр шаблону, T. Він позначає типи елементів.
container_type - другий параметр шаблону, Container. Він позначає базовий тип контейнера.
size_type - беззнаковий інтегральний тип.
Функції, пов’язані зі стеком:
empty() – Повертає, чи стек порожній – Часова складність: O(1)
size() – Повертає розмір стеку – Часова складність: O(1)
top() – Повертає посилання на самий верхній елемент стека – Часова складність: O(1)
push(g) – Додає елемент «g» у верхній частині стека – Часова складність: O(1)
pop() – видаляє останній введений елемент стека – часова складність: O(1)
C++
рівність об’єктів Java
#include> #include> using> namespace> std;> int> main() {> >stack<>int>>стек;> >stack.push(21);>// The values pushed in the stack should be of the same data which is written during declaration of stack> >stack.push(22);> >stack.push(24);> >stack.push(25);> >int> num=0;> >stack.push(num);> >stack.pop();> >stack.pop();> >stack.pop();> > >while> (!stack.empty()) {> >cout << stack.top() <<>' '>;> >stack.pop();> >}> }> |
>
>Вихід
22 21>
Часова складність: Часова складність цієї програми дорівнює O(N), де N – загальна кількість елементів у стеку. Цикл while повторюється N разів, витягуючи елементи зі стеку та друкуючи їх.
Складність простору: Просторова складність цієї програми дорівнює O(N), де N – загальна кількість елементів у стеку. Структура стекових даних використовує простір, пропорційний кількості збережених у ній елементів. У цьому випадку максимальний розмір стека дорівнює 5, тому складність простору постійна і також може розглядатися як O(1).
Пояснення коду:
- Включіть файл заголовка iostream або в наш код, щоб використовувати його функції.
- Включіть файл заголовка стека в наш код, щоб використовувати його функції, якщо він уже включений, тоді файл заголовка стека не потрібен, оскільки він уже має вбудовану функцію.
- Включіть простір імен std у наш код, щоб використовувати його класи без його виклику.
- Виклик функції main(). Логіку програми слід додати в цю функцію.
- Створіть стек для зберігання цілих значень.
- Використовуйте функцію push(), щоб вставити значення 21 у стек.
- Використовуйте функцію push(), щоб вставити значення 22 у стек.
- Використовуйте функцію push(), щоб вставити значення 24 у стек.
- Використовуйте функцію push(), щоб вставити значення 25 у стек.
- Використовуйте цілочисельну змінну num, щоб ввести значення змінної. Тут його значення дорівнює 0, але ми можемо призначити будь-яке ціле значення за допомогою cin>> num.
- Використовуйте функцію push(), щоб вставити значення змінної num.
- Використовуйте функцію pop(), щоб видалити верхній елемент зі стеку, тобто 25. Тепер верхній елемент стає 24.
- Використовуйте функцію pop(), щоб видалити верхній елемент зі стеку, тобто 24. Тепер верхній елемент стає 22.
- Використовуйте цикл while і функцію empty(), щоб перевірити, чи стек НЕ порожній. ! є оператором NOT. Отже, коли стек не порожній, функція empty() поверне значення false, а оператор НЕ перетворить його на значення true, а цикл while продовжує працювати. Але коли стек стане порожнім, функція empty() поверне true, а оператор NOT зробить його false, і цикл завершиться.
- Друк поточного вмісту стека на консолі.
- Викличте функцію pop() у стеку.
- Кінець тіла циклу while.
- Кінець тіла функції main().
Список функцій Stack:
- stack::top() у C++ STL
- stack::empty() і stack::size() у C++ STL
- stack::push() і stack::pop() у C++ STL
- stack::swap() у C++ STL
- stack::emplace() у C++ STL
- Останні статті про C++ Stack