Algoritmos e Estruturas de Dados I Aula 13: Listas encadeadas (estruturas lineares) Prof. Jesús P. Mena-Chalco [email protected] 1Q-2017 1 Estruturas (alguns autores usam o termo registro) 2 Linguagem C: Tipos de dados Tipos de dados primários. Tipos de dados derivados. Tipos definidos pelo usuário. (*) Fonte: http://www.studytonight.com/c/datatype-in-c.php 3 Exemplo 4 Exemplo 5 Exemplo 6 Exemplo 7 Ponto 3D 8 Estruturas 9 10 11 Listas encadeadas 13 Lista encadeada? 3 7 -2 6 14 Estação Consolação: “Quatro estações” (1991). Mosaico abstrato feito de pastilhas vitrificadas por Tomie Ohtake 15 Estação Consolação: “Quatro estações” (1991). Mosaico abstrato feito de pastilhas vitrificadas por Tomie Ohtake null 16 Operações em vetores Busca → (dado um elemento) O(n) ou O(lg n) 17 Operações em vetores Busca → (dado um elemento) Remoção → (dado um índice) O(n) ou O(lg n) O(n) 18 Operações em vetores Busca → (dado um elemento) Remoção → (dado um índice) Inserção → (dado um índice e um elemento) O(n) ou O(lg n) O(n) O(n) 19 Listas encadeadas Uma lista encadeada é uma representação de uma sequência de objetos na memória do computador. As células que armazenam elementos consecutivos da sequência não ficam necessariamente em posições consecutivas da memória. 20 Listas encadeadas Uma lista encadeada é uma representação de uma sequência de objetos na memória do computador. As células que armazenam elementos consecutivos da sequência não ficam necessariamente em posições consecutivas da memória. 21 Definição Uma lista encadeada é uma sequência de registros que armazenam células. → Cada célula contém um objeto de determinado tipo. → Cada célula contém o endereço para a célula seguinte. 3 6 7 -2 No caso da última célula, o endereço é NULL 22 Definição Suporemos que os objetos armazenados nas células são do tipo int. A estrutura de células pode ser definida como: 3 7 23 Definição É conveniente tratar as células como um novo tipo de dados, que chamaremos celula: 24 25 Se p é um endereço para uma célula: → como acessar ao conteúdo dessa celula? → como obter o endereço da célula seguinte? p 7 -2 c 26 Listas O endereço de uma lista encadeada é o endereço de sua primeira célula. Se p é o endereço de uma lista, podemos dizer, “p é uma lista”. p 27 Operações em vetores Busca → (dado um elemento) Remoção → (dado um índice) Inserção → (dado um índice e um elemento) O(n) ou O(lg n) O(n) O(n) 28 Operações considerando listas encadeadas Busca → (dado um elemento) Remoção → (dado um ponteiro) Inserção → (dado um ponteiro e um elemento) O(n) O(1) O(1) 29 Listas com cabeça e sem cabeça Uma lista encadeada pode ser vista de 2 maneiras diferentes, dependendo do papel que sua primeira célula desempenha. Lista com cabeça: A primeira célula serve, apenas, para marcar o início da lista (seu conteúdo é irrelevante). Lista sem cabeça: O conteúdo da primeira célula é tão relevante quanto o das demais. 30 Para criar uma lista vazia Lista com cabeça: Lista sem cabeça: 31 Para criar uma lista vazia Lista com cabeça: “Mais fáceis de manipular” Lista sem cabeça: “Mais puras” 32 Inserção de nova célula p p->seg Inserção → O(1) (dado um ponteiro e um elemento) nova->seg nova 33 Inserção de nova célula p p->seg Inserção → O(1) (dado um ponteiro e um elemento) nova->seg nova 34 Exercício 01 Elabore um programa que permita: Criar uma lista ligada, com cabeça, contendo os seguintes elementos Apresente, na tela, o conteúdo de cada celula. 10 20 30 40 null 35 36 Busca em uma lista encadeada lst Busca → (dado um elemento) cabeça x p x O(n) 37 Exercício 02 Elabore uma função que permita fazer a busca de uma celula que contenha um número inteiro x em uma lista com cabeça. Se a célula não existir na lista, devolva NULL. lst cabeça x p x 38 Exercício 02 Elabore uma função que permita fazer a busca de uma celula que contenha um número inteiro x em uma lista com cabeça. Se a célula não existir na lista, devolva NULL. lst cabeça x p x 39 Exercício 02 Elabore uma função que permita fazer a busca de uma celula que contenha um número inteiro x em uma lista com cabeça. Se a célula não existir na lista, devolva NULL. lst cabeça x p x Veja a versão recursiva No livro do Prof. Feofiloff 40 Remoção em uma lista encadeada lst Remoção → (dado um ponteiro) cabeça p p->seg O(1) 42 Remoção em uma lista encadeada lst Remoção → (dado um ponteiro) cabeça p p->seg O(1) 43 Remoção em uma lista encadeada lst Remoção → (dado um ponteiro) cabeça p p->seg O(1) Veja a versão BuscaERemove No livro do Prof. Feofiloff 44 Outros tipos de listas encadeadas: Lista circular p 7 -3 4 A última célula aponta para a primeira 0 8 13 45 Outros tipos de listas encadeadas: Lista duplamente encadeada q p 7 9 -2 Null 75 Null Cada célula contém o endereço da célula anterior e o da seguinte 46