Universidade do Estado do Amazonas Escola Superior de Tecnologia - EST Núcleo de Computação Algoritmos e Estruturas de Dados I Listas com implementação dinâmica Prof. Flávio José M. Coelho fcoelho@uea.edu.br
Objetivos Entender o que são... 1. Listas ligadas. 2. Listas simplesmente encadeadas (LSE). 3. Listas duplamente encadeadas (LDE). 4. Entender a implementação de uma LSE. Flávio José M. Coelho (EST/UEA) Algoritmos e Estruturas de Dados I Núcleo de Computação 2 / 60
Listas ligadas Flávio José M. Coelho (EST/UEA) Algoritmos e Estruturas de Dados I Núcleo de Computação 3 / 60
Listas ligadas Flávio José M. Coelho (EST/UEA) Algoritmos e Estruturas de Dados I Núcleo de Computação 4 / 60
Listas ligadas Um nó tem dois campos: o item e um ponteiro para o próximo nó. Flávio José M. Coelho (EST/UEA) Algoritmos e Estruturas de Dados I Núcleo de Computação 5 / 60
Listas ligadas Cada nó é alocado dinamicamente de uma região de memória denominada heap. Flávio José M. Coelho (EST/UEA) Algoritmos e Estruturas de Dados I Núcleo de Computação 6 / 60
Listas ligadas Cada nó liga-se a um próximo nó formando uma lista ligada. Flávio José M. Coelho (EST/UEA) Algoritmos e Estruturas de Dados I Núcleo de Computação 7 / 60
Listas ligadas O ponteiro do último nó é NIL pois não há próximo nó. Flávio José M. Coelho (EST/UEA) Algoritmos e Estruturas de Dados I Núcleo de Computação 8 / 60
Listas ligadas Um ponteiro (prim) aponta para o primeiro nó da lista, e dá acesso ao início da lista. Flávio José M. Coelho (EST/UEA) Algoritmos e Estruturas de Dados I Núcleo de Computação 9 / 60
Listas ligadas Outro ponteiro (ult) aponta para o último nó, e ajuda operações no final da lista. Flávio José M. Coelho (EST/UEA) Algoritmos e Estruturas de Dados I Núcleo de Computação 10 / 60
Listas ligadas A lista é simplesmente encadeada (LSE), se cada nó se liga somente ao próximo nó. Flávio José M. Coelho (EST/UEA) Algoritmos e Estruturas de Dados I Núcleo de Computação 11 / 60
Listas ligadas Em uma LSE somente é possível navegar pelos itens no sentido início-fim da lista. Flávio José M. Coelho (EST/UEA) Algoritmos e Estruturas de Dados I Núcleo de Computação 12 / 60
Listas ligadas A lista é duplamente encadeada (LDE), se cada nó se liga ao próximo e ao nó anterior. Flávio José M. Coelho (EST/UEA) Algoritmos e Estruturas de Dados I Núcleo de Computação 13 / 60
Listas ligadas Uma LDE permite navegação nos sentidos início-fim e fim-início. Flávio José M. Coelho (EST/UEA) Algoritmos e Estruturas de Dados I Núcleo de Computação 14 / 60
TAD Lista ligada Flávio José M. Coelho (EST/UEA) Algoritmos e Estruturas de Dados I Núcleo de Computação 15 / 60
TAD Lista Ligada Flávio José M. Coelho (EST/UEA) Algoritmos e Estruturas de Dados I Núcleo de Computação 16 / 60
TAD Lista Ligada Flávio José M. Coelho (EST/UEA) Algoritmos e Estruturas de Dados I Núcleo de Computação 17 / 60
TAD Lista Ligada Flávio José M. Coelho (EST/UEA) Algoritmos e Estruturas de Dados I Núcleo de Computação 18 / 60
Operações Um nó-cabeça (item vazio) antes do início da lista facilita inserções e remoções. Flávio José M. Coelho (EST/UEA) Algoritmos e Estruturas de Dados I Núcleo de Computação 19 / 60
CRIA(L) 1 L.prim = aloque novo NO 2 L.prim.prox = NIL 3 L.ult = L.prim Flávio José M. Coelho (EST/UEA) Algoritmos e Estruturas de Dados I Núcleo de Computação 20 / 60
CRIA(L) Flávio José M. Coelho (EST/UEA) Algoritmos e Estruturas de Dados I Núcleo de Computação 21 / 60
CRIA(L) (1) L.prim = aloque novo NO Flávio José M. Coelho (EST/UEA) Algoritmos e Estruturas de Dados I Núcleo de Computação 22 / 60
CRIA(L) (2) L.prim.prox = NIL Flávio José M. Coelho (EST/UEA) Algoritmos e Estruturas de Dados I Núcleo de Computação 23 / 60
CRIA(L) (3) L.ult = L.prim Flávio José M. Coelho (EST/UEA) Algoritmos e Estruturas de Dados I Núcleo de Computação 24 / 60
INSERE(L, item) 1 L.ult.prox = aloque novo NO 2 L.ult = L.ult.prox 3 L.ult.prox = NIL 4 L.ult.item = item Flávio José M. Coelho (EST/UEA) Algoritmos e Estruturas de Dados I Núcleo de Computação 25 / 60
INSERE(L, item) Flávio José M. Coelho (EST/UEA) Algoritmos e Estruturas de Dados I Núcleo de Computação 26 / 60
INSERE(L, item) (1) L.ult.prox = aloque novo No. Flávio José M. Coelho (EST/UEA) Algoritmos e Estruturas de Dados I Núcleo de Computação 27 / 60
INSERE(L, item) (2) L.ult = L.ult.prox Flávio José M. Coelho (EST/UEA) Algoritmos e Estruturas de Dados I Núcleo de Computação 28 / 60
INSERE(L, item) (3) L.ult.prox = NIL Flávio José M. Coelho (EST/UEA) Algoritmos e Estruturas de Dados I Núcleo de Computação 29 / 60
INSERE(L, item) (4) L.ult.item = item Flávio José M. Coelho (EST/UEA) Algoritmos e Estruturas de Dados I Núcleo de Computação 30 / 60
INSERE(L, item) Flávio José M. Coelho (EST/UEA) Algoritmos e Estruturas de Dados I Núcleo de Computação 31 / 60
REMOVE(L, r, item) 1 se L == 0 ou r == NIL ou r ==prim 2 impossível remoção 3 senão 4 item = r.item 5 p = PREDECESSOR(L, r) 6 p.prox = r.prox 7 se p.prox == NIL L.ult = p 8 desaloque r Flávio José M. Coelho (EST/UEA) Algoritmos e Estruturas de Dados I Núcleo de Computação 32 / 60
REMOVE(L, r, item) Flávio José M. Coelho (EST/UEA) Algoritmos e Estruturas de Dados I Núcleo de Computação 33 / 60
REMOVE(L, r, item) Parâmetro r aponta para o item a ser removido. Flávio José M. Coelho (EST/UEA) Algoritmos e Estruturas de Dados I Núcleo de Computação 34 / 60
REMOVE(L, r, item) (4) item = r.item Flávio José M. Coelho (EST/UEA) Algoritmos e Estruturas de Dados I Núcleo de Computação 35 / 60
REMOVE(L, r, item) (5) p = PREDECESSOR(L, r) Flávio José M. Coelho (EST/UEA) Algoritmos e Estruturas de Dados I Núcleo de Computação 36 / 60
REMOVE(L, r, item) (6) p.prox = r.prox Flávio José M. Coelho (EST/UEA) Algoritmos e Estruturas de Dados I Núcleo de Computação 37 / 60
REMOVE(L, r, item) (8) desaloque q Flávio José M. Coelho (EST/UEA) Algoritmos e Estruturas de Dados I Núcleo de Computação 38 / 60
REMOVE(L, r, item) (8) desaloque q Flávio José M. Coelho (EST/UEA) Algoritmos e Estruturas de Dados I Núcleo de Computação 39 / 60
REMOVE(L, r, item) Com o término da operação, p e r são destruídos. Flávio José M. Coelho (EST/UEA) Algoritmos e Estruturas de Dados I Núcleo de Computação 40 / 60
REMOVE(L, r, item) Flávio José M. Coelho (EST/UEA) Algoritmos e Estruturas de Dados I Núcleo de Computação 41 / 60
BUSCA(L, k) 1 p = L.prim.prox 2 enquanto p NIL e p.chave k 3 p = p.prox 4 retorne p Flávio José M. Coelho (EST/UEA) Algoritmos e Estruturas de Dados I Núcleo de Computação 42 / 60
BUSCA(L, k) Flávio José M. Coelho (EST/UEA) Algoritmos e Estruturas de Dados I Núcleo de Computação 43 / 60
BUSCA(L, k) (1) p = L.prim.prox Flávio José M. Coelho (EST/UEA) Algoritmos e Estruturas de Dados I Núcleo de Computação 44 / 60
BUSCA(L, k) (2) enquanto p NIL e p.chave k (3) p = p.prox Flávio José M. Coelho (EST/UEA) Algoritmos e Estruturas de Dados I Núcleo de Computação 45 / 60
BUSCA(L, k) (2) enquanto p NIL e p.chave k (3) p = p.prox Flávio José M. Coelho (EST/UEA) Algoritmos e Estruturas de Dados I Núcleo de Computação 46 / 60
BUSCA(L, k) (4) Acha o item: retorne p = a 3 Flávio José M. Coelho (EST/UEA) Algoritmos e Estruturas de Dados I Núcleo de Computação 47 / 60
BUSCA(L, k) (4) Não acha item: retorne p = NIL Flávio José M. Coelho (EST/UEA) Algoritmos e Estruturas de Dados I Núcleo de Computação 48 / 60
MOSTRE(L) 1 p = L.prim.prox 2 enquanto p NIL 3 mostre p.item 4 p = p.prox Flávio José M. Coelho (EST/UEA) Algoritmos e Estruturas de Dados I Núcleo de Computação 49 / 60
MOSTRE(L) Flávio José M. Coelho (EST/UEA) Algoritmos e Estruturas de Dados I Núcleo de Computação 50 / 60
MOSTRE(L) (1) p = L.prim.prox Flávio José M. Coelho (EST/UEA) Algoritmos e Estruturas de Dados I Núcleo de Computação 51 / 60
MOSTRE(L) (2) enquanto p NIL (3) mostre p.item (4) p = p.prox Flávio José M. Coelho (EST/UEA) Algoritmos e Estruturas de Dados I Núcleo de Computação 52 / 60
MOSTRE(L) (2) enquanto p NIL (3) mostre p.item (4) p = p.prox Flávio José M. Coelho (EST/UEA) Algoritmos e Estruturas de Dados I Núcleo de Computação 53 / 60
MOSTRE(L) (2) enquanto p NIL (3) mostre p.item (4) p = p.prox Flávio José M. Coelho (EST/UEA) Algoritmos e Estruturas de Dados I Núcleo de Computação 54 / 60
MOSTRE(L) (2) enquanto p NIL (3) mostre p.item (4) p = p.prox Flávio José M. Coelho (EST/UEA) Algoritmos e Estruturas de Dados I Núcleo de Computação 55 / 60
MOSTRE(L) Flávio José M. Coelho (EST/UEA) Algoritmos e Estruturas de Dados I Núcleo de Computação 56 / 60
Conclusão #1 Lista ligada tem tamanho dinâmico, mas é mais complexa de se implementar do que lista estática. Flávio José M. Coelho (EST/UEA) Algoritmos e Estruturas de Dados I Núcleo de Computação 57 / 60
Conclusão #2 Busca, mostra são O(n). Remoção é O(n), ou O(1) se a lista for LDE. Inserção é O(1). Flávio José M. Coelho (EST/UEA) Algoritmos e Estruturas de Dados I Núcleo de Computação 58 / 60
Referências T. H. Cormen, C.E. Leiserson, R.L. Rivest, C. Stein, Introduction to Algorithms, 3rd edition, MIT Press, 2010 N. Ziviani. Projeto de Algoritmos com Implementação em Pascal C. Cengage Learning, 2012. Flávio José M. Coelho (EST/UEA) Algoritmos e Estruturas de Dados I Núcleo de Computação 59 / 60
Onde obter este material: est.uea.edu.br/fcoelho Flávio José M. Coelho (EST/UEA) Algoritmos e Estruturas de Dados I Núcleo de Computação 60 / 60