Exercícios – Parte II Listas Duplamente Encadeadas - Inf

Propaganda
UNIVERSIDADE FEDERAL DO RIO GRANDE DO SUL
INSTITUTO DE INFORMÁTICA
Bacharelado em Ciência da Computação
/ Engenharia da Computação
INF 01203 – Estruturas de Dados
Professores: Renata de Matos Galante
Exercícios – Parte II
Listas Duplamente Encadeadas
01. As funções apresentadas a seguir exibem todos os elementos de uma lista duplamente
encadeada.
• Qual a diferença entre as duas funções?
• Preencha os pontos de interrogação com as atualizações corretas para os ponteiros.
Proc ImprimirLL (PtLista: TipoPtnodo);
var PtAux : TipoPtnodo;
início
se PtLista = nil
então escreva ( ´Lista vazia ! ´)
senão início
PtAux := PtLista;
Enquanto PtAux↑.Prox ≠ nil faça
begin
escreva ( PtAux↑.Info );
PtAux:= ????;
Fim
fim;
Proc ImprimirLL (PtLista: TipoPtnodo);
var PtAux : TipoPtnodo;
se PtLista = nil
então escreva ( ´Lista vazia ! ´)
senão início
PtAux := PtLista;
Enquanto PtAux↑.Prox ≠ nil faça PtAux:=PtAux↑.Prox;
Enquanto PtAux ≠ PtLista
faça início
escreva ( PtAux↑.Info );
PtAux := ????;
fim;
escreva (PtAux ↑. Info )
fim;
02. O algoritmo a seguir insere o primeiro elemento de uma Lista Duplamente Encadeada.
Preencha os pontos de interrogação com as atualizações corretas para os ponteiros.
Proc InserirInicio (var PtLista: TipoPtnodo: Dados: TipoInfonodo);
var Pt, PtAux: TipoPtnodo;
início
alocar (Pt);
Pt ↑. Info := Dados;
se PtLista = nil
então início
PtLista := ????;
Pt ↑.Ant := ????;
Pt ↑.Prox := ????;
Fim
fim;
03. O algoritmo a seguir insere um elemento ou no início ou no final de uma Lista Duplamente
Encadeada. Preencha os pontos de interrogação com as atualizações corretas para os ponteiros.
Proc InserirnodoFinal (var PtLista: TipoPtnodo: Dados: TipoInfonodo);
var Pt, PtAux: TipoPtnodo;
início
alocar (Pt);
Pt ↑ . Info := Dados;
se PtLista = nil
então início
PtLista := ????;;
Pt ↑ . Ant := ????;
Pt ↑ . Prox := ????;
fim
senão início
PtAux := PtLista;
enquanto PtAux ↑ . Prox ≠ nil
faça PtAux := PtAux ↑ . Prox;
PtAux ↑ . Prox := ????;
Pt ↑ . Ant := ????;
Pt ↑ . Prox := ????;
fim
fim InserirnodoFinal;
04. O algoritmo a seguir insere um elemento no meio de uma Lista Duplamente Encadeada.
Preencha os pontos de interrogação com as atualizações corretas para os ponteiros.
Proc Acessa_ll (Lista: ptr; K:inteiro; var pt_anterior, pt_procura: ptr);
{ ptr: tipo que aponta para nodo }
{ pt_procura retorna o endereço do k-ésimo nodo }
{ pt_anterior retorna o endereço do (k-1)-ésimo nodo }
início
pt_procura := Lista;
pt_anterior := nil;
enquanto pt_procura <> nil e K > 1
faça início
K := K - 1;
pt_anterior := pt_procura;
pt_procura := pt_procura ↑ . Elo
fim;
se K > 1
{ a lista terminou antes do k-ésimo nodo }
então pt_anterior := pt_procura := nil;
fim;
Proc Insere_ll (var Lista: ptr; K: inteiro; Inf: string;Sucesso: lógico);
var pt_anterior, pt_anterior, Novo: ptr;
ínicio
Acessa_ll (Lista, K, pt_anterior, pt_procura);
se pt_procura <> nil ou pt_anterior <> nil ou K = 1
então início
sucesso := verdadeiro;
alocar (Novo);
Novo ↑ . Info := Inf;
????;
????;
????;
????;
senão Sucesso := falso
fim;
05. O que faz cada um dos trechos de código apresentados a seguir. Ele seria útil para uma lista
circular? Justifique sua resposta.
Type
tpont = ^ trec;
trec = record
info:T;
ant, pos: tpont;
End;
Lista = tpont;
Var pont: Lista;
Procedure Insere1(pont:lista; x:T);
Var j: Lista;
Begin
new(j);
j^.info:=x;
j^.pos:=pont^.pos;
j^.pos^.ant:=j;
j^.ant:=pont;
pont^.pos:=j;
End;
Procedure Insere2(pont:Lista; x:T);
Var j: Lista;
Begin
new(j);
j^.info:=x;
j^.pos:=pont;
j^.ant:=pont^.ant;
j^.ant^.pos:=j;
pont^.ant:=j;
End;
06. Analise o trecho de código apresentado a seguir, considerando:
• o que faz o procedimento;
• qual deveria ser o critério de ordenamento da lista;
• qual seria o resultado para uma lista não-circular?
• qual seria o resultado para uma lista circular?
Considere a mesma estrutura de dados especificada no exercício 3.
Function Busca(ptlista: Lista; x: T):Lista;
Var pont, ultimo: Lista;
Begin
ultimo:=ptlista^.ant;
If x<=ultimo^.info then
Begin
pont:=ptlista;
While pont^.info < x do
pont:=pont^.pos;
Busca:=pont;
End
Else
Busca:=ptlista;
End;
Download