Sei sulla pagina 1di 17

Listas

Estruturas Flexveis

Podem crescer ou diminuir de tamanho durante


um programa

Operaes Normais sobre uma Lista

Inserir item

Retirar item

Acessar Item

Definio de Lista

Uma lista linear uma sequncia de zero ou


mais itens (N) de um mesmo tipo X (simples
ou composto).

Listas Encadeadas

Importante a posio relativa dos itens em uma


dimenso
Considerando T >= 1, temos:

X0 o primeiro item da lista;

Xn-1 o ltimo item da lista;

Xi precede Xi+1 para =0,1,,

Existe uma sucesso equivalente;


O elemento Xi dito estar na i-sima posio da lista

Operaes sobre Listas Encadeadas

Para criar um TAD Lista, precisa-se definir um conjunto


de operaes que, normalmente, varivel para cada
aplicao.
Entretanto, h um conjunto bsico de operaes,
comuns maioria das aplicaes:

Criar uma Lista vazia;

Inserir um novo n (item) aps o ltimo item (n);

Inserir um novo n(item) aps o i-simo item;

Retirar o i-simo item;

Localizar o i-simo item;

Fazer uma cpia da Lista;

Concatenar duas listas;

Verificar se uma lista est vazia;

Operaes sobre Listas Encadeadas

Determinar o nmero de ns de uma lista;

Ordenar os itens em ordem crescente ou decrescente


de acordo com algum(ns) de seus componentes ou
campos;

Pesquisar a ocorrncia de um item com um valor


particular em algum componente ou campo;

Imprimir os ns de uma lista, total ou parcialmente;

Representao de Listas Encadeadas

Existem vrias estruturas de dados que


podem ser usadas para representar listas
encadeadas;
As duas mais comuns so:

Arrays (Arranjos);

estruturas auto referenciadas (ou ponteiros para


linguagens como c++ ou c);

Listas Encadeadas com Arranjos

Os itens da lista so armazenados em


posies contguas de memria.
A lista pode ser percorrida em qualquer
direo.
Insero de um novo item:

Aps o ltimo item de forma simples.

Aps o i-simo item (intermedirio): requer um


deslocamento de todos os itens localizados aps
o ponto de insero.

Listas Encadeadas com Arranjos


Retirar um item do incio da lista: requer um
deslocamento de itens para trs, a fim de preencher
o espao deixado vazio.

Os itens so armazenados em um array de


tamanho suficiente para armazenar a lista.

O campo ltimo referencia o ltimo item vlido da


lista.

O primeiro elemento e qualquer intermedirio ter


posio identificada de forma diferente,
dependendo da linguagem de implementao.

A constante MaxTam define o tamanho mximo


permitido para a lista.

Listas Encadeadas com Arranjos

Vantagem:

Economia de memria(os ponteiros so implcitos


nesta estrutura)

Desvantagens:

Custo para inserir ou retirar itens da lista

No pior caso: deslocamento de todos os itens.

Em aplicaes em que no existe previso sobre


o crescimento da lista

Exige a realocao de memria.

Implementando Listas com Arranjos


(genrico)
public class TLista
{
private Object[] lista;
private int prim, ult; // pos
public TLista(int MaxTam) // Construtor de Lista vazia
{
this.lista = new Object[MaxTam];
// this.pos = -1;
this.prim = -1;
this.ult = this.prim;
}

Implementando Listas com Arranjos


(genrico)
public Object pesquisa(Object chave) // buscando por uma chave
especfica
{ if ((this.vazia()) || (chave == null))
return (null);

for (int p = 0; p <= this.ult; p++)


if (this.lista[p].Equals(chave))
return this.lista[p];
return null;

Implementando Listas com Arranjos


(genrico)
public void insere(Object x) // inserir aps o ltimo elemento.
{ if (this.ult == this.lista.Length - 1) // TLista vai da pos 0 at a
pos MaxTam - 1
throw new Exception("Erro : A lista esta cheia");
else
{
if (this.vazia())
{this.ult = 0;
this.prim = 0;
}
else {this.ult = this.ult + 1;}
this.lista[this.ult] = x;
}
}

Implementando Listas com Arranjos


(genrico)
public Object retira (Object chave) // retira um n da lista que
atenda a chave
{ if ( this.vazia() || chave == null )
throw new Exception ( "Erro : A lista esta vazia" ) ;
int p = 0;
while((p <= this.ult) && (!(this.lista[p].Equals(chave))))
p++;
if (p > this.ult )
return null; // Chave no encontrada
Object sai = this.lista[p];
for ( int aux = p; aux < this.ult; aux++)
this.lista[aux] = this.lista[aux + 1];
this.ult = this.ult - 1;
return sai;
}

Implementando Listas com Arranjos


(genrico)
public Object retiraPrimeiro ()
{ if ( this.vazia() )
throw new Exception ( "Erro : A l ista esta vazia" ) ;
Object sai = this.lista[0];
for (int aux = 0; aux < this.ult; aux++)
this.lista[aux] = this.lista[aux + 1];
this.ult = this.ult - 1;
return sai;
}

Implementando Listas com Arranjos


(genrico)
public int TotalNos ()
// retorna o total de ns vlidos na lista
{ int tnos = this.ult + 1;
if ( this.vazia() )
return(0);
return(tnos);
}

Exerccios
1) Implementar classe Lista (de inteiros) com um vetor que:
Construa a lista vazia;
Insira novos elementos na lista, sempre em ordem crescente;
Pesquise um elemento x;
- Imprima todos os elementos da lista, da primeira ltima posio;
Retire um elemento x.
- Implemente, ainda, um programa principal que solicite inserir na lista
os seguintes elementros: 2, 7, 9,11, 15.
depois insira o elemento 8 na lista.

Exerccios
2) Implementar classe Lista (de inteiros) com um vetor que faa as
mesmas coisas do exerccio 1 e com o mesmo programa principal.
OBS: A diferena entre o exerccio 1 e o 2 que no 1, a primeira posio
da lista sempre ser a posio 0(zero) do vetor, enquanto que no
exerccio 2, a posio do primeiro elemento pode variar, segundo o
algoritmo escolha, ao retirar ou ao colocar um elemento na lista,
completar o vazio ou abrir espao movimentando os demais elementos
desde o incio para o espao ou desde o fim para o espao e vice-versa,
conforme a distncia seja menor, respectivamente, para o incio ou para
o fim da lista.

Potrebbero piacerti anche