![]() |
Esquema de Pilha (LIFO- Last in First aot) isto quer dizer que o Primeiro a entrar é o ultimo a sair. |
Programa da Pilha
Program Pilha;
Type Palavra=String[20];
Dados=Record
nome:Palavra;
Prox:^Dados
End;
Var Pii, Px:^Dados;
X:Integer;
Procedure Inserir;
Procedure Listar;
Procedure Ordenar;
Procedure Remover;
Begin
Begin //Programa Principal
Begin
New(Px);
Writeln('Insira um Nome');
Readln(Px^.nome);
Px^.Prox:=Pii;
Pii:=Px;
End;
Begin
Px:=Pii;
If Px=Nil then
Writeln('Lista Vazia')
Else
Repeat
Writeln('Nome: ', Px^.nome);
Px:=Px^.Prox;
Until Px=Nil
End;
Var P1, P2:^Dados;
Trocar:Boolean;
Aux:String;
Begin
If (Pii<>Nil)and(Pii^.Prox<>Nil) Then
Repeat
Trocar:=False;
P1:=Pii;
P2:=Pii^.Prox;
Repeat
If(P1^.nome> P2^.nome) Then
Begin
Trocar:=True;
Aux:=P1^.nome;
P1^.nome:=P2^.nome;
P2^.nome:=Aux;
End;
P1:=P1^.Prox;
P2:=P2^.Prox;
Until P1^.Prox=Nil;
Until Not Trocar
End;
Var Px:^Dados;
Pa:^Dados;
Dado:Palavra;
If Pii<>Nil Then
Begin
writeln ('Qual o dado que pretende eliminar?');
Readln(Dado);
Px:=Pii;
Pa:=Nil;
While (Px<>Nil) and (Px^.nome<>Dado) Do
Begin
Pa:=Px;
Px:=Px^.prox;
End;
If Px=nil then
Writeln(Dado, 'Nao esta inserido na lista')
Else
Begin
If Pa=Nil Then
Pii:=Px^.prox
Else
Pa^.prox:=Px^.prox;
Dispose (Px);
Writeln('O dado foi excluido com sucesso');
End;
End;
End;
Pii:=Nil;
Repeat
Writeln('Menu');
Writeln('------------');
Writeln('1->Inserir');
Writeln('------------');
Writeln('2->Listar');
Writeln('------------');
Writeln('3->Ordenar');
Writeln('------------');
writeln('4->Remover');
Writeln('------------');
Writeln('0->Sair');
Writeln('------------');
Writeln('Qual a opcao?');
Writeln('------------');
Readln(X);
Case X Of
1:Inserir;
2:Listar;
3:Ordenar;
4:Remover;
End;
Until(X=0);
Writeln ('--> O PROGRAMA VAI ENCERRAR ;D <--');
End.
Dados=Record
nome:Palavra;
Prox:^Dados
End;
Var Pii, Px:^Dados;
X:Integer;
Procedure Inserir;
Procedure Listar;
Procedure Ordenar;
Procedure Remover;
Begin
Begin //Programa Principal
Begin
New(Px);
Writeln('Insira um Nome');
Readln(Px^.nome);
Px^.Prox:=Pii;
Pii:=Px;
End;
Begin
Px:=Pii;
If Px=Nil then
Writeln('Lista Vazia')
Else
Repeat
Writeln('Nome: ', Px^.nome);
Px:=Px^.Prox;
Until Px=Nil
End;
Var P1, P2:^Dados;
Trocar:Boolean;
Aux:String;
Begin
If (Pii<>Nil)and(Pii^.Prox<>Nil) Then
Repeat
Trocar:=False;
P1:=Pii;
P2:=Pii^.Prox;
Repeat
If(P1^.nome> P2^.nome) Then
Begin
Trocar:=True;
Aux:=P1^.nome;
P1^.nome:=P2^.nome;
P2^.nome:=Aux;
End;
P1:=P1^.Prox;
P2:=P2^.Prox;
Until P1^.Prox=Nil;
Until Not Trocar
End;
Var Px:^Dados;
Pa:^Dados;
Dado:Palavra;
If Pii<>Nil Then
Begin
writeln ('Qual o dado que pretende eliminar?');
Readln(Dado);
Px:=Pii;
Pa:=Nil;
While (Px<>Nil) and (Px^.nome<>Dado) Do
Begin
Pa:=Px;
Px:=Px^.prox;
End;
If Px=nil then
Writeln(Dado, 'Nao esta inserido na lista')
Else
Begin
If Pa=Nil Then
Pii:=Px^.prox
Else
Pa^.prox:=Px^.prox;
Dispose (Px);
Writeln('O dado foi excluido com sucesso');
End;
End;
End;
Pii:=Nil;
Repeat
Writeln('Menu');
Writeln('------------');
Writeln('1->Inserir');
Writeln('------------');
Writeln('2->Listar');
Writeln('------------');
Writeln('3->Ordenar');
Writeln('------------');
writeln('4->Remover');
Writeln('------------');
Writeln('0->Sair');
Writeln('------------');
Writeln('Qual a opcao?');
Writeln('------------');
Readln(X);
Case X Of
1:Inserir;
2:Listar;
3:Ordenar;
4:Remover;
End;
Until(X=0);
Writeln ('--> O PROGRAMA VAI ENCERRAR ;D <--');
End.
![]() |
Breve reflexão sobre "Pilhas" |
As "Pilhas" consiste que na primeira coisa a entrar é o ultimo a sair. Como exemplo pode ser uma pilha de livros (um monte de livros), o primeiro livro a ser pousado na mesa e os restantes colocados em cima quando são novamente retirados os livros é o ultimo a sair da pilha.
Sem comentários:
Enviar um comentário