8
1 Listas Est Listas Está ticas ticas Aula 2 Aula 2 Defini Definiç ão ão - Lista Lista Defini Definição da ED ão da ED #define MAX 100 #define MAX 100 typedef typedef struct struct { int int A[MAX]; A[MAX]; int int n; //n: 0..MAX; n; //n: 0..MAX; }lista; }lista; lista L; lista L; Opera Operaç ões ões Opera Operações simples utilizando Lista Est ões simples utilizando Lista Estática tica Seq Seqüencial a serem definidas nas encial a serem definidas nas Units Units 1) Acesso a um elemento 1) Acesso a um elemento Writeln Writeln (L.A[i]); (L.A[i]); Opera Operaç ões ões 2) Atualiza 2) Atualização ão L.A[i]:= 'Valor' L.A[i]:= 'Valor' 3) Tamanho da Lista 3) Tamanho da Lista Begin Begin tamanho:=L.n; tamanho:=L.n; End; End; Opera Operaç ões ões 4) Inser 4) Inserção de um elemento na posi ão de um elemento na posição i ão i Requer o deslocamento Requer o deslocamento à direita dos elementos direita dos elementos a(i+1)...a(n) a(i+1)...a(n) Begin Begin For j:=L.n+1 For j:=L.n+1 downto downto i+1 do i+1 do lista.A[j]:=L.A[j lista.A[j]:=L.A[j- 1]; 1]; L.A[i]:='novo valor'; L.A[i]:='novo valor'; L.n:=L.n+1; L.n:=L.n+1; End; End; Opera Operaç ões ões 5) Remo 5) Remoção do ão do i-ésimo simo elemento elemento Requer o deslocamento Requer o deslocamento à esquerda dos esquerda dos elementos a(i+1)...a(n) elementos a(i+1)...a(n) Begin Begin For j:=i to L.n For j:=i to L.n-1 do 1 do L.A[j]:=L.A[j+1]; L.A[j]:=L.A[j+1]; L.n:=L.n L.n:=L.n-1; 1; End; End;

Aula 2- Lista Estatica Encadeada.pdf-28-02

Embed Size (px)

Citation preview

Page 1: Aula 2- Lista Estatica Encadeada.pdf-28-02

1

Listas EstListas Estááticasticas

Aula 2Aula 2

DefiniDefiniçção ão -- ListaLista

DefiniDefiniçção da ED ão da ED

#define MAX 100#define MAX 100

typedeftypedef structstruct {{

intint A[MAX];A[MAX];

intint n; //n: 0..MAX;n; //n: 0..MAX;

}lista;}lista;

lista L;lista L;

OperaOperaççõesões

OperaOperaçções simples utilizando Lista Estões simples utilizando Lista Estáática tica SeqSeqüüencial a serem definidas nas encial a serem definidas nas UnitsUnits

1) Acesso a um elemento1) Acesso a um elemento

WritelnWriteln (L.A[i]);(L.A[i]);

OperaOperaççõesões

2) Atualiza2) Atualizaççãoão

L.A[i]:= 'Valor'L.A[i]:= 'Valor'

3) Tamanho da Lista3) Tamanho da Lista

BeginBegin

tamanho:=L.n;tamanho:=L.n;

End;End;

OperaOperaççõesões

�� 4) Inser4) Inserçção de um elemento na posião de um elemento na posiçção i ão i Requer o deslocamento Requer o deslocamento àà direita dos elementos direita dos elementos a(i+1)...a(n) a(i+1)...a(n)

��

BeginBegin�� For j:=L.n+1 For j:=L.n+1 downtodownto i+1 doi+1 do�� lista.A[j]:=L.A[jlista.A[j]:=L.A[j--1];1];�� L.A[i]:='novo valor';L.A[i]:='novo valor';�� L.n:=L.n+1;L.n:=L.n+1;�� End;End;

OperaOperaççõesões

5) Remo5) Remoçção do ão do ii--éésimosimo elementoelemento

Requer o deslocamento Requer o deslocamento àà esquerda dos esquerda dos elementos a(i+1)...a(n) elementos a(i+1)...a(n)

BeginBegin

For j:=i to L.nFor j:=i to L.n--1 do1 do

L.A[j]:=L.A[j+1];L.A[j]:=L.A[j+1];

L.n:=L.nL.n:=L.n--1;1;

End;End;

Page 2: Aula 2- Lista Estatica Encadeada.pdf-28-02

2

BuscaBusca

1) Listas seq1) Listas seqüüenciais não ordenadasenciais não ordenadas

Seja L uma lista linear não ordenada Seja L uma lista linear não ordenada alocada seqalocada seqüüencialmente encialmente

Var L: Var L: arrrayarrray [1..n] of [1..n] of recordrecord

chave: T1;chave: T1;

infoinfo: T2;: T2;

End;End;

BuscaBusca�� A funA funçção busca1 abaixo busca um registro contendo a ão busca1 abaixo busca um registro contendo a

chave x na lista L, e retorna o chave x na lista L, e retorna o ííndice do registro se ndice do registro se encontrado, caso contrencontrado, caso contráário retorna zero rio retorna zero

FunctionFunction busca1(x);busca1(x);Var i: 1..Max;Var i: 1..Max;BeginBegini := 1;i := 1;busca1 := 0; {elemento não encontrado}busca1 := 0; {elemento não encontrado}WhileWhile i <= i <= NelemNelem dodo

If L[i].chave = x If L[i].chave = x thenthenBeginBeginbusca1 := i;busca1 := i;i := i := NelemNelem + 1; {termina loop}+ 1; {termina loop}

EndEndElseElse i := i+1;i := i+1;

End;End;

BuscaBusca

Em busca1( ), para cada elemento dois testes são Em busca1( ), para cada elemento dois testes são realizados realizados

i <= i <= NelemNelemL[i].chave = x. L[i].chave = x. �� Esse processo pode ser melhorado com o uso do Esse processo pode ser melhorado com o uso do

seguinte artifseguinte artifíício: cio: �� ÉÉ criado um novo registro no final da lista, chamado de criado um novo registro no final da lista, chamado de

sentinela, que contsentinela, que contéém a chave procurada. A busca m a chave procurada. A busca éérealizada sabendorealizada sabendo--se que um registro contendo a se que um registro contendo a chave vai ser encontrado. Ao final verifica se o registro chave vai ser encontrado. Ao final verifica se o registro encontrado encontrado éé o sentinela. Deste modo o teste duplo o sentinela. Deste modo o teste duplo para cada elemento para cada elemento éé evitado. A lista L, neste caso, evitado. A lista L, neste caso, deve poder conter um registro extra. deve poder conter um registro extra.

BuscaBuscaFunctionFunction busca(x)busca(x)

Var i: 1..Max;Var i: 1..Max;BeginBeginL[L[NelemNelem+1].chave := x; {insere elemento sentinela}+1].chave := x; {insere elemento sentinela}i := 1;i := 1;WhileWhile (L[i].chave <> x) do(L[i].chave <> x) do

i := i+1;i := i+1;{checa se encontrado {checa se encontrado éé o sentinela}o sentinela}If (i = If (i = NelemNelem + 1) + 1) ThenThenbusca := 0;busca := 0;

ElseElsebusca := i;busca := i;

End;End;

BuscaBusca2) Listas seq2) Listas seqüüenciais ordenadasenciais ordenadas

No caso de listas ordenadas, deveNo caso de listas ordenadas, deve--se aproveitar o fato de que nem se aproveitar o fato de que nem sempre sempre éé necessnecessáário percorrer a lista toda para concluirmos que rio percorrer a lista toda para concluirmos que elemento não estelemento não estáá na lista. na lista. A versão do algoritmo de busca com sentinela para listas ordenadA versão do algoritmo de busca com sentinela para listas ordenadas as éé: :

FunctionFunction busca_ordbusca_ord(x)(x)Var i: 1..Max;Var i: 1..Max;BeginBeginL[L[NelemNelem+1] .chave := x; {insere elemento sentinela}+1] .chave := x; {insere elemento sentinela}i := 1;i := 1;WhileWhile (L[i].chave < x) do {compara(L[i].chave < x) do {compara--se apenas os menores}se apenas os menores}

i := i+1;i := i+1;If (i = If (i = NelemNelem + 1) + 1) oror i(L[i].chave <> x) i(L[i].chave <> x) ThenThenbusca := 0busca := 0

ElseElsebusca := i;busca := i;

End;End;

BuscaBusca

�� O fato de se utilizar o recurso da sentinela na busca O fato de se utilizar o recurso da sentinela na busca seqseqüüencial, acima, elimina a necessidade de testar, para encial, acima, elimina a necessidade de testar, para cada elemento, se o final da lista cada elemento, se o final da lista éé alcanalcanççado ou não. ado ou não.

�� No caso de listas ordenadas, podeNo caso de listas ordenadas, pode--se apresentar um se apresentar um algoritmo BEM mais eficiente algoritmo BEM mais eficiente -- o qual tira MUITO MAIS o qual tira MUITO MAIS proveito do fato da lista estar ordenada! proveito do fato da lista estar ordenada!

�� O algoritmo de busca binO algoritmo de busca bináária tem como idria tem como idééia bia báásica o sica o fato de que, dada uma posifato de que, dada uma posiçção dentro da lista, o ão dentro da lista, o elemento procurado vai estar ou antes ou depois desta elemento procurado vai estar ou antes ou depois desta posiposiçção, e, portanto, não se precisa procurar dos dois ão, e, portanto, não se precisa procurar dos dois lados. lados.

�� Numa dada lista ordenada: Numa dada lista ordenada: �� ComparaCompara--se o elemento procurado com o registro do meio da se o elemento procurado com o registro do meio da

lista, para saber se o elemento estaria na metade superior ou lista, para saber se o elemento estaria na metade superior ou inferior da lista. Repeteinferior da lista. Repete--se esse processo atse esse processo atéé encontrar o encontrar o elemento ou esgotar a lista. elemento ou esgotar a lista.

Page 3: Aula 2- Lista Estatica Encadeada.pdf-28-02

3

BuscaBuscaFunctionFunction busca_binbusca_bin(x)(x)

Var Var infinf, , supsup, meio: , meio: ííndices;ndices;BeginBegin

infinf := 1;:= 1;supsup := n;:= n;

busca_binbusca_bin := 0;:= 0;WhileWhile infinf <= <= supsup dodo

BeginBeginmeio := [(meio := [(infinf + + supsup) div 2];) div 2];

If L[meio].chave = x If L[meio].chave = x thenthenBeginBegin

busca_binbusca_bin := meio;:= meio;infinf := := supsup + 1;+ 1;

EndEndElseElse

If (L[meio].chave < x) If (L[meio].chave < x) ThenThen

infinf := meio + 1:= meio + 1ElseElse

supsup := meio := meio --1;1;End;End;

End;End;

Lista EstLista Estáática tica EncadeadaEncadeada

Lista EstLista Estáática Encadeadatica Encadeada

�� Brincadeira do PresenteBrincadeira do Presente�� Cartão Cartão --> cama> cama--> gaveta> gaveta-->fogão>fogão-->tapete>tapete-->geladeira>geladeira--

>mesa>mesa-->presente.>presente.

�� DeveDeve--se notar:se notar:�� FazFaz--se necessse necessáário ponto de partidario ponto de partida�� Cada um destes locais que possui uma indicaCada um destes locais que possui uma indicaçção ão

para um prpara um próóximo local ximo local éé composicomposiçção de informaão de informaçção ão (local + pr(local + próóximo)independente, visto que se sua ximo)independente, visto que se sua posiposiçção fosse alterada o encadeamento lão fosse alterada o encadeamento lóógico gico permaneceria intacto.permaneceria intacto.

DefiniDefiniççãoão

�� Lista encadeada se define por um Lista encadeada se define por um conjunto de elementos individualizados conjunto de elementos individualizados em que cada um referencia um outro em que cada um referencia um outro elemento distinto como sucessor.elemento distinto como sucessor.

Lista EstLista Estáática Encadeadatica Encadeada

�� Lista de compras Lista de compras

Lista de Compras

1. Tomate

2. Cebola

3. Carne

4. Farinha

5. Batata

6. Ovos

7. Mamão

Conceito de Individualidade

Lista de Compras

Início: 3

Item prox

1. Tomate 7

2. Cebola Fim

3. Carne 6

4. Farinha 2

5. Batata 1

6. Ovos 5

7. Mamão 4

DeclaraDeclaraççãoão

�� Exemplo da lista de comprasExemplo da lista de comprastipo REG= registrotipo REG= registro

Item: caractere;Item: caractere;ProxProx: inteiro;: inteiro;fim_registrofim_registro

tipo VET = vetor [1..100] de REG;tipo VET = vetor [1..100] de REG;Lista: VET;Lista: VET;Inicio: inteiro;Inicio: inteiro;

Inicio <Inicio <-- 3;3;

Page 4: Aula 2- Lista Estatica Encadeada.pdf-28-02

4

InserInserççãoão

�� No meioNo meio

mamãomel

farinha

mamãomel

farinha

mamãomel

farinha

Primeiro passo: Lista[8].Prox<-Lista[7].Prox;Segundo passo: Lista[7].Prox<-8;

InserInserççãoão

�� No fimNo fim

cebolamel

0

cebolamel

0

cebolamel

0

Primeiro passo: Lista[8].Prox<-Lista[2].Prox;Segundo passo: Lista[2].Prox<-8;

InserInserççãoão

�� No inNo inííciocio

iniciomel

carne

iniciomel

carne

iniciomel

carne

Primeiro passo: Lista[8].Prox<-inicio;Segundo passo: inicio.Prox<-8;

InserInserççãoão

Modulo INSERE(inteiro: Novo, antecessor)Modulo INSERE(inteiro: Novo, antecessor)

Lista[Novo].Lista[Novo].ProxProx<<--Antecessor;Antecessor;

Antecessor<Antecessor<--Novo;Novo;

Fim_ModuloFim_Modulo

RemoRemoççãoão

No meioNo meio

mamão farinha cebola

Primeiro passo: Lista[7].Prox<-Lista[4].Prox;

mamão farinha cebola

RemoRemoççãoão

�� No inNo inííciocio

inicio carne ovos

inicio carne ovos

Primeiro passo: Inicio<-Lista[3].Prox;

Page 5: Aula 2- Lista Estatica Encadeada.pdf-28-02

5

RemoRemoççãoão

�� No fimNo fim

farinha cebola fim

farinha cebola fim

Primeiro passo:Lista[4].Prox<-Lista[2].Prox;

RemoRemoççãoão

Modulo Remove (inteiro: Velho, Antecessor)Modulo Remove (inteiro: Velho, Antecessor)

Antecessor<Antecessor<--Lista[Velho].Lista[Velho].proxprox;;

Fim_Modulo;Fim_Modulo;

Lista EstLista Estáática Encadeadatica Encadeada

�� Os elementos da lista são registros com um Os elementos da lista são registros com um dos componentes destinado a guardar o dos componentes destinado a guardar o endereendereçço do registro sucessor. o do registro sucessor. Ex: L = anta, cabra, macaco, pato, ratoEx: L = anta, cabra, macaco, pato, rato

Cada registro é:

ou

ImplementaImplementaççãoão

�� HHáá duas alternativas para duas alternativas para implementaimplementaçção de ão de

operaoperaççõesões de listas encadeadas: utilizando de listas encadeadas: utilizando arraysarrays ou variou variááveis dinâmicas. veis dinâmicas.

�� Encadeamento em Encadeamento em arraysarrays

Eliminando o elemento "cobra" tem-se:

O registro 2 tornou-se disponível para as próximas inserções...

ImplementaImplementaççãoão

�� ImplementaImplementaçção utilizando ão utilizando arrayarray�� ApApóós sucessivas insers sucessivas inserçções e eliminaões e eliminaçções como descobrir ões como descobrir

quais registros estão disponquais registros estão disponííveisveis? ? JuntJuntáá--los numa lista DISPO. Assim, os registros 6, 7, ... m estariam los numa lista DISPO. Assim, os registros 6, 7, ... m estariam inicialmente na lista DISPO. inicialmente na lista DISPO.

�� Como deverComo deveráá ser Dispo ? Seqser Dispo ? Seqüüencial?encial?Ela deve ser capaz de anexar os registros eliminados da lista Ela deve ser capaz de anexar os registros eliminados da lista principal L. Suponha que queremos inserir algum elemento. principal L. Suponha que queremos inserir algum elemento.

�� Isso implica que : Isso implica que : �� a eliminaa eliminaçção de um elemento da lista principal causa a inserão de um elemento da lista principal causa a inserçção de ão de

um registro na lista Dispo um registro na lista Dispo �� a insera inserçção de um elemento na lista principal causa a utilizaão de um elemento na lista principal causa a utilizaçção de ão de

um dos registros da Dispo um dos registros da Dispo

ImplementaImplementaççãoão

�� No exemplo dado, ao eliminar "cobra" No exemplo dado, ao eliminar "cobra" anexamos esse registro anexamos esse registro àà dispo. dispo.

�� A princA princíípio podemos utilizar qualquer posipio podemos utilizar qualquer posiçção ão (todos são vazios mesmos!!). A posi(todos são vazios mesmos!!). A posiçção mais ão mais conveniente conveniente éé a do primeiro elemento do a do primeiro elemento do Dispo Dispo -- uma vez que requer o acesso a uma vez que requer o acesso a poucos ponteiros. poucos ponteiros.

Page 6: Aula 2- Lista Estatica Encadeada.pdf-28-02

6

ImplementaImplementaççãoão

�� Se a prSe a próóxima operaxima operaçção ão éé a insera inserçção do ão do elemento ovelha temos: elemento ovelha temos:

�� Com vCom váárias inserrias inserçções e eliminaões e eliminaçções, os ões, os registros da lista principal ficariam registros da lista principal ficariam espalhados pelo vetor, intermediados por espalhados pelo vetor, intermediados por registros disponregistros disponííveis. veis.

Vantagens/DesvantagensVantagens/Desvantagens

�� Vantagens:Vantagens:�� não hnão háá movimentos durante insermovimentos durante inserçção e remoão e remoçção de ão de

elementos da lista; apenas ponteiros são alterados.elementos da lista; apenas ponteiros são alterados.

�� Desvantagens:Desvantagens:�� Acesso ao Acesso ao ii--éésimosimo elemento deixa de ser direto;elemento deixa de ser direto;�� Requer acesso aos iRequer acesso aos i--1 elementos anteriores;1 elementos anteriores;�� Ainda exige previsão de espaAinda exige previsão de espaçço; (*)o; (*)�� Requer gerenciamento da lista Dispo (*)Requer gerenciamento da lista Dispo (*)�� Alternativa da ImplementaAlternativa da Implementaçção Dinâmica: elimina ão Dinâmica: elimina

desvantagens (*)desvantagens (*)

Vantagens/DesvantagensVantagens/Desvantagens

�� Quando usar:Quando usar:�� quando for possquando for possíível fazer uma boa previsão vel fazer uma boa previsão

do espado espaçço utilizado (lista principal + Dispo) e o utilizado (lista principal + Dispo) e quando o ganho dos movimentos sobre a quando o ganho dos movimentos sobre a perda do acesso direto a cada elemento for perda do acesso direto a cada elemento for compensador.compensador.

Algoritmos de inserAlgoritmos de inserçção e ão e

eliminaeliminaççãoão�� Os algoritmos requerem a mudanOs algoritmos requerem a mudançça de va de váários rios

ponteiros: do antecessor do registro na lista, do ponteiros: do antecessor do registro na lista, do ponteiro da lista Dispo, e do registro a ser ponteiro da lista Dispo, e do registro a ser inserido/eliminado. inserido/eliminado.

�� Temos Temos ObterNoObterNo(j) e (j) e DevolverNoDevolverNo(j), as quais (j), as quais

permitem obter um registro de permitem obter um registro de ííndice j da ndice j da

Dispo, ou devolver o registro de Dispo, ou devolver o registro de ííndice j, ndice j,

respectivamente. respectivamente.

Algoritmos de inserAlgoritmos de inserçção e ão e

eliminaeliminaççãoão

�� Na inserNa inserçção podemos contar com o registro j ão podemos contar com o registro j como sendo disponcomo sendo disponíível, e na eliminavel, e na eliminaçção ão podemos contar com o registro j como a ser podemos contar com o registro j como a ser deixado dispondeixado disponíível. vel.

�� Para inserir ou eliminar um elemento da lista, Para inserir ou eliminar um elemento da lista, temos que saber do enderetemos que saber do endereçço do predecessor o do predecessor (lembre que a busca (lembre que a busca éé guiada pelo conteguiada pelo conteúúdo do do registro, no caso de listas ordenadas). do registro, no caso de listas ordenadas). �� Este predecessor Este predecessor éé quem contquem contéém o enderem o endereçço o

daquele que serdaquele que seráá o sucessor do elemento o sucessor do elemento inserido/eliminado. inserido/eliminado.

Algoritmos de inserAlgoritmos de inserçção e ão e

eliminaeliminaççãoão�� InserInserççãoão

�� RemoRemoççãoão

Page 7: Aula 2- Lista Estatica Encadeada.pdf-28-02

7

1) Inser1) Inserçção apão apóós o registro de s o registro de endereendereçço k o k

ProcedureProcedure Insere(var L: Lista; k: Insere(var L: Lista; k: enderecoendereco, valor: , valor:

T);T);

Var j: Var j: enderecoendereco;;

BeginBegin

If L.Dispo <> 0 If L.Dispo <> 0 ThenThen {se a Dispo est{se a Dispo estáá

vazia, vazia, naonao pode inserir!}pode inserir!}

Begin Begin

ObterNoObterNo(j); (j);

L.A[j].L.A[j].infoinfo := valor;:= valor;

L.A[j].L.A[j].liglig := L.A[k].:= L.A[k].liglig;;

L.A[k].L.A[k].liglig := j;:= j;

End End

ElseElse {não pode inserir registro} {não pode inserir registro}

......

End;End;

2) Elimina2) Eliminaçção do registro de endereão do registro de endereçço o j precedido por kj precedido por k

Procedure Procedure Remover(varRemover(var L: L: ListaLista; k,j: ; k,j:

enderecoendereco););

BeginBegin

L.A[k].ligL.A[k].lig := := L.A[j].ligL.A[j].lig;;

DevolverNoDevolverNo(j); (j);

End;End;

Casos EspeciaisCasos Especiais

�� Antes do primeiroAntes do primeiroProcedure Procedure Insere_prim(varInsere_prim(var L: L: ListaLista; valor: T);; valor: T);

VarVar j: j: enderecoendereco;;

BeginBegin

If If L.DispoL.Dispo <> 0 Then<> 0 Then

BeginBegin

ObterNoObterNo(j);(j);

L.A[j].L.A[j].infoinfo:= valor;:= valor;

L.A[j].L.A[j].liglig := := L.Prim;L.Prim;

L.L.PrimPrim := j;:= j;

EndEnd

ElseElse

{ não pode inserir } { não pode inserir }

End;End;

OBS: No caso da lista estar vazia, OBS: No caso da lista estar vazia, PrimPrim passar a apontar o passar a apontar o úúnico nico elemento da lista. elemento da lista.

InserInserçção em lista vaziaão em lista vazia

ProcedureProcedure Insere_ListaVaziaInsere_ListaVazia(var L: Lista; valor: (var L: Lista; valor:

T);T);

Var j: Var j: enderecoendereco;;

BeginBegin

If L.Dispo <> 0 If L.Dispo <> 0 ThenThen { lista vazia ou { lista vazia ou primprim = 0 = 0

}}

BeginBegin

Obter_No(j);Obter_No(j);

L.A[j].L.A[j].infoinfo:=valor;:=valor;

L.A[j].L.A[j].liglig:=0; {:=0; {nullnull}}

L.Prim:=j;L.Prim:=j;

End;End;

End;End;

EliminaEliminaçção do primeiro ão do primeiro

elementoelementoProcedureProcedure Remove_Primeiro(var L: Lista);Remove_Primeiro(var L: Lista);Var j: Var j: enderecoendereco;;

BeginBegin

j := j := L.Prim;L.Prim;

L.L.PrimPrim := L.A[:= L.A[L.Prim].lig;L.Prim].lig;

DevolverNoDevolverNo(j); (j);

End;End;

InicializaInicializaççãoão

Inicialmente todas as posiInicialmente todas as posiçções do vetor ões do vetor AA estão disponestão disponííveis, veis, portanto fazem parte de "Dispo". portanto fazem parte de "Dispo".

Procedure Init(L: Procedure Init(L: ListaLista););BeginBegin

L.Dispo:=1; {primeiro elemento} L.Dispo:=1; {primeiro elemento}

L.Prim:=0L.Prim:=0; {lista principal ; {lista principal estestáá vazia}vazia}

For i:=1 to nFor i:=1 to n--1 do1 do

L.A[i].L.A[i].liglig:=i+1;:=i+1;

L.A[n].L.A[n].liglig:=0; {receber 0 :=0; {receber 0 corresponde ao corresponde ao nilnil}}

End;End;

Page 8: Aula 2- Lista Estatica Encadeada.pdf-28-02

8

Obter NoObter No

Obter_No(j):Obter_No(j): obtobtéém um registro de m um registro de ííndice j da Dispo. Dispo ndice j da Dispo. Dispo contcontéém pelo menos m pelo menos nilnil. .

ProcedureProcedure Obter_No(var j: Obter_No(var j: enderecoendereco););

BeginBegin

j:= L.Dispo; { A dispo passa j:= L.Dispo; { A dispo passa a apontar para quem ela apontava }a apontar para quem ela apontava }

L.Dispo:= L.A[L.Dispo].L.Dispo:= L.A[L.Dispo].liglig;;

End;End;

OBS:OBS: A A procedureprocedure Obter_No oferece uma "caixa vazia", Obter_No oferece uma "caixa vazia", devemos portanto, determinar os campos do registrodevemos portanto, determinar os campos do registro. .

Devolver NoDevolver No

Devolver_No(j):Devolver_No(j): devolve um registro de devolve um registro de ííndice j ndice j àà Dispo. Dispo.

ProcedureProcedure Devolver_No(j:Devolver_No(j:enderecoendereco););

BeginBegin

L.A[j].L.A[j].liglig := L.Dispo;:= L.Dispo;

L.Dispo := j;L.Dispo := j;

End;End;

OBS:OBS:

Dispo estDispo estáá vazia quando a lista estvazia quando a lista estáá cheia Dispo estcheia Dispo estáá cheia cheia quando a lista estquando a lista estáá vazia vazia

ExercExercíícioscios

�� Escreva os seguintes algoritmos que Escreva os seguintes algoritmos que implementem Listas Encadeadas implementem Listas Encadeadas EstEstááticas (em ticas (em arrayarray) com ) com sentinelasentinela::�� criacriaçção de lista; ão de lista;

�� busca em lista ordenada e não ordenada;busca em lista ordenada e não ordenada;�� inserinserçção e eliminaão e eliminaçção de elementos.ão de elementos.

ExercExercíícioscios

�� Dada uma lista de nomes em ordem alfabDada uma lista de nomes em ordem alfabéética, tica, isto isto éé, um vetor desordenado de nomes, e cujo , um vetor desordenado de nomes, e cujo encadeamento segue a ordem alfabencadeamento segue a ordem alfabéética, tica, construa um algoritmo que, sem alterar o construa um algoritmo que, sem alterar o encadeamento alfabencadeamento alfabéético, fatico, façça:a:�� A impressão da relaA impressão da relaçção de nomes da lista (em ordem ão de nomes da lista (em ordem

alfabalfabéética;tica;�� A inclusão de um novo nome;A inclusão de um novo nome;�� A localizaA localizaçção e a exclusão de um nome fornecido;ão e a exclusão de um nome fornecido;�� A alteraA alteraçção de um nome fornecido.ão de um nome fornecido.

ExercExercíícioscios

�� Escreva um algoritmo que percorra uma Escreva um algoritmo que percorra uma lista (na qual consta o campo de sexo) lista (na qual consta o campo de sexo) armazenada de forma encadeada armazenada de forma encadeada (est(estáática), e crie duas outras listas tica), e crie duas outras listas (tamb(tambéém estm estááticas). O critticas). O critéério de quebra rio de quebra serseráá o seguinte: em uma ficarão os o seguinte: em uma ficarão os elementos do sexo feminino e na outra os elementos do sexo feminino e na outra os elementos do sexo masculino. elementos do sexo masculino.

�� Material gentilmente emprestado pelo Material gentilmente emprestado pelo professor Edmundo professor Edmundo SpotoSpoto