Estrutura de dados - lista
Publicado por Jose Ribeiro 06/08/2009
[ Hits: 6.811 ]
Homepage: https://serviceup.com.br/
Um exemplo de lista utilizando apontadores.
program ed;
uses crt;
type
apontador = ^celula;
celula = record
item:integer;
prox:apontador;
end;
tipolista = record
primeiro:apontador;
ultimo:apontador;
end;
procedure inicialista(var lista:tipolista);
var
aux:apontador;
begin
new (aux);
lista.primeiro:=aux;
lista.ultimo:=lista.primeiro;
lista.ultimo^.prox :=nil;
end;
function vazia(lista:tipolista):boolean;
begin
vazia:=lista.primeiro = lista.ultimo;
end;
procedure inserirf(x:integer;var lista:tipolista);
var aux:apontador;
begin
new (aux);
lista.ultimo^.prox:=aux;
aux^.prox := nil;
aux^.item :=x;
lista.ultimo := aux;
end;
procedure imprimir(lista:tipolista);
var aux:apontador;
begin
aux := lista.primeiro^.prox;
while ( aux <> nil ) do begin
writeln(aux^.item);
aux:=aux^.prox;
end;
end;
procedure inseriri(x:integer; var lista:tipolista);
var
aux:apontador;
begin
if(vazia(lista)) then
inserirf(x,lista)
else
begin
new(aux);
aux^.item := x;
aux^.prox:=lista.primeiro^.prox;
lista.primeiro^.prox := aux;
end;
end;
procedure retirai(var x:integer; var lista:tipolista);
var
aux:apontador;
begin
aux:=lista.primeiro^.prox;
x:=aux^.item;
lista.primeiro^.prox := aux^.prox;
if (lista.primeiro^.prox = nil ) then lista.ultimo := lista.primeiro;
dispose(aux);
end;
procedure retirarf(var x:integer; var lista:tipolista);
var
aux:apontador;
begin
if ( lista.primeiro^.prox^.prox = nil ) then
retirai(x,lista)
else
begin
aux:=lista.primeiro^.prox;
while ( aux^.prox <> lista.ultimo) do
aux := aux^.prox;
lista.ultimo := aux;
aux:=aux^.prox;
x:=aux^.item;
lista.ultimo^.prox:=nil;
dispose(aux);
end;
end;
procedure retiral( var x:integer; var lista:tipolista; n:integer);
var
aux,aux1:apontador;
i:integer;
begin
aux:=lista.primeiro;
for i:=1 to n-1 do
begin
x:=aux^.prox^.item;
end;
aux1:= aux^.prox;
aux^.prox := aux1^.prox;
dispose(aux1);
end;
procedure media(l:tipolista; var media:real);
var
aux:apontador;
b:integer;
begin
aux:=l.primeiro;
media:=0;
b:=0;
while aux^.prox <> nil do begin
aux:=aux^.prox;
media:=media+aux^.item;
b:=b+1;
end;
media:=media/b;
end;
procedure somapar(l:tipolista; var sp:integer);
var
aux:apontador;
begin
aux:=l.primeiro;
sp:=0;
while (aux^.prox <> nil) do begin
aux:=aux^.prox;
if (aux^.item mod 2) = 0 then
begin
sp:=sp+aux^.item;
end;
end;
end;
procedure retira2(var lista:tipolista; x:integer);
var auxR,aux:apontador;
cont,i:integer;
begin
i:=0;
aux:=lista.primeiro;
while (aux^.item <> x) do begin
aux:= aux^.prox;
i:=i+1;
end;
auxR := lista.primeiro;
for cont:=1 to i-3 do auxR:=auxR^.prox;
aux:=auxR^.prox;
auxR^.prox := aux^.prox;
dispose(aux);
end;
procedure exer3daprova(l:tipolista);
var
mediam:real;
aux:apontador;
i,multi,somap:integer;
begin
i:=0;
multi:=1;
aux:=l.primeiro^.prox;
while ( aux <> nil ) do begin
i:=i+1;
if (aux^.item mod 2 = 1 ) then
multi := multi * aux^.item;
if ( i mod 2 = 0 ) then
somap:=somap + aux^.item;
end;
mediam := multi / i;
writeln(mediam);
writeln(somap);
end;
procedure inserirantes( var l:tipolista; x:integer; elem:integer);
var
aux,aux1:apontador;
begin
aux:=l.primeiro^.prox;
while ( aux^.prox^.item <> elem ) do begin
aux^.prox;
end;
new (aux1);
aux1^.prox := aux^.prox;
aux^.prox := aux1;
aux1^.item := x;
end;
var
l:tipolista;
opc:char;
elem:integer;
n:integer;
soma:integer;
m:real;
{ Programa principal }
begin
inicialista(l);
repeat
writeln(' 1 - Insere in¡cio ');
writeln(' 2 - Insere Fim ');
writeln(' 3 - Retira in¡cio ');
writeln(' 4 - Retira fim ');
writeln(' 5 - Imprimir ');
writeln(' 6 - retirar elemtento em posi‡Æo X ');
writeln(' 7 - Media ');
writeln(' 8 - soma dos elementos pares ');
writeln(' a - Retirar 2§ elemento antes de X ');
writeln(' b - media arit dos elementos impares, e soma dos elem que estÆo nas posi‡äes pares');
writeln(' c - inserir um elemento antes de um determinado elemento');
writeln(' 9 - Sair');
writeln(' 0 - limpar a tela');
opc:=readkey;
{ clrscr; }
case opc of
'1':begin
writeln('Entre com o elemento a ser inserido');
readln(elem);
inseriri(elem,l);
end;
'2' :begin
writeln('Entre com o elemento a ser inserido no final');
readln(elem);
inserirf(elem,l);
end;
'3' :begin
if vazia(l) then writeln('A lista est vazia, impossivel retirar elemento !')
else begin
retirai(elem,l);
writeln('O elemento', elem , 'foi removido do inicio da lista');
end;
end;
'4' :begin
if vazia(l) then writeln('A lista est vazia, impossivel retirar elemento !')
else begin
retirarf(elem,l);
writeln('O elemento', elem , 'foi removido do inicio da lista');
end;
end;
'5':begin
writeln('Elementos do lista');
imprimir(l);
end;
'6' :begin
if not vazia(l) then
writeln('Entre com a posi‡Æo do elemtento a ser removido');
readln(n);
retiral(elem,l,n);
end;
'7' :begin
media(l,m);
writeln('A media ‚ ',m:3:2);
end;
'8' :begin
somapar(l,soma);
writeln('a soma dos elementos pares ‚',soma)
end;
'9':writeln('Saindo do programa');
'0':clrscr;
'a' :begin
writeln('Elemento');
readln(elem);
retira2(l,elem);
end;
'b' :exer3daprova(l);
end;
until(opc='9');
readkey;
end.
Script em Pascal/Kylix para controle de Locadoras sem salvar arquivos em disco
Ordenando um vetor sem utilização de variáveis de contagem ou auxiliar
Nenhum comentário foi encontrado.
Fscrypt: protegendo arquivos do seu usuário sem a lentidão padrão de criptograr o disco
Faça suas próprias atualizações de pacotes/programas no Void Linux e torne-se um Contribuidor
Como rodar o Folding@home no Linux
Criando um painel de controle (Dashboard) para seu servidor com o Homepage
O Abismo entre o Código e o Chão: Saltos Tecnológicos e a Exclusão Estrutural no Brasil
Pisando no acelerador do Linux Mint: Kernel XanMod, zRAM e Ajustes de Swap
Como compilar kernel no Linux Mint
Lançamento do Brutal DOOM test 6
Consertando o erro no Brave de webgl
Solução para ter de volta as bordas e barra de títulos das janelas em zenity no Debian 13.x
Seno, Coseno, Tangente em CLIPPER (1)
Inserir uma URL num arquvo pelo Ubuntu (CLIPPER) (0)
VMWare Player não conecta na rede nem consigo intercambiar arquivos (1)









