Beruflich Dokumente
Kultur Dokumente
Estruturas homogneas
vetores (tipos bsicos repetidos)
matrizes
Listas
Pilhas e filas
Listas
Uma lista um conjunto de dados ordenados e de nmero varivel de elementos.
H 2 tipos de listas:
o Lista seqencial
o Lista encadeada
Lista seqencial
Uma lista sequencial um conjunto de n ns (n 0; X1, X2,..., Xn) com as seguintes propriedades:
o Se n > 0, ento X1 o primeiro n da lista e Xn o ltimo;
o Para 1 < k < n, Xk precedido por Xk-1 e sucedido por Xk+1 ;
o Se n = 0, ento a lista vazia.
Representao por contiguidade
Uma lista sequencial aproveita a sequencialidade da memria.
Uma lista L (com n ns e todos os ns de mesmo tamanho) ocupa um espao consecutivo na memria equivalente a n*tamanho do
n.
1 2 3 4 ... n ... ... m
L(n)=
Operaes
o Acesso a um determinado elemento.
o Insero de um novo elemento.
o Remoo de um elemento.
o Concatenao de duas ou mais listas lineares.
o Separao de uma lista em duas ou mais listas.
o Ordenao.
o Contagem de elementos.
Listas encadeadas
As listas encadeadas permitem a utilizao de estruturas flexveis em relao sua quantidade de elementos, tendo em vista sua
caracterstica dinmica.
Cada elemento um n composto por uma parte que armazena dados e outra que armazena campos de ligao com outros ns.
O campo de ligao dos ns contm o endereo de memria onde o prximo n est armazenado.
A passagem de um n para outro da estrutura encadeada realizada atravs dos endereos de outros ns.
Os ns podem estar em qualquer lugar na memria.
As estruturas encadeadas podem ser implementadas de diferentes modos, no entanto, a implementao mais flexvel por meio de
ponteiros.
As listas encadeadas permitem fcil insero e remoo de elementos sem um impacto global na estrutura.
Uma desvantagem da lista encadeada o acesso sequencial.
Para acessar um n no meio da lista, todos os ns anteriores (ou posteriores) devem ser visitados.
Outra desvantagem a necessidade de armazenar informaes adicionais, no caso, os ponteiros para outros ns.
A lista encadeada vantajosa quando h elementos que apresentam prioridade de acesso.
Se um n tem um vnculo somente para o seu sucessor na seqncia, a lista simplesmente encadeada.
Os ns so formados por um registro que possui pelo menos 2 campos, a informao e o endereo de memria onde est armazenado
o prximo elemento da lista.
O n pode ser declarado por meio da seguinte estrutura:
struct node
{
int info;
struct node *proximo;
}
Para criar uma lista encadeada deve-se manter uma varivel armazenando sempre o endereo do primeiro elemento da lista.
aloca(primeiro)
se (primeiro) <> nulo
primeirodados = 10
primeiro proximo=nulo
Generalizando:
aloca(p)
se (p<>nulo)
pdados = valor
pproximo=nulo
se (topo==nulo)
(se a lista estiver vazia)
topo =p
seno
(a lista contm ns)
fimproximo = NULL;
fim=p
Operaes
o Insero de um n no incio da lista.
o Insero de um n no fim da lista.
o Insero de um n antes de um n endereado por k.
o Remoo de um n do incio da lista.
o Remoo de um n do fim da lista.
o Remoo de um n antes de um n endereado por k.
o Remoo de um n com um valor determinado.
o Busca.
Insero de um novo elemento no incio da lista.
o A adio de um n no incio de uma lista realizada em 4 etapas.
1. Um n vazio criado.
2. O membro info do n inicializado com um valor particular.
3. Como o n includo no incio da lista, o membro prximo se torna
um ponteiro para o atual primeiro n da lista.
4. O novo n precede todos os ns da lista de forma que o endereo do
primeiro n deve ser atualizado.
void novodado( )
{
node *novo = new node;
cin >> novo->info;
}
Remoo
o Uma operao de remoo consiste em remover um n da lista e retornar o valor armazenado neste n.
o A operao de remoo permite liberar o espao em memria referente ao n especificado.
o H dois casos especiais a serem tratados:
Remoo de um n de uma lista vazia
Remoo de um n de uma lista com somente um n
Para facilitar a gerncia de informaes de incio e fim da lista pode-se reunir as referncias em uma nica estrutura chamada
descritor, lder ou header da lista.
O acesso aos elementos da lista sempre realizado por meio do header.
O header pode conter informaes como: incio e fim da lista, quantidade de ns da lista e outras informaes que se deseje.
Nas listas duplamente encadeadas, os ns contm dois ponteiros um para o sucessor e outro para o predecessor.
p->prev = nulo
topo = p
se (fim == nulo)
fim=topo
Listas circulares
Em uma lista circular os ns formam um anel.
Um exemplo da utilizao das listas circulares quando diversos processos esto usando os mesmos recursos simultaneamente.
Deve-se assegurar que os processos sigam uma ordem de utilizao do recurso.
Colocam-se os recursos em uma lista circular acessveis atravs do ponteiro corrente.
Depois que o processo ativado o ponteiro se move para o prximo n para ativar o processo seguinte.
Na implementao de uma lista simplesmente encadeada circular usa-se apenas um ponteiro permanente.
Lista circular simplesmente encadeada
Remoo do n do corrente
se (corrente <> nulo){
aux = corrente
se (aux->prox)<> corrente{
enquanto (aux->prox <> corrente) aux = aux->prox
aux ->prox = corrente->prox
valor = corrente->dados
libera(corrente)
corrente = aux->prox
status=verdadeiro
retorna valor
}
seno{
valor = corrente->dados
libera(corrente)
corrente = nul
status=verdadeiro
retorna valor
}
seno
status=falso
}
Listas auto-organizadas
As listas encadeadas exigem a busca seqencial para localizar um elemento ou descobrir que ele no est na lista.
Pode-se melhorar a eficincia da busca organizando a lista dinamicamente.
Existem diferentes mtodos de organizao de listas.
1. Mtodo de mover para frente: O elemento localizado deve ser colocado no incio da lista.
2.
Mtodo da transposio: O elemento localizado deve ser trocado com seu predecessor, exceto se ele estiver no topo da lista.
3.
Mtodo da contagem: A lista deve ser ordenada pelo nmero de vezes que os elementos so acessados.
4.
Os trs primeiros mtodos permitem colocar os elementos mais provveis de serem acessados no incio da lista.
O mtodo da ordenao tem a vantagem na busca de informao, sobretudo se a informao no est na lista pois a busca pode
terminar sem pesquisar toda a lista.
Exerccios
Criar
Criarum
umprograma
programapara
paramanipular
manipularuma
uma lista
lista simplesmente
duplamente encadeada
encadeada circular.
o
O
programa
dever
apresentar
um
menu
com
as seguintes opes:
O programa dever criar um menu com as seguintes
opes
1. antes
Incluso
nocorrente
incio da lista
1. Incluso
do n
2.
Incluso
no
fim
da lista(o novo n se torna o corrente)
2. Incluso no local do n
corrente
3.
Remoo
do
incio
da lista n se torna o corrente)
3. Excluso do n corrente (o prximo
4. Remoo do fim da lista
4. Excluso do antes do n corrente.
5. Impresso da lista com valor do topo, e todos os ns, contendo o endereo do n, valor, endereo do ponteiro direito e
5. Impresso da lista com valor do topo, e todos os ns, contendo o endereo do n, valor e endereo do ponteiro seguinte.
do ponteiro esquerdo.