Existem 3 tipos de estruturas dinâmicas:
- Pilhas
É uma estrutura de dados que corresponde a uma lista sequencial. Respeita a propriedade LIFO (Last In First Out), ou seja, o último a entrar é o primeiro a sair.
Program Pilha ;
type dados=record
nome:string;
idade:integer;
prox:^dados;
end;
var p1,px:^dados;
x:char;
y,i:integer;
procedure
inserir;
Begin
p1:=nil;
new(px);
writeln('Nome:
');
read(px^.nome);
writeln('Idade:
');
read(px^.idade);
px^.prox:=p1;
p1:=px;
end;
procedure
listar;
begin
px:=p1;
repeat
writeln('Nome:
',px^.nome);
writeln('Idade:
',px^.idade);
px:=px^.prox;
until
px=nil;
end;
procedure
eliminar;
begin
px:=p1;
if
px<>nil then
begin
p1:=px^.prox;
dispose(px);
end
else
writeln('Pilha vazia');
end;
begin
p1:=nil;
repeat
writeln('1-para
inserir dados.');
writeln('2-para
mostrar dados.');
writeln('3-para eliminar dados.');
writeln('Qual a opoção');
read(y);
case
y of
1:inserir;
2:listar;
3:eliminar;
end;
writeln('Deseja
continuar?(S-N)');
read(x);
until(x='n') or (x='N');
End.
- Filas
Os elementos entram sempre na cauda da estrutura e o próximo elemento a sair é sempre o que se situa na frente da fila. Respeita a propriedade FIFO (First In First Out), ou seja, o primeiro a entrar é o primeiro a sair.
Program fila ;
type pessoa=record
nome:string;
idade:integer;
peso:real;
prox:^pessoa;
end;
var cauda,frente,px:^pessoa;
x:char;
y:integer;
procedure inserir;
begin
new(px);
writeln('Nome:');
read(px^.nome);
writeln('Idade:');
read(px^.idade);
writeln('Peso:');
read(px^.peso);
if
frente=nil then
begin
frente:=px;
cauda:=px;
end
else
begin
cauda^.prox:=px;
cauda:=px;
cauda^.prox:=nil;
end;
end;
procedure percorrer;
begin
px:=frente;
if px=nil then
writeln('Pilha
vazia')
else
begin
repeat
writeln('Nome:
',px^.nome);
writeln('Idade:
',px^.idade);
writeln('Peso:
',px^.peso);
px:=px^.prox;
until (px=nil);
end;
end;
procedure eliminar;
begin
px:=frente;
if px=nil then
writeln('Pilha
vazia')
else
begin
px:=frente;
frente:=frente^.prox;
dispose(px)
end;
end;
Begin
cauda:=nil;
frente:=nil;
repeat
writeln('1-para inserir dados.');
writeln('2-para mostrar dados.');
writeln('3-para eliminar dados.');
writeln('Qual a opoção');
read(y);
case
y of
1:inserir;
2:percorrer;
3:eliminar;
end;
writeln('Deseja
continuar?(S-N)');
read(x);
until(x='n') or (x='N');
End.
- Listas Ordenadas
Os elementos devem ficar por ordem alfabética ou por ordem crescente ou decrescente dos seus valores. Neste caso podemos remover um elemento em qualquer lugar da lista.
Program lista_ordenada;
type lista=record
nome:string;
ponteiro:^lista;
end;
var px,pz,p1,p2:^lista;
escolha, OP:char;
procedure inserir;
Begin
new(px);
writeln('Introduza o nome');
read(px^.nome);
px^.ponteiro:=pz;
pz:=px;
End;
procedure listar;
begin
px:=pz;
If px=nil then
writeln('A lista está vazia')
else
begin
repeat
writeln('Nome - ', px^.nome);
px:=px^.ponteiro
until px=nil;
end;
end;
procedure ordenar;
var trocar: boolean;
aux:string;
begin
P1:=Pz;
P2:=Pz^.PONTEIRO;
IF (pz <> nil) and
(pz^.ponteiro <> nil) then
repeat
trocar:=false;
p1:=pz;
p2:=pz^.ponteiro;
repeat
if
p1^.nome>p2^.nome then
begin
trocar:=true;
aux:=p1^.nome;
p1^.nome
:= p2^.nome;
p2^.nome:=aux;
end;
p1:=p1^.ponteiro;
p2:=p2^.ponteiro;
until
p1^.ponteiro = nil;
until not trocar
else
begin
if
p1=nil then
writeln('Lista
vazia');
if
p1^.ponteiro=nil then
Writeln('Só
existem 1 elementos');
end;
end;
procedure remover;
var pa:^lista;dado:string;
begin
if
pz<>nil then
begin
writeln('Introduza
o dado a eliminar');
read(dado);
pa:=nil;
px:=pz;
while
(px<>nil) and (px^.nome<>dado) do
begin
pa:=px;
px:=px^.ponteiro;
end;
if
px=nil then
writeln(dado,'
não se encontra na lista')
else
begin
if
pa=nil then
pz:=px^.ponteiro
else
pa^.ponteiro:=px^.ponteiro;
dispose(px);
writeln(dado,'
foi removido da lista');
end;
end
else
writeln('Lista
vazia');
end;
begin
pz:=nil;
repeat
writeln('1-Inserir');
writeln('2-Listar');
writeln('3-Sair');
writeln('4-Apagar');
writeln('Qual
a opção?');
readln(op);
case
op of
'1':Begin
inserir; ordenar; end;
'2':listar;
'4':remover;
end;
writeln('Deseja
continuar??');
Readln(escolha);
until(escolha='N')
or (escolha='n');
end.
Nota: Para preencher uma lista ordenada utiliza-se o mesmo processo que utiliza para uma pilha.
Reflexão:
As estruturas dinâmicas foram a base deste módulo. Aprendi a realizar filas, pilhas e listas ordenadas.



Sem comentários:
Enviar um comentário