Escolar Documentos
Profissional Documentos
Cultura Documentos
Dados
Aula 3 - Listas
Professor Luiz José Hoffmann Filho
ljhfilho@gmail.com
Introdução
• Um das formas mais usadas para se manter dados agrupados é
a lista
o Lista de compras, itens de estoque, notas de alunos, informações de funcionários, etc.
o Lista Linear agrupa informações referentes a um conjunto de elementos que, de alguma
forma, se relacionam entre si
Definição de uma lista
• É uma coleção L:{a1, a2, …, an} , n >= 0, cuja propriedade
estrutural baseia-se apenas na posição relativa dos elementos,
que são dispostos linearmente.
o Se n= 0, a lista L é vazia.
o Caso contrário:
• a1 é o primeiro elemento de L;
• an é o último elemento de L;
• Ak, 1<k<n, é precedido pelo elemento ak-1 e segundo por ak+1 em L
Operação sobre uma lista
• Operações comuns
o Pesquisa, inserção, alteração e remoção de um determinado elemento da lista
• Outras operações:
o Determinação do número total de elementos da lista;
o Ordenamento da lista;
o União de duas ou mais listas;
o Particionamento de lista e sub-listas;
o Etc…
Tipos especiais de listas
• Pilha: lista linear onde todas as inserções e remoções são
realizadas em um único extremo da lista. Conhecidas também
como listas LIFO (last-in/First-out)
• Fila: lista linear onde todas as inserções são realizadas num
determinado extremo da lista e as remoções, no outro
extremo. Conhecidas também como FIFO (First-In/First-Out)
Tipos especiais de listas
• Fila Dupla: lista linear onde as inserções e remoções podem
ser feitas em qualquer extermo.
o Fila Dupla de Entrada Restrita (FDER): inserção restrita a um único extermo.
o Fila Dupla de Saída Restrita (FDSR): remoção restrita a um único extremo.
Implementações das listas
• Quanto a alocação de memória, a implementação de listas
lineares pode ser:
Sequencial Encadeada
Estática Estática -
Sequencial
Dinâmica - Dinâmica
Encadeada
Alocação Estática e
Dinâmica
• Estática: quantidade total de memória utilizada pelos dados de
um programa é previamente conhecida e definida de modo
imutável. Durante toda a execução a quantidade de memória
utilizada não varia.
• Dinâmica: durante a execução, a quantidade de memória
utilizada pelos dados do programa é variável.
Alocação Sequencial
• Sequencial: elementos da lista são colocados em posições de
memória consecutivas
• Pontos fortes:
o Fácil endereçamento
o Aritmética simples (endereços)
o Fácil inserção e sepressão de elementos no final da lista
• Pontos fracos:
o Dificíl inserção e supressão de elementos no meio da lista
o Dificíl movimentação de elementos na lista
Alocação Encadeada
• Lista sequenciais são estrutura de fácil acesso
o No entanto, o acesso a memória não é ótimo
o Listas muito pequenas sofrem de problemas de re-alocação
o Listas muito grandes alocam memória desnecessarimante
19 12 3
Primeiro
Operações em listas
• Criação
• Inserção
• Exclusão
• Busca
• Verificação de lista vazia
• Liberação de memória
Criação da Lista
Primeiro
NULL
Criação da lista
• Uma outra abordagem é utilizar 2 endereçamentos
o Um para o início e outro para o fim da lista
NULL
• Inserindo o elemento 10
• Inserindo o elemento 20
• Inserindo o elemento 30
Inserção no início –
Inserido o elemento 10
Primeiro
10 NULL
Inserção no início – Caso
Geral
LISTA
newEl
Exercícios
• Implementar uma lista em C, com funções para:
o Criar uma lista
o Inserir um elemento no início da lista
o Inserir um elemento no fim da lista
o Imprimir os elementos da lista na tela
o Verificar se a lista é vazia
o Buscar um elemento qualquer na lista
o Retirar um elemento qualquer da lista
o Liberar a memória da lista
Lista Duplamente
Encadeadas
Listas duplamente
encadeadas (LDE)
• Listas encadeadas são fácies de serem navegadas do início
para o fim
• No entanto, é difícil navegar do final para o início da lista
• As listas duplamente encadeadas facilitam tal navegação
o Permite o deslocameno em ambas as direções
o Um nó em uma LDE armazena duas referências
• Next, que aponta para o próximo nó da lista
• Prev, que aponta para o nó anterior
Lista Simplesmente
Encadeadas
Primeiro
19 12 3
Lista Duplamente
Encadeadas - Exemplo
Primeiro
19 12 3
Sentinelas da cabeça e da
cauda
• Cabeçalho (header), antes do início da lista e final (trailer)
após a cauda da lista
o Não armazenam nenhum elemento
o Header: referência next válida e prev nula
o Trailer: referência next nula e prev válida
Cursor
19 12 3
Exercícios
1. Escreva uma função que copie um vetor para um lista
encadeada.
2. Escreva uma função que copie uma lista encadeada para um
vetor.
3. Escreva uma função que faça uma cópia de uma lista dada.
4. Escreva uma função que concatena duas listas
encadeadas(isto é. “amarra” a segunda no final da primeira).
5. Escrever uma função que conta o número de nos de uma
lista encadeada.
6. Faça todos os exercícios anteriores utilizando uma lista
duplamente encadeada.