Matéria que está sendo dada no 4º termo, no algoritmo estamos incluindo um nó em uma árvore binária:
Procedure INCNO(var RAIZ:PREG, ITEM:Integer);
var NO, AUX: PREG; FLAG: boolean;
Begin
new(NO);
NO^.INFO:=ITEM;
NO^.ESQ:=nil;
NO^.DIR:=nil;
if RAIZ = nil then
RAIZ:=NO
else
begin
FLAG:=false;
AUX:=RAIZ;
while (FLAG = false) do
begin
if (ITEM = AUX^.INFO) then
begin
if (AUX^.ESQ = nil) then
begin
AUX^.ESQ:=NO;
FLAG:=true;
end
else
AUX:=AUX^.ESQ;
end
else
begin
if (AUX^.DIR = nil) then
begin
AUX^.DIR:=NO;
FLAG:=true;
end
else
AUX:=AUX^.DIR;
end;
end;
end;
end;
Qual critério foi adotado para inserir valores na árvore?
R: Se o nó filho for menor que o nó pai, e o lado esquerdo estiver vazio,
o valor é inserido do lado esquerdo, caso o lado esquerdo estiver ocupado,
é verificado com o valor que está lá, se o nó é menor ou maior, caso seja maior,
e o lado direito estiver vazio, o valor é inserido do lado direito,
caso não esteja vazio, é verificado com o valor que está lá, se o nó é maior ou menor...
Esquerda: Valor inferior ao do nó Pai;
Direita: Valor superior ao do nó Pai;
Mostrando postagens com marcador Estrutura de Dados. Mostrar todas as postagens
Mostrando postagens com marcador Estrutura de Dados. Mostrar todas as postagens
terça-feira, 26 de abril de 2011
sábado, 23 de abril de 2011
Estrutura de dados
Trabalho feito no semestre passado, matéria de estrutura de dados.
Contém o procedimento remover das listas duplamente e simplesmente encadeada:
program PrjTrabalho_2bim;
{$APPTYPE CONSOLE}
uses SysUtils;
type TpPont =^Lista;
Lista = record
info:string;
prox:TpPont;
end;
type TpPontDupla =^ListaDupla;
ListaDupla = record
info:string;
aux,prox,ant:TpPontDupla;
end;
Procedure CriaListaDupla(var L:tpPontDupla);
begin
L:=nil;
end;
Procedure InsereDupla(var L:TpPontDupla; valor: string);
var p,aux:TpPontDupla;
begin
new(p);
p^.info:=valor;
if(L = nil)then
begin
p^.prox:=nil;
p^.ant:=nil;
L:=p;
end
else
begin
p^.prox:=l;
p^.ant:=nil;
aux:=l;
aux^.ant:=p;
l:=p;
end;
end;
procedure CriaListaSimples(var L:tpPont);
begin
L:=nil;
end;
Procedure InsereSimples(Var L:tpPont; Valor: String);
var p:TpPont;
begin
new(p);
p^.info:=valor;
p^.prox:=L;
L:=p;
end;
Procedure ExibirListaDupla(L:TpPontDupla);
begin
while L <> nil do
begin
writeln(L^.info);
L:=L^.prox;
end;
end;
Procedure ExibirListaSimples(L:TpPont);
begin
while L <> nil do
begin
writeln(L^.info);
L:=L^.prox;
end;
end;
Procedure Remove_PrimDupla(Var L: TpPontDupla);
var p:TpPontDupla;
Begin
p := L;
L:= L^.prox;
dispose(p)
End;
Procedure Remove_PrimSimples(Var L: TpPont);
var p:TpPont;
Begin
p := L;
L:= L^.prox;
dispose(p)
End;
var resp:char; valor:string; L:TpPont; L2:TpPontDupla;
begin
while resp <> '0' do
begin
writeln('Menu');
writeln('1 - Lista Simples');
writeln('2 - Lista Dupla');
writeln('0 - Sair');
readln(resp);
if resp = '1' then
begin
CriaListaSimples(L);
resp:='s';
while resp = 's' do
begin
writeln('Digite um valor para lista:');
readln(valor);
InsereSimples(L,valor);
writeln('Deseja inserir mais algum valor? (s/n)');
readln(resp);
end;
if resp = 'n' then
begin
writeln('O primeiro valor da lista que foi o ultimo a ser inserido sera removido');
Remove_PrimSimples(L);
writeln('O restante dos valores inseridos na lista sao:');
ExibirListaSimples(L);
end;
end
else if resp = '2' then
begin
CriaListaDupla(L2);
resp:='s';
while resp = 's' do
begin
writeln('Digite um valor para lista:');
readln(valor);
InsereDupla(L2,valor);
writeln('Deseja inserir mais algum valor? (s/n)');
readln(resp);
end;
if resp = 'n' then
begin
writeln('O primeiro valor da lista que foi o ultimo a ser inserido sera removido');
Remove_PrimDupla(L2);
writeln('O restante dos valores inseridos na lista sao:');
ExibirListaDupla(L2);
end
end
else if resp = '0' then
begin
writeln('Deseja realmente sair? (s/n)');
readln(resp);
if resp = 's' then
resp:='0';
end;
end;
end.
Contém o procedimento remover das listas duplamente e simplesmente encadeada:
program PrjTrabalho_2bim;
{$APPTYPE CONSOLE}
uses SysUtils;
type TpPont =^Lista;
Lista = record
info:string;
prox:TpPont;
end;
type TpPontDupla =^ListaDupla;
ListaDupla = record
info:string;
aux,prox,ant:TpPontDupla;
end;
Procedure CriaListaDupla(var L:tpPontDupla);
begin
L:=nil;
end;
Procedure InsereDupla(var L:TpPontDupla; valor: string);
var p,aux:TpPontDupla;
begin
new(p);
p^.info:=valor;
if(L = nil)then
begin
p^.prox:=nil;
p^.ant:=nil;
L:=p;
end
else
begin
p^.prox:=l;
p^.ant:=nil;
aux:=l;
aux^.ant:=p;
l:=p;
end;
end;
procedure CriaListaSimples(var L:tpPont);
begin
L:=nil;
end;
Procedure InsereSimples(Var L:tpPont; Valor: String);
var p:TpPont;
begin
new(p);
p^.info:=valor;
p^.prox:=L;
L:=p;
end;
Procedure ExibirListaDupla(L:TpPontDupla);
begin
while L <> nil do
begin
writeln(L^.info);
L:=L^.prox;
end;
end;
Procedure ExibirListaSimples(L:TpPont);
begin
while L <> nil do
begin
writeln(L^.info);
L:=L^.prox;
end;
end;
Procedure Remove_PrimDupla(Var L: TpPontDupla);
var p:TpPontDupla;
Begin
p := L;
L:= L^.prox;
dispose(p)
End;
Procedure Remove_PrimSimples(Var L: TpPont);
var p:TpPont;
Begin
p := L;
L:= L^.prox;
dispose(p)
End;
var resp:char; valor:string; L:TpPont; L2:TpPontDupla;
begin
while resp <> '0' do
begin
writeln('Menu');
writeln('1 - Lista Simples');
writeln('2 - Lista Dupla');
writeln('0 - Sair');
readln(resp);
if resp = '1' then
begin
CriaListaSimples(L);
resp:='s';
while resp = 's' do
begin
writeln('Digite um valor para lista:');
readln(valor);
InsereSimples(L,valor);
writeln('Deseja inserir mais algum valor? (s/n)');
readln(resp);
end;
if resp = 'n' then
begin
writeln('O primeiro valor da lista que foi o ultimo a ser inserido sera removido');
Remove_PrimSimples(L);
writeln('O restante dos valores inseridos na lista sao:');
ExibirListaSimples(L);
end;
end
else if resp = '2' then
begin
CriaListaDupla(L2);
resp:='s';
while resp = 's' do
begin
writeln('Digite um valor para lista:');
readln(valor);
InsereDupla(L2,valor);
writeln('Deseja inserir mais algum valor? (s/n)');
readln(resp);
end;
if resp = 'n' then
begin
writeln('O primeiro valor da lista que foi o ultimo a ser inserido sera removido');
Remove_PrimDupla(L2);
writeln('O restante dos valores inseridos na lista sao:');
ExibirListaDupla(L2);
end
end
else if resp = '0' then
begin
writeln('Deseja realmente sair? (s/n)');
readln(resp);
if resp = 's' then
resp:='0';
end;
end;
end.
Assinar:
Postagens (Atom)