Estrutura de dados - lista
Publicado por Jose Ribeiro 06/08/2009
[ Hits: 6.608 ]
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.
Horas por extenso: convertendo as horas em um TDateTime para texto corrido.
Ordenando um vetor sem utilização de variáveis de contagem ou auxiliar
Nenhum coment�rio foi encontrado.
O que é o THP na configuração de RAM do Linux e quando desabilitá-lo
Comparação entre os escalonadores BFQ e MQ-Deadline (acesso a disco) no Arch e Debian
Conciliando o uso da ZRAM e SWAP em disco na sua máquina
Servidor de Backup com Ubuntu Server 24.04 LTS, RAID e Duplicati (Dell PowerEdge T420)
Como unir duas coleções de ROMs preservando as versões traduzidas (sem duplicatas)
Como instalar o Telegram Desktop no Ubuntu 24.04
Overclocking Permanente para Drastic no Miyoo Mini Plus
Problemas de chaves (/usr/share/keyrings) no Debian
Converter os repositórios Debian para o novo formato com as chaves
eu preciso saber uma coisa sobre os games no linux (3)
eu preciso saber uma coisa sobre os games no linux (1)
Problema com audio apos upgrade (1)