Estruturas de dados_Pilha_Continuacao_97_2003

Propaganda
Programação II
Estruturas de Dados
[email protected]
Désiré NGuessan
Pilha:
Implementação de pilha com Lista
encadeada (alocação dinâmica)
...
O endereço de uma lista encadeada é o endereço
da seu primeiro nó
Désiré NGuessan
Pilha: Implementação
Continuação
• A lista ligada ou encadeada é uma seqüência de
nós ou células onde:
• Cada nó contem:
– dado de algum tipo
– Endereço do nó seguinte
Désiré NGuessan
Pilha: Implementação
Continuação
conteúdo
próximo
• Se P é o endereço de um nó, então:
» P->conteudo é o conteúdo do nó
» P->prox é o endereço do próximo nó
Désiré NGuessan
Pilha: Implementação
– Implementação de pilha com Vetor
• Definição das operações
Pilha* pilha_cria(void);
void pilha_push(Pilha* p , float v);
float pilha_pop(Pilha* p);
int pilha_Vazia(Pilha* p);
void pilha_libera(Pilha* p);
Désiré NGuessan
Pilha: Implementação
Continuação
– Implementação de pilha com Lista
encadeada (alocação dinâmica)
• Definição da Estrutura de Dados da lista
struct lista{
float info;
struct lista* prox;
};
typedef struct lista Lista;
Désiré NGuessan
Pilha: Implementação
Continuação
– Implementação de pilha com Lista
encadeada (alocação dinâmica)
• Definição da Estrutura de Dados do topo da pilha
// topo da pilha
struct pilha {
Lista * topo;
};
typedef struct pilha Pilha;
Désiré NGuessan
Pilha: Implementação
Continuação
• Criar a pilha
Pilha* pilha_cria(void){
Pilha* P = (Pilha*) malloc(sizeof(Pilha));
P->topo = NULL; // inicializa como zero elemento
return P;
}
P
Désiré NGuessan
Pilha: Implementação
Continuação
• Função Empilhar
void pilha_push(Pilha* p , float v){
Lista* L = (Lista*) malloc(sizeof(Lista));
L->info = v;
L->prox = p->topo;
p->topo = L;
}
Désiré NGuessan
• Função desempilhar
float pilha_pop(Pilha* p){
float v ;
Lista* T;
if (pilha_vazia(p)){
printf(" pilha vazia.\n");
exit(1); // aborta o programa
}
// retira elemento do topo
T= p->topo;
v= T->info;
p->topo = T->prox;
free(T); // libera o nó T
return v;
}
Désiré NGuessan
Pilha: Implementação
Continuação
• Função testar pilha Vazia
int pilha_vazia(Pilha* p){
return (p->topo == NULL);
}
Désiré NGuessan
Download