Как очистить стек?

3 ноября 2014 г. Просмотров: 3550
Одним из типов структур данных, достаточно широко используемых сегодня в прикладном программировании, является стек. Его особенностью является принцип организации элементов, при котором их добавление и удаление возможно только по одному и только через «вершину», то есть по принципу LIFO. Но иногда бывает необходимо очистить сразу весь стек.

Вам понадобится

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

Инструкция

  • Используйте методы объектов стека, специально предназначенные для его очистки. Они присутствуют у большинства соответствующих классов различных библиотек и фреймворков. Например, у класса Stack платформы .NET имеется метод Clear. Пример его применения на языке C# может выглядеть так:Stack oStack = new Stack(); // создание объекта стекаoStack.Push("000"); // заполнение стекаoStack.Push("111" );oStack.Clear(); // очистка стека
  • Методы изменения количества элементов классов контейнеров, на которых зачастую строится функционал классов стеков, также можно применить для очистки. Нужно просто уменьшить текущее количество элементов до нуля. Так, шаблонный класс QStack библиотеки Qt наследуется от шаблонного класса QVector, который имеет метод resize. Пример его использования может быть таким:QStack oStack; // декларация объекта стекаfor(int i = 0; i < 10; i++) oStack.push(i); // заполнение стекаoStack.resize(0); // очистка стека
  • Очистку объекта стека обычно можно выполнить через оператор присваивания, который часто реализован у соответствующих классов. Для этого объекту очищаемого стека нужно присвоить временный объект, созданный конструктором по умолчанию. Например, шаблонный класс stack стандартной библиотеки C++, являющийся адаптером шаблонных классов контейнеров, не имеет методов произвольного изменения количества или удаления всех элементов. Очистить его можно так:std::stack oStack; // декларация объекта стекаfor(int i = 0; i < 10; i++) oStack.push(i); // заполнение стекаoStack = std::stack(); // очистка стека
  • Очистите объект стека путем вызова конструктора копирования при помощи оператора new c аргументом-объектом, созданным конструктором по умолчанию:std::stack oStack; // декларация объекта стекаfor(int i = 0; i < 10; i++) oStack.push(i); // заполнение стекаnew std::stack(oStack); // очистка стека
  • Стек можно очистить путем последовательного извлечения всех элементов при помощи соответствующих методов:std::stack oStack; // декларация объекта стекаfor(int i = 0; i < 10; i++) oStack.push(i); // заполнение стекаwhile(!oStack.empty()) oStack.pop();// очистка стекаОднако данный подход имеет временную сложность, линейно зависящую от количества элементов в стеке. Поэтому его использование не рационально.
  • Оцените статью!