Estruturas lineares

Propaganda
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
Download