1 / 12

Estrutura de dados II

Estrutura de dados II. Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação. Pilhas com alocação dinâmica de memória. 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.

keon
Download Presentation

Estrutura de dados II

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  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: typedefintElemento; // tipo a ser armazenado typedefstruct nodo { Elementoitem; struct nodo *prox; }* Nodo; typedefstruct { Nodotopo; }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 voidinicializaPilha(Pilha *); intpilhaVazia(Pilha); voidempilha (Pilha *, Elemento); intdesempilha (Pilha * Elemento *); ElementomostraTopo(Pilha);

  7. PilhaAD.h completo /* * Interface do Tad PilhaAD* */ #include<stdio.h> #include<stdlib.h> #include<malloc.h> #define MSG_PILHAVAZIA "\nA Pilha está vazia\n" #define MAX 10 // tamanho máximo da Pilha #define TRUE 1 #define FALSE 0 typedefintElemento; // tipo a ser armazenado typedefstruct nodo { Elementoitem; struct nodo *prox; }* Nodo;

  8. PilhaAD.h completo - continuação typedefstruct { Nodotopo; }Pilha; intpilhaVazia(Pilha); voidinicializaPilha(Pilha *); voidempilha (Pilha *, Elemento); intdesempilha (Pilha * Elemento *); ElementomostraTopo(Pilha);

  9. Implementação das Operações voidinicializaPilha(Pilha *p) { p->topo=NULL; } intpilhaVazia(Pilha p){ return (p.topo==NULL); } voidempilha (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 4 2 3 topo Inicializa pilha apontando topo para null 1 Pilha Inicializa(&p) 7 5 NULL 6 topo Item Prox Item Prox Pilha Nodo Nodo Alocado no endereco 0xffde Alocado no endereco 0xffcc 0xffcc empilha(5,&p) NULL 8 0xffcc 5 NULL topo Pilha Aloca espaco para Nodo em um endereco de memória Aloca espaco para Nodo em um endereco de memória 0xffde empilha(8,&p) 0xffcc Faz topo apontar para endereco onde Nodo foi alocado Faz topo apontar para endereco onde Nodo foi alocado Faz Prox receber valor de topo da pilha Faz Prox receber valor de topo da pilha A pilha agora possui dois valores 8 5 Topo

  11. Implementação das Operações int desempilha(Pilha *p) { Elemento eleNodo 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) intmain(){ 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; }

More Related