Académique Documents
Professionnel Documents
Culture Documents
Pilha
Pilha
Uma das estruturas de dados mais utilizadas a pilha
A insero/acesso/remoo de elementos sempre feita
pelo topo da pilha.
O primeiro que sai o ltimo que entrou ( Last in, first out)
As operaes bsicas so:
Empilha (push)
Desempilhar (pop)
...
topo
4
topo topo
2 2 2
pilha vazia push(2) push(4) pop
retorna-se 4
Tipo Abstrato de Dado
Pilha
Podemos criar um TAD Pilha de Inteiros. Para tanto, devemos
criar o arquivo pilha.h com o nome do tipo e os prottipos.
v[N-1]
...
v[1]
v[0]
Implementao de Pilha
com Vetor
A estrutura que representa o tipo pilha deve
ser composto pelo vetor e pelo nmero de
elementos armazenados
#define MAX 3 Pilha p1; p1.n=0;
p1.v[0] = 2; p1.n++;
typedef struct pilha{ p1.v[1] = 4; p1.n++;
int n; p1.v[2] = 3; p1.n++;
int v[MAX]; p1.n--;
}Pilha;
+ = 4
4
2 v 2 v
p 1 n p 2 n
Implementao de Pilha com Vetor
Funo Imprime e Libera
/*Funo que imprime os elementos de uma pilha.*/
void pilha_imprime(Pilha *p){
int i;
for(i = p->n-1; i>=0;i--){
printf("%f\n",p->v[i]);
}
} 4
4 i -1 = 2
2 v
p 2 n
2
4 + p = 2
p
Implementao de Pilha
com Lista Funo Vazia e Pop
/*Testa se uma pilha vazia.*/
int pilha_vazia(Pilha *p){
return p->prim==NULL;
}
/*Funo que remove um elemento do topo de uma pilha.*/
int pilha_pop(Pilha *p){
int a;
Lista *l;
if(pilha_vazia(p)){
printf("Pilha Vazia!!!\n");
exit(1);
}
l = p->prim; l 4 = 4
a = l->info;
p->prim = l->prox; a 4 2
free(l); p
return a;
}
Implementao de Pilha com Lista
Funo Imprime
/*Funo que imprime os elementos de uma pilha.*/
void pilha_imprime(Pilha *p){
Lista *lAux = p->prim;
while(lAux!=NULL){
printf("%f\n",lAux->info);
lAux = lAux->prox;
}
}
lAux 4 4
2
2
p
Implementao de Pilha com Lista
Funo Imprime
/*Libera o espao alocado para uma pilha.*/
void pilha_libera(Pilha *p){
Lista* l = p->prim;
Lista* lAux;
while(l!=NULL){
lAux = l->prox;
free(l);
l = lAux;
}
l 4
free(p);
}
lAux 2
p