av_mrg
(usa Outra)
Enviado em 25/01/2017 - 14:02h
{Lista dinamicamente encadeada simples, com apenas um ponteiro para cada no.}
Program Lista_dinamica;
uses crt;
Type
tp_pessoa = record
chave: integer;
nome: string[20];
idade: integer;
{outros campos}
prox: ^tp_pessoa;
end;
ponteiro = ^tp_pessoa;
tp_lista = record
primeiro: ^tp_pessoa;
ultimo: ^tp_pessoa;
end;
Var
y:= ^tp_pessoa;
z:= ^tp_pessoa;
p: ^tp_pessoa;
pessoa_aux: tp_pessoa;
codigo: integer;
op: char;
Lista_real: tp_lista;
{Cria lista vazia}
Procedure Cria_lista(Var Lista: tp_lista);
Begin
new(Lista.primeiro);
Lista.ultimo:=Lista.primeiro;
Lista.ultimo^.prox:=nil;
End;
{Verifica se a lista esta vazia}
Function Vazia(Lista: tp_lista): boolean;
Begin
If Lista.ultimo=Lista.primeiro then
Vazia:=true
else
Vazia:=false;
End;
{Insere item na lista}
Procedure Insere (x: tp_pessoa; var Lista: tp_lista);
Begin
new(Lista.ultimo^.prox);
Lista.ultimo:=Lista.ultimo^.prox;
Lista.ultimo^:=x;
Lista.ultimo^.prox:=nil;
End;
{Encontra o endereco de um item a partir do seu codigo}
Function Localiza (cod: integer; Lista: tp_lista): ponteiro;
Var
paux: ponteiro; {ou paux: ^tp_pessoa;}
Begin
paux:=Lista.primeiro;
while ((paux^.prox<>nil)and(paux^.prox^.chave<>cod)) do
paux:=paux^.prox;
Localiza:=paux;
End;
{ Remove item da lista
Obs.: o item a ser retirado e o seguinte ao apontado por p }
Procedure Remove (p: ponteiro; Var Lista: tp_lista);
Var
q: ^tp_pessoa;
Begin
if ((Vazia(Lista)) or (p^.prox=nil)) then
writeln ('Erro: lista vazia ou item inexistente.')
else
begin
q:=p^.prox;
p^.prox:=q^.prox;
if (p^.prox=nil) then
Lista.ultimo:=p;
dispose(q);
end;
End;
{ Imprime os itens da lista }
Procedure Imprime (Lista: tp_lista);
Var
aux: ponteiro; {ou aux: ^tp_pessoa;}
i: integer;
Begin
i:=1;
aux:=Lista.primeiro^.prox;
while (aux<>nil) do
begin
writeln ('Codigo do item ',i,': ',aux^.chave);
writeln ('Nome do item ',i,': ',aux^.nome);
writeln ('Idade do item ',i,': ',aux^.idade);
i:=i+1;
aux:=aux^.prox;
writeln;
end;
End;
Begin
clrscr;
Cria_lista(Lista_real);
repeat
writeln ('Escolha uma opcao: ');
writeln (' 1 - Verifica se a lista esta vazia;');
writeln (' 2 - Insere item na lista;');
writeln (' 3 - Remove itens da lista;');
writeln (' 4 - Imprime itens da lista;');
writeln (' 0 - Sair;');
readln(op);
case op of
'1': begin
if Vazia(Lista_real) then
writeln ('Lista vazia!')
else
writeln ('Lista nao vazia!');
end;
'2': begin
write ('Digite um codigo para a pessoa: ');
readln(pessoa_aux.chave);
write ('Digite o nome da pessoa: ');
readln(pessoa_aux.nome);
write ('Digite a idade da pessoa: ');
readln(pessoa_aux.idade);
Insere(pessoa_aux, Lista_real);
end;
'3': begin
write ('Remoção com sucesso: ');
readln (codigo);
y:=Lista_real.Primeiro^.prox^.prox;
z:=y;
Lista_real.ultimo^.prox:=z;
codigo:=Lista_real.Primeiro^.chave;
p:=Localiza(codigo, Lista_real);
if p=nil then
writeln ('Remocao impossivel, codigo nao cadastrado!')
else
Remove(p, Lista_real);
end;
'4': begin
Imprime(Lista_real);
end;
else writeln ('Opcao invalida.');
end;
until op='0';
end.