Upload
anonimo98
View
45
Download
10
Embed Size (px)
Citation preview
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;
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.
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;
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;
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.
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
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;
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