Как да изчистите стека

Съдържание:

Как да изчистите стека
Как да изчистите стека

Видео: Как да изчистите стека

Видео: Как да изчистите стека
Видео: Стек как структура данных. Полное понимание! Динамические структуры данных #4 2024, Ноември
Anonim

Един от видовете структури от данни, които са широко използвани днес в приложното програмиране, е стека. Нейната особеност е принципът на организиране на елементи, при който тяхното добавяне и премахване е възможно само един по един и само чрез „върха“, тоест съгласно принципа LIFO. Но понякога е необходимо да изчистите целия стек наведнъж.

Как да изчистите стека
Как да изчистите стека

Необходимо

  • - текстов редактор или IDE;
  • - преводач от използвания език за програмиране.

Инструкции

Етап 1

Използвайте методи за обектите на стека, които са специално създадени за почистване на стека. Те присъстват в повечето от съответните класове на различни библиотеки и рамки. Например класът. NET Stack има метод Clear. Пример за приложението му в C # може да изглежда така:

Стек oStack = нов стек (); // създаване на обект на стека

oStack. Push ("000"); // запълване на стека

oStack. Push ("111");

oStack. Clear (); // изчистване на стека

Стъпка 2

За почистване могат да се използват и методи за промяна на броя на елементите на класовете контейнери, върху които често се изгражда функционалността на класовете стекове. Просто трябва да намалите текущия брой елементи до нула. Например класът на Qt шаблон QStack наследява от класа на шаблона QVector, който има метод за преоразмеряване. Пример за използването му може да бъде следният:

QStack oStack; // декларация на обекта на стека

за (int i = 0; i <10; i ++) oStack.push (i); // запълване на стека

oStack.resize (0); // изчистване на стека

Стъпка 3

Почистването на обект на стека обикновено може да се извърши чрез оператора за присвояване, който често се реализира в съответните класове. За да направите това, обектът на стека, който трябва да бъде изчистен, трябва да получи временен обект, създаден от конструктора по подразбиране. Например шаблонният клас на стека на стандартната библиотека C ++, който е адаптер за шаблонирани класове на контейнери, няма методи за произволна промяна на броя или премахване на всички елементи. Можете да го изчистите по следния начин:

std:: stack <int, std:: list> oStack; // декларация на обекта на стека

за (int i = 0; i <10; i ++) oStack.push (i); // запълване на стека

oStack = std:: stack(); // изчистване на стек

Стъпка 4

Изчистете обекта на стека, като извикате конструктора за копиране, използвайки новия оператор с аргумент на обект, създаден от конструктора по подразбиране:

std:: stack <int, std:: list> oStack; // декларация на обекта на стека

за (int i = 0; i <10; i ++) oStack.push (i); // запълване на стека

нов std:: стек(oStack); // изчистване на стек

Стъпка 5

Стекът може да бъде изчистен чрез последователно извличане на всички елементи с помощта на подходящите методи:

std:: stack <int, std:: list> oStack; // декларация на обекта на стека

за (int i = 0; i <10; i ++) oStack.push (i); // запълване на стека

while (! oStack.empty ()) oStack.pop (); // изчистване на стека

Този подход обаче има сложност във времето, която линейно зависи от броя на елементите в стека. Следователно използването му не е рационално.

Препоръчано: