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

Съдържание:

Anonim

Какво е std :: stack?

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

Класът std :: stack е адаптер за контейнер. Обектите на контейнера съдържат данни от подобен тип данни. Можете да създадете стек от различни контейнери за последователност. Ако не е предоставен контейнер, по подразбиране ще се използва необработеният контейнер. Контейнерните адаптери не поддържат итератори, така че не могат да се използват за манипулиране на данни.

В този урок за C ++ ще научите

  • Какво е std :: stack?
  • Синтаксис на стека
  • Типове членове
  • Операции в стека
  • Внедряване на стека
  • push () и pop ()
  • празен (), размер (), отгоре ()
  • 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 stack за съхраняване на целочислени стойности.
  6. Използвайте функцията push (), за да вмъкнете стойността 10 в стека.
  7. Използвайте функцията push (), за да вмъкнете стойността 20 в стека.
  8. Използвайте функцията push (), за да вмъкнете стойността 30 в стека.
  9. Използвайте функцията push (), за да вмъкнете стойността 40 в стека.
  10. Използвайте функцията pop (), за да премахнете горния елемент от стека, т.е. 40. Най-горният елемент вече става 30.
  11. Използвайте функцията pop (), за да премахнете горния елемент от стека, тоест 30. Най-горният елемент сега става 20.
  12. Използвайте функция while и empty (), за да проверите дали стекът НЕ е празен. The! е операторът NOT.
  13. Отпечатване на текущото съдържание на стека на конзолата.
  14. Извикайте функцията pop () на стека.
  15. Край на тялото на цикъла while.
  16. Край на тялото на основната () функция.

празен (), размер (), отгоре ()

Стековете имат вградени функции, които можете да използвате, за да играете със стека и неговите стойности. Те включват:

  • 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. Край на тялото на основната () функция.

Стек в 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 () е за проверка дали стекът е празен или не.