Вы находитесь на странице: 1из 11

Pilha

2.1 Pilhas
A Pilha uma estrutura de dados cujo funcionamento inspirado no de uma pilha natural 24 89 12 4 55 20

2.1 Pilhas usando Vetores


Pilha cheia 24 89 12 4 55 20 -1 5 4 3 2 1 0 Pilha vazia Vetores possuem um espao limitado para armazenamento de dados. Necessitamos definir um espao grande o suficiente para a nossa pilha. Necessitamos de um indicador de qual elemento do vetor o atual topo da pilha.

Definio de Pilha
Toda lista linear onde o ltimo elemento a entrar o primeiro a sair (ou o primeiro a entrar o ltimo a sair, FILO); Para satisfazer esta condio, basta que a insero e remoo sejam feitas na mesma extremidade da lista (head);
Obviamente, no necessrio ordenar;

Exemplo de Pilha no Mundo Real


Um baralho de cartas, colocadas uma a uma sobre a mesa, umas sobre as outras, formando um monte; A carta mais ao topo (a primeira a ser removida) foi a ltima a ser colocada sobre o monte;

Implementao de uma Pilha


type PNo = ^TNo; TNo = record valor: integer; proximo: PNo; end; TPilha = record head: PNo; end; function push(var pilha: TPilha; valor: integer): Boolean; function pop(var pilha: TPilha): integer;

Implementao de uma Pilha


Push: Nada mais que o nosso mtodo Empilhar; Pop: Como devemos inserir e remover da mesma extremidade da lista, devemos ento remover do incio, devolvendo ento o valor daquele elemento.

Implementando o Mtodo Push


function push(var pilha: TPilha; valor: integer): Boolean; var p, t: PNo; Begin new(p); p^.valor := v; p^.proximo := pilha.head; pilha.head := p; push := true; end;

Implementando o Mtodo Pop


function pop(var pilha: TPilha): integer; var p: PNo; Begin if (pilha.head = nil) then pop := -1 else begin p := pilha.head; pilha.head := pilha.head^.proximo; pop := p^.valor; dispose(p); end; end;

Implementando Pilha com Vetor


Program EmpilhandoDesempilhando ; Type Pilha=Record Topo:integer; Elementos:array[1..10] of integer; End; Var P:Pilha; Valor,I,J:Integer; Begin P.topo:=0; for I:=1 to 11 do begin Writeln('_________________________________________'); Write('Digite o dado a ser inserido na pilha: '); Readln(Valor); If P.Topo=10 then Begin Writeln('Erro: Pilha Cheia!'); Break; End Else Begin P.Topo:=P.Topo+1; P.Elementos[P.Topo]:=Valor; End; Writeln('Esta no Topo da pilha = ',P.Elementos[p.topo]); End; Writeln('_____________________________________'); Writeln('Desempilhando os Dados'); Writeln('_____________________________________'); for i:= 1 to 11 do Begin if P.topo=0 then Begin Writeln('Erro pilha Vazia!'); Break; End else Begin J:=P.Elementos[P.Topo]; P.Topo:=P.topo-1; End; Writeln('Estava no topo = ',J); Readln; End; End.

Exerccio
Escreva um algoritmo que fornea o maior, o menor e a mdia aritmtica dos elementos de uma:
Pilha.

Вам также может понравиться