logo

Стек у C++ STL

Стеки — це тип контейнерних адаптерів із типом роботи 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).

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

  1. Включіть файл заголовка iostream або в наш код, щоб використовувати його функції.
  2. Включіть файл заголовка стека в наш код, щоб використовувати його функції, якщо він уже включений, тоді файл заголовка стека не потрібен, оскільки він уже має вбудовану функцію.
  3. Включіть простір імен std у наш код, щоб використовувати його класи без його виклику.
  4. Виклик функції main(). Логіку програми слід додати в цю функцію.
  5. Створіть стек для зберігання цілих значень.
  6. Використовуйте функцію push(), щоб вставити значення 21 у стек.
  7. Використовуйте функцію push(), щоб вставити значення 22 у стек.
  8. Використовуйте функцію push(), щоб вставити значення 24 у стек.
  9. Використовуйте функцію push(), щоб вставити значення 25 у стек.
  10. Використовуйте цілочисельну змінну num, щоб ввести значення змінної. Тут його значення дорівнює 0, але ми можемо призначити будь-яке ціле значення за допомогою cin>> num.
  11. Використовуйте функцію push(), щоб вставити значення змінної num.
  12. Використовуйте функцію pop(), щоб видалити верхній елемент зі стеку, тобто 25. Тепер верхній елемент стає 24.
  13. Використовуйте функцію pop(), щоб видалити верхній елемент зі стеку, тобто 24. Тепер верхній елемент стає 22.
  14. Використовуйте цикл while і функцію empty(), щоб перевірити, чи стек НЕ порожній. ! є оператором NOT. Отже, коли стек не порожній, функція empty() поверне значення false, а оператор НЕ перетворить його на значення true, а цикл while продовжує працювати. Але коли стек стане порожнім, функція empty() поверне true, а оператор NOT зробить його false, і цикл завершиться.
  15. Друк поточного вмісту стека на консолі.
  16. Викличте функцію pop() у стеку.
  17. Кінець тіла циклу while.
  18. Кінець тіла функції 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