Created
July 20, 2021 17:23
-
-
Save Thiago4532/327483961e4ae33d2333e4e90c62d271 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#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