Skip to content

Instantly share code, notes, and snippets.

@Thiago4532
Created July 20, 2021 17:23
Show Gist options
  • Save Thiago4532/327483961e4ae33d2333e4e90c62d271 to your computer and use it in GitHub Desktop.
Save Thiago4532/327483961e4ae33d2333e4e90c62d271 to your computer and use it in GitHub Desktop.
#include <bits/stdc++.h>
using namespace std;
// Cria uma estrutura que guarda um nó da pilha.
struct node {
int val; // O valor que está guardado no nó.
node *filho; // Um ponteiro pro próximo elemento da pilha.
};
node *T; // Declaramos a nossa pilha
void push(int x) {
// Cria um novo nó da pilha usando o new
node *n = new node;
// Usamos o asterisco para alterar o nó que o ponteiro n está apontando.
(*n).val = x; // Faz o valor do nó receber x
// Como inserimos um novo elemento, ele agora deve ser o topo da pilha,
// então o antigo topo deve ser filho do novo elemento.
(*n).filho = T; // Aponta o próximo nó da pilha para o endereço do antigo topo.
// Agora o novo topo vira o n
T = n;
}
void pop() {
if (T == NULL)
return; // Se a pilha já estiver fazia não existe elemento para remover;
node *n = (*T).filho; // O novo topo vira o filho do T
// Deletamos o topo atual para evitar lixo de memória
delete T;
// Agora o novo topo vira o n
T = n;
}
int top() {
if (T == NULL)
return -1; // Se não tiver elemento na pilha iremos retornar -1.
return (*T).val;
}
int main() {
// NULL é um valor especial do ponteiro, que é basicamente uma posição na
// memória que não representa nenhum valor.
T = NULL; // Iremos apontar o ponteiro para "nada" inicialmente.
push(1); // Agora o topo é o valor 1
push(2); // Agora o topo é o valor 2
push(3); // Agora o topo é o valor 3
push(4); // Agora o topo é o valor 4
push(5); // Agora o topo é o valor 5
cout << top() << '\n'; // 5
pop(); // Agora o topo é o valor 4
pop(); // Agora o topo é o valor 3
cout << top() << '\n'; // 3
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment