Programaçao em C / pilha
#include "stdio.h"
#include "conio.h"
#include "stdlib.h"
#include "string.h"
struct Tipo_Item { // cada item da 'pilha' corresponde a um registro utilizado por (nome) char nome[20];
};
typedef struct Celula *ponteiro; // define tipo 'Ponteiro' como sendo endereço 'Celula' struct Celula { Tipo_Item Item; ponteiro prox; };
struct Tipo_Pilha { ponteiro Topo;
};
void FazPilhaVazia(Tipo_Pilha *Pilha); int PilhaVazia(Tipo_Pilha *Pilha); void Empilha(Tipo_Item x, Tipo_Pilha *Pilha); int Desempilha(Tipo_Pilha *Pilha, Tipo_Item *x); // conjunto aplicados sobre modelo 'Tipo_Pilha' void ImprimePilha(Tipo_Pilha *Pilha);
// Este item faz com que a 'pilha' fique fazia int main() { Tipo_Item x; Tipo_Pilha Pilha; FazPilhaVazia(&Pilha); while (1) { ImprimePilha(&Pilha); printf("\nDigite o nome do item para ser empilhado:\n"); gets(x.nome); if (strcmp(x.nome) == 0) break; Empilha(x, &Pilha); }
}
void FazPilhaVazia(Tipo_Pilha *Pilha) { // a 'pilha' fica vazia portando criando uma celula cabeça Pilha->Topo = (ponteiro) malloc(sizeof(Celula)); Pilha->Topo->prox = NULL;
}
int PilhaVazia(Tipo_Pilha *Pilha) { // se a 'pilha' estiver vazia retorna 1 (true); senão retorna 0 (false) return(Pilha->Topo->prox == NULL);
}
void Empilha(Tipo_Item x, Tipo_Pilha *Pilha) { ponteiro p; p = (ponteiro) malloc(sizeof(Celula)); /* Coloca 'x' na antiga celula cabeça; cria nova célula cabeça. */ Pilha->Topo->Item = x; p->prox = Pilha->Topo; Pilha->Topo = p; // atualiza o topo da pilha
}
int Desempilha(Tipo_Pilha *Pilha, Tipo_Item *x) { if (PilhaVazia(Pilha)) return(0); /* Erro: Pilha vazia. */ else { ponteiro p; p = Pilha->Topo; Pilha->Topo = Pilha->Topo->prox; *x = Pilha->Topo->Item; // item retornado free(p); return(1); // Item retirado