Escolar Documentos
Profissional Documentos
Cultura Documentos
RECUPERAÇÃO DA
INFORMAÇÃO
()
(ERI)
SISTEMAS DE INFORMAÇÃO
AULA 03 – Listas Encadeadas
Profa. Dra. Lúcia F. A. Guimarães
Listas Encadeadas
• Vetores:
• Forma de representarmos um grupo de dados.
• Vetores:
• O fato de o vetor ocupar um espaço contíguo na
memória nos permite acessar qualquer um de
seus elementos a partir do ponteiro para o
primeiro elemento.
Listas Encadeadas
• Vetores:
• Considere a declaração:
#define MAX 5;
int vet[MAX];
• Vetores:
• Entretanto, o vetor não é uma estrutura de dados
muito flexível, pois é necessário dimensioná-lo com
um número máximo de elementos.
• Se este número não for suficiente para armazenar a
quantidade de informações necessárias, não existe uma
maneira simples e barata (computacionalmente) para
alterarmos a dimensão do vetor em tempo de execução.
• E se a quantidade for muito inferior à sua dimensão,
estaremos subutilizando o espaço de memória
reservado.
Listas Encadeadas
• Vetores:
• Solução desses problemas:
• Utilizar estruturas de dados que cresçam à medida
que precisarmos armazenar novos elementos (e
diminuam à medida que precisarmos retirar
elementos armazenados anteriormente).
• Tais estruturas são chamadas dinâmicas e
armazenam cada um dos seus elementos usando
alocação dinâmica.
Listas Encadeadas
• Listas Encadeadas
• Estrutura onde para cada novo elemento inserido,
aloca-se um espaço de memória para armazená-lo.
• Listas Encadeadas
• Portanto não há acesso direto aos elementos da
lista.
• Para que seja possível percorrer todos os
elementos da lista, é necessário explicitamente
guardar o encadeamento dos elementos,
• O que é feito armazenando-se, junto com a
informação de cada elemento, um ponteiro para o
próximo elemento da lista
Listas Encadeadas
• Listas Encadeadas
• A estrutura consiste numa sequência encadeada de
elementos, em geral chamados de nós da lista.
• Listas Encadeadas
• Exemplo:
PRIM
1 2 3 //
Listas Encadeadas
• Listas Encadeadas
• Exemplo:
PRIM
1 2 3 //
MEMÓRIA
PRIM
E100
E10 E50
02 ∅
E70
03 ∅
01 ∅
E50
E70
E100
Listas Encadeadas
• Principais Funções :
• Inicialização
• Inserção
• Percorrimento
• Verificação se está vazia
• Busca
• Remoção de um Elemento
• Liberar a Lista
Listas Encadeadas
• Inicialização:
• Cria uma lista vazia, sem nenhum elemento.
/* função de inicialização: MEMÓRIA
retorna uma lista vazia */
Lista* Inicializa (void)
{
return NULL;
}
• Inicialização:
• Cria uma lista vazia, sem nenhum elemento.
/* função de inicialização: MEMÓRIA
retorna uma lista vazia */
Lista* Inicializa (void)
{
return NULL;
}
• Inicialização:
• Cria uma lista vazia, sem nenhum elemento.
/* função de inicialização: MEMÓRIA
retorna uma lista vazia */
Lista* Inicializa (void)
{
return NULL;
}
• Inicialização:
• Cria uma lista vazia, sem nenhum elemento.
/* função de inicialização: MEMÓRIA
retorna uma lista vazia */
Lista* Inicializa (void)
{
return NULL;
}
• Inicialização:
• Cria uma lista vazia, sem nenhum elemento.
/* função de inicialização: MEMÓRIA
retorna uma lista vazia */
Lista* Inicializa (void)
{
return NULL;
}
• Inserção:
• Uma vez criada a lista vazia, é possível a inserção
novos elementos nela.
• Para cada elemento inserido na lista, é necessário
alocar dinamicamente a memória necessária para
armazenar o elemento e encadeá-lo na lista
existente.
• A Lista Encadeada permite a inserção de um elemento
em qualquer posição.
• A função de inserção mais simples insere o novo
elemento no início da lista.
Listas Encadeadas
• Inserção:
• O início da lista deve ter seu valor atualizado, pois
a lista deve passar a ser representada pelo
ponteiro para o novo primeiro elemento.
Listas Encadeadas
• Inserção:
• Por esta razão, a função de inserção recebe como
parâmetros de entrada:
• A lista onde será inserido o novo elemento e
• A informação do novo elemento.
• Inserção- Exemplo:
/* inserção no início: retorna a lista atualizada */
Lista* insere (Lista* recebida, int valor)
{
Lista *novo ;
novo= (Lista*) malloc(sizeof(Lista));
novo->info = valor;
novo->prox = recebida;
return novo;
}
Listas Encadeadas
• Inserção- Exemplo:
/* inserção no início: retorna a lista atualizada */
Lista* insere (Lista* recebida, int valor)
Parâmetros de Entrada:
{ Lista e informação
• Inserção- Exemplo:
/* inserção no início: retorna a lista atualizada */
Lista* insere (Lista* recebida, int valor)
{ Retorna a nova Lista
PRIM
02 E70
E60
E50
E50
E10
04 lixxo
E100
E60
E60
03 ∅
∅
E70
01 E50
E50
E100
E100
PRIM
04 01 02 03 //
Listas Encadeadas