// tad pilha.h
typedef int TipoChave;
typedef struct {
TipoChave Chave;
}TipoItem;
typedef struct TipoCelula * TipoApontador;
typedef struct TipoCelula{
TipoItem Item;
TipoApontador Prox;
}TipoCelula;
typedef struct {
int Tamanho;
TipoApontador Topo, Fundo;
}TipoPilha;
// criar uma nova pilha vazia
void FPVazia(TipoPilha * Pilha);
// verifica se a pilha está vazia
int VaziaPilha(TipoPilha Pilha);
// empilha um novo elemento na pilha
void Empilha(TipoItem x, TipoPilha* Pilha);
// desempilha um elemento da pilha
void Desempilha(TipoItem* x, TipoPilha* Pilha);
// informa o tamanho da pilha
int TamanhoPilha(TipoPilha Pilha);
// imprime os valores da pilha
void ImprimirPilha(TipoPilha Pilha);
// informa o elemento que está no topo da pilha
TipoItem TopoPilha(TipoPilha Pilha);
void FPVazia(TipoPilha * Pilha){
// criar a celula topo, cabeca
Pilha->Topo = (TipoApontador)
malloc(sizeof(TipoCelula));
// faz o fundo apontar para o mesmo lugar do topo
Pilha->Fundo = Pilha->Topo;
// inicializa o tamanho para zero
Pilha->Tamanho = 0;
}
int TamanhoPilha(TipoPilha Pilha){
return Pilha.Tamanho;
}
int VaziaPilha(TipoPilha Pilha){
return Pilha.Topo == Pilha.Fundo;
}
void Empilha(TipoItem x, TipoPilha* Pilha){
TipoApontador aux;
aux = (TipoApontador) malloc(sizeof(TipoCelula));
Pilha->Topo->Item = x;
aux->Prox = Pilha->Topo;
Pilha->Topo = aux;
Pilha->Tamanho++;
}
void Desempilha(TipoItem *x, TipoPilha* Pilha){
TipoApontador q;
if (VaziaPilha(*Pilha)){
printf("ERRO: Pilha vazia!\n");
return;
}
q = Pilha->Topo;
Pilha->Topo = q->Prox;
*x = q->Prox->Item;
free(q); // libera a celula removida da memoria
}
void ImprimirPilha(TipoPilha Pilha)
{
TipoApontador aux;
TipoItem item;
printf("Tamanho: %d\n", Pilha.Tamanho);
aux = Pilha.Topo;
printf("TOPO: \n");
while (aux->Prox != NULL){
printf("%d\n", aux->Prox->Item);
aux = aux->Prox;
}
printf("FUNDO: \n");
}
Arquivo .c
#include <stdio.h>
#include <stdlib.h>
#include "tad-pilha.h"
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int main(int argc, char *argv[]) {
TipoPilha Pilha;
TipoItem item;
TipoItem a[] = {2, 5, 6, 1, 6, 3, 7};
int tam = 7, i;
FPVazia(&Pilha); // inicializando a pilha
ImprimirPilha(Pilha);
for (i = 0; i < tam; i++){ // empilhamento
item = a[i];
Empilha(item, &Pilha);
ImprimirPilha(Pilha);
}
for (i = 0; i < tam; i++){ // desempilhamento
Desempilha(&item, &Pilha);
printf("Desempilhando: %d\n", item);
ImprimirPilha(Pilha);
}
return 0;
}
Nenhum comentário:
Postar um comentário