A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Estrutura de dados II Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.

Apresentações semelhantes


Apresentação em tema: "Estrutura de dados II Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação."— Transcrição da apresentação:

1 Estrutura de dados II Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação

2 Pilhas com alocação dinâmica de memória

3 Operações Não existe o teste de Pilha Cheia Na Implementação do TAD Pilha com alocação Dinâmica não temos limite de espaço. Assim as operações da pilha são as seguinte: inicializaPilha pilhaVazia empilha desempilha

4 Estrutura de dados: typedef int Elemento; // tipo a ser armazenado typedef struct nodo { Elemento item; struct nodo *prox; }* Nodo; typedef struct { Nodo topo; }Pilha;

5 Pré e pos condicoes Inicializa Pre-condições: Não há Pós-condições: topo aponta para NULL Empilha(elemento): Pré-condições: não há Pós-condições: topo aponta para novo nodo contendo o elemento. Prox de topo aponta para o topo anterior Desempilha Précondições: pilhaVazia = FALSO Pós-condições: remove o nodo do topo. Topo aponta para o próximo de topo.

6 Operações void inicializaPilha(Pilha *); int pilhaVazia(Pilha); void empilha (Pilha *, Elemento); int desempilha (Pilha * Elemento *); Elemento mostraTopo(Pilha);

7 PilhaAD.h completo /* * Interface do Tad PilhaAD* */ #include #define MSG_PILHAVAZIA "\nA Pilha está vazia\n" #define MAX 10 // tamanho máximo da Pilha #define TRUE 1 #define FALSE 0 typedef int Elemento; // tipo a ser armazenado typedef struct nodo { Elemento item; struct nodo *prox; }* Nodo;

8 PilhaAD.h completo - continuação typedef struct { Nodo topo; }Pilha; int pilhaVazia(Pilha); void inicializaPilha(Pilha *); void empilha (Pilha *, Elemento); int desempilha (Pilha * Elemento *); Elemento mostraTopo(Pilha);

9 Implementação das Operações void inicializaPilha(Pilha *p) { p->topo=NULL; } int pilhaVazia(Pilha p){ return (p.topo==NULL); } void empilha (Pilha *p, Elemento ele){ Nodo novoNodo; novoNodo = (struct nodo *) malloc(sizeof(struct nodo)); novoNodo->item=ele; novoNodo->prox=p->topo; p->topo=novoNodo; }

10 Empilhando elementos empilha(5,&p) 0xffcc Pilha topo NULL Pilha topo Inicializa(&p) Nodo 5 NULL Item Prox Alocado no endereco 0xffcc empilha(8,&p) 0xffde Pilha topo 1 Inicializa pilha apontando topo para null 2 Aloca espaco para Nodo em um endereco de memória 3 Faz Prox receber valor de topo da pilha 4 Faz topo apontar para endereco onde Nodo foi alocado Nodo 8 0xffcc Item Prox Alocado no endereco 0xffde 6 Faz Prox receber valor de topo da pilha 7 Faz topo apontar para endereco onde Nodo foi alocado 5 Aloca espaco para Nodo em um endereco de memória NULL 0xffcc Topo A pilha agora possui dois valores 8 5

11 Implementação das Operações int desempilha(Pilha *p) { Elemento ele Nodo aux; if (pilhaVazia(*p)==FALSE) { ele = p->topo->item; aux = p->topo; p->topo = p->topo->prox; free(aux); } else{ fprintf(stderr, MSG_PILHAVAZIA); } return ele; }

12 Testando o tadPilha (principal.c) int main(){ Pilha p; int i; Elemento e; inicializaPilha(&p); for(i=0;i<10;i++) { empilha(&p,i); } while(pilhaVazia(p)==FALSE){ e = desempilha(&p); printf("%d\n",e); } fprintf(stderr,"Terminou ok.\n"); return 0; }


Carregar ppt "Estrutura de dados II Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação."

Apresentações semelhantes


Anúncios Google