Pilha dinâmica
🔋 Declarando a pilha
#include<stdio.h>
#include<stdlib.h>
typedef struct{
int chave;
} REGISTRO;
typedef struct item{
REGISTRO r;
struct item *ant;
} ITEM;
typedef struct{
ITEM *topo;
int tam;
} PILHA;
*️⃣ Funções de manipulação da pilha
Inicializar a pilha
void inicializarPilha(PILHA *p){
p->topo = NULL;
p->tam = 0;
}
A variável topo
recebe o valor NULL
por ser tratar de um ponteiro. Já a variável tam
recebe o valor 0
.
Inserir (ou empilhar)
ITEM* criarItem(REGISTRO r){
ITEM* novo = (ITEM*) malloc(sizeof(ITEM));
if(novo){
novo->r = r;
novo->ant = NULL;
return novo;
}
return NULL;
}
void empilhar(PILHA *p, REGISTRO r){
ITEM* novo = criarItem(r);
novo->ant = p->topo;
p->topo = novo;
}
Remover (ou desempilhar)
void desempilhar(PILHA *p){
if(p->topo){
ITEM* deletar = p->topo;
p->topo = p->topo->ant;
p->tam--;
free(deletar);
}
}
Imprimir
void imprimir(PILHA *p){
ITEM* pos = p->topo;
while(pos){
printf("%d\n", pos->r.chave);
pos = pos->ant;
}
}
🧑🏻💻 Testando a pilha
int main(void){
PILHA p;
inicializarPilha(&p);
empilhar(&p, (REGISTRO){10});
empilhar(&p, (REGISTRO){20});
empilhar(&p, (REGISTRO){30});
empilhar(&p, (REGISTRO){40});
desempilhar(&p);
empilhar(&p, (REGISTRO){50});
imprimir(&p);
}