Você está na página 1de 4

Algoritmos e Programao Estruturada

Virgnia M. Cardoso

Estrutura de Dados Pilha - Cdigo


Uma pilha um conjunto ordenado de itens no qual novos itens podem ser inseridos e a partir do qual podem ser eliminados em uma extremidade chamada topo da pilha. A pilha um objeto dinmico, no possui tamanho definido, pode aumentar ou diminuir de acordo com a necessidade. A pilha possui uma extremidade designada topo da pilha, os elementos so inseridos e retirados a partir desta extremidade. Pelo critrio de acesso a uma pilha, conhecida por LIFO (Last In, First Out), o primeiro elemento a ser retirado o ltimo que foi inserido. Exemplos: Pilha de pratos Pilha de livros

G F E D C B A Operaes Bsicas Empilhar (E): inclui o elemento no topo da pilha. Desempilhar (D): remove o elemento superior da pilha.

Implementao Pra implementarmos uma pilha seqencial precisamos de uma varivel ( Topo) indicando o endereo da mais recente informao colocada na pilha. Por conveno, se a pilha est vazia, o Topo = -1. O tamanho da Pilha limitado pelo tamanho do vetor. Pilha(0) Aa Topo Incio Pilha(1) Pilha(2) Pilha(3) Pilha(4) Fim Pilha(5) Insero Retirada

Algoritmos e Programao Estruturada


Virgnia M. Cardoso

Exemplo de um cdigo utilizando pilha com impresso: #include <cstdlib> #include <iostream> using namespace std; struct pilha { int topo; /*armazena o ndice em que foi inserido o ltimo elemento*/ int dados[10]; /*representa a pilha de 10 elementos inteiros*/ }; struct pilha p; //declarao da pilha void empilha (int item) { if (p.topo == 9) cout<<"Pilha Cheia"; /*overflow*/ else { p.topo++; p.dados[p.topo] = item; } }

int desempilha () { int resultado; if (p.topo == -1) { cout<<"Pilha Vazia";/*underflow*/ return -1; } else { resultado = p.dados[p.topo]; p.topo--; return resultado; } } int consulta () { int resultado; if (p.topo == -1) {

Algoritmos e Programao Estruturada


Virgnia M. Cardoso

cout<<"Pilha Vazia"; return -1; } else { resultado = p.dados[p.topo]; return resultado; } } void imprime() { struct pilha aux; aux.topo=-1; if(p.topo==-1) cout<<"\n\n\nPilha Vazia"; else { do{ //empilha em aux if (aux.topo == 9) cout<<"Pilha Cheia";/*overflow*/ else { aux.topo++; aux.dados[aux.topo] = p.dados[p.topo]; } cout<<"\n"<<p.dados[p.topo]<< "\n_____";//imprime topo da pilha //desempilha de pilha if (p.topo == -1) { cout<<"Pilha Vazia";/*underflow*/ } else { p.topo--; } }while(p.dados[p.topo]!=-1); cout<<"\n\n\n\n\n\n\n\n"; do{

Algoritmos e Programao Estruturada


Virgnia M. Cardoso

//empilha em pilha if (p.topo == 9) cout<<"Pilha Cheia"; /*overflow*/ else { p.topo++; p.dados[p.topo] = aux.dados[aux.topo]; } //desempilha dde aux if (aux.topo == -1) { cout<<"Pilha Vazia";/*underflow*/ } else { aux.topo--; } }while(aux.dados[aux.topo]!=-1); } } main() { int item; p.topo = -1; item = consulta(); cout<<"Topo da pilha: "<<item; imprime(); empilha(1); imprime(); empilha(2); imprime(); empilha(3); imprime(); item= desempilha(); imprime(); item= desempilha(); imprime(); item= desempilha(); imprime(); cout<<"\n\n"; system ("pause"); }

Você também pode gostar