Alexandre M. Gomes
1. Listas Lineares
1.1. Por que usar listas lineares (ou simplesmente listas)?
No cotidiano lidamos com conjunto de dados que se relacionam entre si de algum modo, de acordo com as
propriedades que esse dados apresentam. Quando criarmos estruturas de dados que representam tais
características no computador devemos fazer de modo que preservemos tais relacionamentos, quando a
solução algorítmica que adotarmos assim o exigir.
Para os problemas necessitam de conhecermos a ordem dos dados, por exemplo a ordem cronológica dos
nascimentos durante um determinado período para levantarmos a função que expressa o fenômeno; ou a
seqüência de chegada de maratonistas ao término de uma corrida ou ainda a prioridade no atendimento de
portadores de senhas de uma fila de clientes; geralmente usamos as listas lineares para implementarmos suas
estruturas de dados.
Sem contar com as estruturas de dados primitivas, as listas lineares são as de manipulação mais simples.
1.2. Conceito
Lista linear é uma estrutura de dados que corresponde a uma seqüência ordenada de elementos de mesmo
tipo. Esses elementos, denominados nós, podem conter, cada um, um dado primitivo ou um dado composto.
Uma lista linear é um conjunto de n 0 nós, X1,X2, ..., Xn, organizados de forma a refletir as posições
relativas dos mesmos: se n 0, então x1 é o primeiro nó. Para 1 k n, o nó Xk é precedido pelo nó
Xk-1 e seguido de Xk+1; e Xn é o último nó. quando n = 0 dizemos que a lista é vazia.
1.3. Operações
Uma lista pressupõe um conjunto de operações que permitem a sua criação e manipulação. As operações
básicas que podemos executar sobre uma lista são, entre outras:
Construção da lista
Percurso por todos os nós.
Busca de um nó para obter e/ou alterar o dado nele contido.
Inserção de um nó.
Remoção de um nó.
Destruição da lista.
1.4. Representações
Podemos representar uma lista de várias formas, porém a duas formas mais utilizadas são:
Representação por contigüidade dos nós
Representação por encadeamento dos nós.
A decisão de optar por qual forma dependerá do número de vezes que se executa determinadas operações
sobre a lista, como as citadas acima. Pois sua arquitetura interna dirá a necessidade de um maior ou menor
esforço computacional para sua execução.
http://www.gomeshp.com
1
Alexandre M. Gomes
1.4.1. Representação por Contigüidade
Essa representação se aproveita da disposição em seqüência da memória do computador, de modo que os nós
da lista sejam armazenados em endereços de memória contíguos ou igualmente espaçados entre si. De modo
que o endereço de um nó pode ser determinado matematicamente.
E E+c E+2c E+3c E+4c E+5c
nó1 nó2 nó3 nó4
Figura 1 – Representação por contigüidade
Normalmente, essa representação lança mão de vetores para sua implementação, o que exigem um maior
esforço computacional para executarmos a operações de inserção e remoção de nós. Além de necessitarmos
de superdimensionar tais vetores a fim de evitarmos a falta de espaço em memória para o crescimento da lista.
1.4.2. Representação por Encadeamento
A representação por encadeamento torna desnecessária a necessidade de estimava, a priori, para o
crescimento da lista pois sua limitação é física, ou seja, depende da quantidade de memória disponível.
Além disso, diminui sensivelmente o esforço computacional das operações de inserção e remoção de nós.
Isso porque nas listas encadeadas, cada nó possui, além do dado que desejamos armazenar, uma indicação do
nó seguinte, caso exista. Assim o endereço de memória não mais é determinado matematicamente, dizemos
então que a contigüidade da lista é lógica.
Na representação por encadeamento, normalmente, utilizamos registros de dados com pelo menos um dos
campos de cada registro usado para indicar o próximo nó da lista.
Nó 1 Nó 2 Nó 3 Nó 4
Figura 2 - Representação por encadeamento
1.4.2.1. Tipos Básicos de Listas Encadeadas
Há muitas formas de implementarmos listas com encadeamento, a escolha dependerá de critérios como a
eficiência desejada do algoritmo, a memória disponível, entre outros. São dois os aspectos que observamos
quando desejamos classificar a lista encadeadas quanto ao tipo:
Abertas ou fechadas;
Simples ou duplamente encadeadas.
Nas listas abertas o último elemento não aponta para nenhum outro determinando o final da lista. Já na lista
fechada o último elemento faz referência ao primeiro elemento, fechando a cadeia de nós.
O outro aspecto usado para tipificar as listas encadeadas é a classificação da mesma em encadeamento duplo
ou simples. Se o nó possui uma referência apenas para o próximo nó, chamamos esse tipo de lista de lista
simplesmente encadeada. Caso haja além de um apontador para o próximo nó, outro campo apontando para o
nó anterior, chamamos esse caso de lista duplamente encadeada.
http://www.gomeshp.com
2
Alexandre M. Gomes
Nó 1 Nó 2 Nó 3 Nó 4
Lista encadeada simples aberta
Nó 1 Nó 2 Nó 3 Nó 4
Lista encadeada simples fechada
Nó 1 Nó 2 Nó 3 Nó 4
Lista duplamente encadeada aberta
Nó 1 Nó 2 Nó 3 Nó 4
Lista duplamente encadeada fechada
Figura 3 - Tipos de lista encadeada
http://www.gomeshp.com
3
Alexandre M. Gomes
Exercícios
1) Responda:
a- O que é uma lista linear?
b- Escreva cinco operações básicas que devem ser executadas sobre uma lista.
2) Associe a coluna da esquerda com a coluna da direita:
Lista linear 1 Cada nó possui uma referência apenas para o
próximo nó
Lista duplamente encadeada 2 Compõe as listas podendo conter, cada um,
um dado primitivo ou um dado composto.
Lista fechada 3 O último elemento não aponta para nenhum
outro determinando o final da lista.
Lista encadeada simples 4 Cada nó possui uma referência para o
próximo nó e para o nó antecessor.
Lista aberta 5 Estrutura de dados que corresponde a uma
seqüência ordenada de elementos de mesmo
tipo.
Nó 6 O último elemento faz referência ao primeiro
elemento, fechando a cadeia de nós.
Representação por contigüidade 7 Destruição e construção da Lista.
Representação por encadeamento 8 Contigüidade lógica. Limitada pelo tamanho
da memória.
Operações Básicas de uma lista 9 Percurso por todos os nós, busca, Inserção e
remoção de um nó.
Uso de vetores para sua implementação.
Posição de seu elementos na memória
disposto lado a lado fisicamente.
Contigüidade física. Remoção de nós exige
maior esforço computacional.
http://www.gomeshp.com
4