Pilha

Acompanhe passo a passo uma pilha em C++ construída com nós.

Tudo é simulado neste navegador; nada é enviado a nenhum servidor.

Valores

Criar o novo nó

Criar o novo nó

n_ = 0

A pilha está vazia

  • Recém-adicionado
  • Saindo agora

Passo 1 / 47

Código

#include <iostream>
using namespace std;
class Nodo { // Um nó guarda o dado e um ponteiro para o próximo
private: // Atributos privados: só os métodos acessam
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: // O último nó empilhado é o topo
Nodo* cima_; // Nó do topo
int n_; // Número de nós
public:
Pila() : cima_(nullptr), n_(0) {}
// Destructor (no se anima)
~Pila() {
while (cima_ != nullptr) desapilar();
}
void apilar(int valor) { // Empilhar no topo: O(1)
Nodo* nuevo = new Nodo(valor); // Criar o nó
nuevo->setSiguiente(cima_); // O novo nó aponta para o antigo topo
cima_ = nuevo; // cima_ agora aponta para o novo nó
n_++;
}
void desapilar() { // Desempilhar o topo: O(1)
if (cima_ == nullptr) return; // Pilha vazia: nada a remover
Nodo* temp = cima_; // Guardar o topo para poder liberá-lo
cima_ = cima_->getSiguiente(); // cima_ desce para o próximo nó
delete temp; // Liberar a memória
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;
}

Este visualizador de pilha mostra como funciona uma estrutura LIFO, em que o último elemento inserido é o primeiro a sair. A pilha é construída com nós em C++ e um ponteiro chamado cima_ que aponta para o nó do topo. Você pode gerar uma sequência aleatória ou adicionar suas próprias operações de push e pop, até 12 no total. Ao reproduzi-las, você vê o nó sendo criado, ligado ao antigo topo, o cima_ se movendo e a memória sendo liberada, enquanto a linha de código correspondente fica destacada. Fazer pop em uma pilha vazia é sinalizado com clareza. Tudo roda no navegador e nada é enviado a lugar nenhum.

Como usar

  1. Escolha o tamanho e pressione Embaralhar para gerar uma sequência aleatória de operações, ou comece com uma lista vazia.
  2. Selecione Push ou Pop, digite o valor ao fazer push e pressione Adicionar para incluir a operação.
  3. Pressione Reproduzir ou use os botões de passo anterior e seguinte.
  4. Observe o contador n_, o ponteiro cima_ e a caixa marcada como recém-adicionada ou saindo.

Perguntas frequentes

O que significa LIFO?
Last In, First Out: o elemento inserido mais recentemente é o primeiro a sair, então você só trabalha com o topo da pilha.
Quais operações ele tem?
Push para adicionar um valor e Pop para remover o topo. Não há uma operação peek separada.
O que acontece se eu fizer pop em uma pilha vazia?
Nada é removido: a animação verifica que a pilha não está vazia e informa que não há nada para remover.
O código é exibido?
Sim, em um painel C++ redimensionável que destaca a linha de cada passo.

Ferramentas relacionadas