Please enable JavaScript.
Coggle requires JavaScript to display documents.
MM9 - Chapter 4 - Coggle Diagram
MM9 - Chapter 4
IMPLEMENTAÇÃO COM LISTAS ENCADEADAS
Cada nó contém
dado
ponteiro para próximo nó
Estrutura geral da lista
Ponteiros importantes
head
tail
current
Encadeamento
elementos não precisam ser contíguos na memória
ligação é feita pelos ponteiros
Inserção
criar novo nó
ajustar ponteiros
Vantagem
não há deslocamento de elementos
inserção pode ser O(1)
Remoção
ajustar ligação entre nós
liberar nó removido
Problema do predecessor
Em lista simplesmente encadeada
não existe ponteiro para nó anterior
voltar é caro
pode exigir percurso desde início
Acesso aos elementos
Diferença importante do array
não há acesso direto
necessário percorrer nós
Complexidade
acesso sequencial O(n)
Uso de nó sentinela
Objetivo
simplificar operações
evitar casos especiais
ARRAY LIST VS LINKED LIST
Acesso
Array
rápido
O(1)
Linked list
sequencial
O(n)
Inserção e remoção
Array
exige deslocamentos
Linked list
exige ajuste de ponteiros
Uso de memória
Array
menor overhead estrutural
pode desperdiçar espaço reservado
Linked list
memória dinâmica
overhead de ponteiros
Localidade de cache
Array
excelente
Linked list
ruim devido à dispersão dos nós
Quando usar cada uma
Array list
acessos frequentes por índice
poucas inserções/remoções
Linked list
muitas inserções/remoções dinâmicas
tamanho variável imprevisível
IMPLEMENTAÇÃO DE LISTAS COM ARRAYS
Estrutura interna
Componentes principais
array de elementos
tamanho máximo
quantidade atual de elementos
posição corrente
Inserção em listas baseadas em array
verificar espaço disponível
deslocar elementos para direita
inserir novo valor
Consequência
inserção pode custar O(n)
Remoção
remover elemento atual
deslocar elementos para esquerda
Consequência
remoção também pode custar O(n)
Acesso aos elementos
Grande vantagem do array
acesso direto por índice
custo O(1)
Crescimento do array
Soluções
realocação
criação de array maior
cópia dos elementos antigos
Vantagens da implementação por array
acesso rápido
boa localidade de memória
menos overhead estrutural
Desvantagens
inserções custosas
remoções custosas
necessidade de tamanho máximo
desperdício de memória possível
Problema: tamanho fixo
LISTAS COMO TAD (LIST ADT)
Conceito central de lista
Lista é uma sequência ordenada de elementos
Cada elemento possui uma posição lógica:
primeiro
segundo
terceiro
Operações fundamentais
Navegação
mover para início
mover para fim
avançar
voltar
mover para posição específica
Manipulação
inserir elemento
remover elemento
substituir elemento atual
acessar elemento atual
Consulta
tamanho da lista
lista vazia?
posição atual
Ideia do “current position”
Muitas implementações mantêm um cursor
O cursor representa a posição corrente
Inserções e remoções geralmente ocorrem relativas ao cursor
Separação entre ADT e implementação
ADT
define comportamento
define operações
Estrutura de dados
define como aquilo será armazenado
array
lista encadeada
lista duplamente encadeada
IMPLEMENTAÇÃO DOS ELEMENTOS DA LISTA
Separação entre estrutura e dados
nó pode armazenar:
diretamente o dado
ponteiro para o dado
Armazenamento direto
Vantagens
simplicidade
menos indireção
Desvantagens
cópias maiores
menos flexibilidade
Armazenamento por ponteiro
Vantagens
compartilhamento
manipulação mais flexível
menor custo de cópia
Desvantagens
gerenciamento de memoria
indireção adicional