Стек

Пошаговый разбор стека C++, построенного из узлов.

Всё моделируется в этом браузере; ничего не отправляется на сервер.

Значения

Создаём новый узел

Создаём новый узел

n_ = 0

Стек пуст

  • Только что добавлен
  • Выходит сейчас

Шаг 1 / 47

Код

#include <iostream>
using namespace std;
class Nodo { // Узел хранит данные и указатель на следующий
private: // Приватные атрибуты: к ним обращаются только методы
int dato;
Nodo* siguiente;
public:
Nodo(int d) : dato(d), siguiente(nullptr) {}
int getDato() const { return dato; }
Nodo* getSiguiente() const { return siguiente; }
void setDato(int d) { dato = d; }
void setSiguiente(Nodo* s) { siguiente = s; }
};
class Pila {
private: // Последний добавленный узел — вершина
Nodo* cima_; // Узел вершины
int n_; // Количество узлов
public:
Pila() : cima_(nullptr), n_(0) {}
// Destructor (no se anima)
~Pila() {
while (cima_ != nullptr) desapilar();
}
void apilar(int valor) { // Добавление на вершину: O(1)
Nodo* nuevo = new Nodo(valor); // Создать узел
nuevo->setSiguiente(cima_); // Новый узел указывает на прежнюю вершину
cima_ = nuevo; // cima_ теперь указывает на новый узел
n_++;
}
void desapilar() { // Извлечение вершины: O(1)
if (cima_ == nullptr) return; // Стек пуст: удалять нечего
Nodo* temp = cima_; // Сохранить вершину, чтобы освободить её
cima_ = cima_->getSiguiente(); // cima_ опускается к следующему узлу
delete temp; // Освободить память
n_--;
}
// Muestra la pila de la cima a la base
void imprimir() const {
cout << "cima ->";
for (Nodo* p = cima_; p != nullptr; p = p->getSiguiente())
cout << " " << p->getDato();
cout << endl;
}
};
int main() {
Pila pila;
pila.apilar(3);
pila.apilar(6);
pila.apilar(9);
pila.imprimir(); // cima -> 9 6 3
pila.desapilar();
pila.imprimir(); // cima -> 6 3
pila.apilar(1);
pila.imprimir(); // cima -> 1 6 3
return 0;
}

Этот визуализатор стека показывает, как работает структура LIFO, где последний добавленный элемент извлекается первым. Стек строится из узлов C++ и указателя cima_, который указывает на верхний узел. Можно создать случайную последовательность или добавить собственные операции push и pop, всего до 12. При воспроизведении вы видите, как создаётся узел, связывается со старой вершиной, перемещается cima_ и освобождается память, а соответствующая строка кода подсвечивается. Извлечение из пустого стека явно отмечается. Всё работает в вашем браузере, и ничего никуда не отправляется. Это отличный способ наглядно понять работу вершины стека.

Как пользоваться

  1. Выберите размер и нажмите Shuffle, чтобы создать случайную последовательность операций, или начните с пустого списка.
  2. Выберите Push или Pop, введите значение для push и нажмите Add, чтобы добавить операцию.
  3. Нажмите Play или двигайтесь кнопками предыдущего и следующего шага.
  4. Следите за счётчиком n_, указателем cima_ и блоком, помеченным как только что добавленный или уходящий.

Часто задаваемые вопросы

Что означает LIFO?
Last In, First Out: последний добавленный элемент выходит первым, поэтому вы всегда работаете только с вершиной стека.
Какие операции доступны?
Push для добавления значения и Pop для удаления вершины. Отдельной операции peek нет.
Что будет, если извлечь из пустого стека?
Ничего не удаляется: анимация проверяет, что стек не пуст, и сообщает, что удалять нечего.
Показывается ли код?
Да, в изменяемой по размеру панели C++, которая подсвечивает строку для каждого шага.

Похожие инструменты