Estruturas de dados ligadas

Propaganda
Profa. Dra. Laura Rodríguez
E-mail: [email protected]
Universidade da Madeira
1.
2.
3.
4.
5.
6.
7.
8.
Introdução
Listas
Listas ligadas simples
Operações dentro das listas
Listas Circulares
Listas Duplamente Ligadas
Pilhas
Filas
Profa. Dra. Laura Rodríguez
Estruturas de dados e algoritmos
2
1
Um Tipo Abstrato de Dados (TAD) é um
modelo matemático de um conjunto de
dados
Basicamente, a definição de um TAD
inclui:
o tipo dos dados
as operações que agem sobre esses
dados
* Hermes Senger, Algoritmos e Estruturas de dados 2003
Profa. Dra. Laura Rodríguez
Estruturas de dados e algoritmos
3
A definição de um TAD não inclui:
detalhes sobre o formato de
armazenamento dos dados
detalhes de implementação das
operações
A definição de um TAD indica o quê faz
cada operação, e não como
Profa. Dra. Laura Rodríguez
Estruturas de dados e algoritmos
4
2
Estruturas de dados incluem detalhes
de implementação
TADs são materializados através de
estruturas de dados
Profa. Dra. Laura Rodríguez
Estruturas de dados e algoritmos
5
Vantagens:
Acesso muito rápido através do índice de cada elemento.
Permitem implementar facilmente a pesquisa binária.
Desvantagens:
Tamanho máximo fixo, o que implica que mesmo quando
vazias ocupam um grande espaço na memória. Os
elementos da tabela têm de estar contíguos na memória.
As inserções ou remoções de novos valores no meio de
uma tabela ordenada implicam normalmente a
movimentação de grande número dos seus elementos.
Se o tamanho da tabela aumenta frequentemente então é
necessário redimensionar a sua capacidade. Isto implica
uma nova alocação de memória e uma cópia de dados de
um lado para o outro.
Profa. Dra. Laura Rodríguez
Estruturas de dados e algoritmos
6
3
1. Introdução
2. Listas
3.
4.
5.
6.
7.
8.
Listas ligadas simples
Operações dentro das listas
Listas Circulares
Listas Duplamente Ligadas
Pilhas
Filas
Profa. Dra. Laura Rodríguez
Estruturas de dados e algoritmos
7
Uma lista é uma sequência a1,
a2,..., an (n ≥0) de elementos,
todos de um mesmo tipo
n é o comprimento da lista
Dado um elemento ai ,
dizemos que ai-1 seu
antecessor (0<i n)
Dado um elemento ai ,
dizemos que ai+1 seu
sucessor (0 i <n)
Profa. Dra. Laura Rodríguez
Estruturas de dados e algoritmos
8
4
iniciar (): inicia a estrutura de dados
incluirFim (X): acrescenta um objeto X ao fim
da lista
excluirFim (X): retira e retorna o último
elemento da lista
isEmpty(): retorna um valor booleano,
indicando que a lista est vazia
exibir(): exibe todos os elementos da lista
Profa. Dra. Laura Rodríguez
Estruturas de dados e algoritmos
9
!
Uma forma simples de
implementar o TAD Lista é
usar um vetor
Elementos são inseridos da
esquerda para direita
A variável quant controla a
quantidade de elementos no
vetor (último é quant - 1)
←
←
−
←
"
Profa. Dra. Laura Rodríguez
Estruturas de dados e algoritmos
10
5
##
!
"
#$
$%
&'
$ (
&
) $ (
&
+) % &'
)'
* )'
,
Estruturas de dados e algoritmos
Profa. Dra. Laura Rodríguez
11
$
$ (
&#$
--
#$
&
'
)'
$
(. / 001
!#$
"-)
22
$ 03/+001
,
,
Profa. Dra. Laura Rodríguez
Estruturas de dados e algoritmos
12
6
%
!
Repare que X deve
ser passado por
referencia
) $ (
& +
$
&
* )'
&''
(. / 001
)#$
$
!#$
"
44
03/+001
,
,
Estruturas de dados e algoritmos
Profa. Dra. Laura Rodríguez
%
&#$
$
+
5- '
$
13
&'
$
,
Profa. Dra. Laura Rodríguez
Estruturas de dados e algoritmos
14
7
&'&
1.
Implemente as seguintes operações:
inserirPosicao (X, p): acrescenta um novo
valor X na posi ão p da lista
Obs.: cuidado para não sobrepor ou perder
valores existentes na lista
lerPosicao (X, p): retorna (na vari vel X) o
valor que ocupa a posi ão p da lista
removerPosicao (X, p): remove e retorna o
valor que ocupa a posi ão p da lista
Obs.: ao final desta opera ão, quant deve ter
sido decrementado, e o valor retirado não deve
estar mais poresente na lista
Profa. Dra. Laura Rodríguez
Estruturas de dados e algoritmos
15
OTAD Lista modela uma seqüência de
objetos arbitrários estocados em certas
posições
Permite remover e insertar nós dentro
da lista
Métodos de consulta:
isFirst(p), isLast(p)
Profa. Dra. Laura Rodríguez
Estruturas de dados e algoritmos
16
8
Métodos de acesso:
first(), last()
before(p), after(p)
Métodos de atualização:
replaceElement(p, o),
insertBefore(p, o), insertAfter(p, o),
insertFirst(o), insertLast(o)
remove(p)
Profa. Dra. Laura Rodríguez
Estruturas de dados e algoritmos
17
&'&
2.
O que aconteceria se o vetor todo fosse
preenchido, e alguém solicitasse uma nova
inclusão? Você vê algum modo de resolver
isso?
Dica: tente implementar um vetor que “cresce”,
dobrando o seu tamanho toda vez que isso
acontecer.
Profa. Dra. Laura Rodríguez
Estruturas de dados e algoritmos
18
9
1. Introdução
2. Listas
3. Listas ligadas simples
4.
5.
6.
7.
8.
Operações dentro das listas
Listas Circulares
Listas Duplamente Ligadas
Pilhas
Filas
Profa. Dra. Laura Rodríguez
Estruturas de dados e algoritmos
19
(
Foram pensadas para resolver alguns dos problemas
resultantes da utilização de tabelas no
armazenamento de dados do mesmo tipo.
As listas ligadas são constituídas por vários «nós»
que armazenam os dados pretendidos. Cada nó
armazena o tipo de dados da lista e um ponteiro para
o próximo nó.
Profa. Dra. Laura Rodríguez
Estruturas de dados e algoritmos
20
10
(
A lista pode crescer dinamicamente para o tamanho
que se pretender (o limite é apenas determinado pela
memória disponível). As inserções e remoções não
implicam o deslocamento dos outros elementos.
Cada elemento da lista (cada nó) referencia o
próximo e é alocado dinamicamente apenas quando
é necessário, o que implica que é apenas reservado
espaço para os dados.
Para referenciar o primeiro elemento da lista utilizase um ponteiro que se designa por cabeça da lista.
Profa. Dra. Laura Rodríguez
Estruturas de dados e algoritmos
21
)
Uma lista ligada simples é
uma estrutura de dados
composta por nós
Cada nó contém
um elemento
ponteiro para próximo
nó
∅
Cabeça da
lista
NULL
Profa. Dra. Laura Rodríguez
Estruturas de dados e algoritmos
22
11
&
*+
44444 6
%7
44444 6
89
$%
89
:
$
$
89
)
,
Profa. Dra. Laura Rodríguez
Estruturas de dados e algoritmos
23
$
template <class T>
class CListaLigada {
CNoLista<T> *Cabeca; // Ponteiro para o primeiro elemento
public:
CListaLigada(void);
~CListaLigada(void);
void InsereItem(const T Item);
void ApagaItem(const T Item);
bool ProcuraItem(const T Item);
void EscreveLista(void);
…
};
Profa. Dra. Laura Rodríguez
Estruturas de dados e algoritmos
24
12
$
Construtor:
template <class T>
CLista<T>::CLista(){
Cabeca=NULL;
}
Profa. Dra. Laura Rodríguez
Estruturas de dados e algoritmos
25
$
Destrutor:
template <class T>
CLista<T>::~CLista(){
CNoLista<T> *Actual,*Proximo;
if(Cabeca!=NULL){
Actual=Cabeca;
while(Actual!=NULL){
Proximo=Actual->Proximo;
delete
Actual;
Actual=Proximo;
}
Cabeca=NULL;
}
}
Profa. Dra. Laura Rodríguez
Estruturas de dados e algoritmos
26
13
1.
2.
3.
Introdução
Listas
Listas ligadas simples
4. Operações dentro das listas
5.
6.
7.
8.
Listas Circulares
Listas Duplamente Ligadas
Pilhas
Filas
Profa. Dra. Laura Rodríguez
Estruturas de dados e algoritmos
27
*+
Exemplo da inserção:
NULL
Os restantes elementos não foram deslocados o que
implica que a inserção de um novo elemento numa
lista é mais rápido do que a mesma operação numa
tabela.
* Paulo Peixoto, Estruturas de dados e Algoritmos, 2004
Profa. Dra. Laura Rodríguez
Estruturas de dados e algoritmos
28
14
'&
1. Aloque um novo nó
2. Insira o elemento
3. Guarde o endereço do
antigo primeiro
4. Atualize o ponteiro do
primeiro
Profa. Dra. Laura Rodríguez
Estruturas de dados e algoritmos
29
,
1. Criar o novo nó
2. Guardar os dados no novo nó
3. Se a lista estiver vazia
Colocar a cabeça da lista a
apontar para o novo nó
Caso contrário
Percorrer a lista até atingir o
último nó.
Faça o novo nó apontar para
NULO
Faça o ex-último nó apontar
para o novo
4. Fim
Profa. Dra. Laura Rodríguez
Estruturas de dados e algoritmos
30
15
-.
Profa. Dra. Laura Rodríguez
Estruturas de dados e algoritmos
31
!
Profa. Dra. Laura Rodríguez
Estruturas de dados e algoritmos
32
16
-.
Profa. Dra. Laura Rodríguez
&
Estruturas de dados e algoritmos
33
/
Actual=Cabeca;
while(Actual->Proximo!=NULL)
Actual=Actual->Proximo;
Profa. Dra. Laura Rodríguez
Estruturas de dados e algoritmos
34
17
!
Percorrer toda a lista, escrevendo todos os
seus elementos (travessia):
while(Actual!=NULL){
cout << Actual->Dados << ", ";
Actual=Actual->Proximo;
}
Profa. Dra. Laura Rodríguez
-.
Estruturas de dados e algoritmos
& !
35
01
template <class T> void CLista<T>::EscreveLista(void) {
CNoLista<T> *Actual=Cabeca;
if(Cabeca==NULL)
cout << "Lista Vazia..." << endl;
else {
while(Actual!=NULL){
cout << Actual->Dados << ", ";
Actual=Actual->Proximo;
}
cout << "FIM" << endl;
}
}
Profa. Dra. Laura Rodríguez
Estruturas de dados e algoritmos
36
18
2 &
Percorrer toda a lista à procura de um determinado
elemento:
while(Actual!=NULL){
if(Actual->Dados==Item)
return(true);
Actual=Actual->Proximo;
}
Profa. Dra. Laura Rodríguez
-.
Estruturas de dados e algoritmos
2 &
37
01
template <class T> bool CLista<T>::ProcuraItem(T Item) {
CNoLista<T> *Actual=Cabeca;
if(Cabeca==NULL)
return(false);
else{
while(Actual!=NULL) {
if(Actual->Dados==Item)
return(true);
Actual=Actual->Proximo;
}
return(false);
}
}
Profa. Dra. Laura Rodríguez
Estruturas de dados e algoritmos
38
19
%
!
1. Guarde o endereço do
primeiro em pt_aux
2. Atualize o endereço
do primeiro
3. Remova o primeiro nó
$)
∅
$)
∅
∅
Profa. Dra. Laura Rodríguez
%
Estruturas de dados e algoritmos
!
39
3
Remover o último
elemento de uma lista
ligada simples não é
uma operação
eficiente!!!
Não existe algoritmo
de tempo constante
para atualizar
ponteiro de fim para
apontar para o
antecessor
É preciso usar um
loop …
Profa. Dra. Laura Rodríguez
Estruturas de dados e algoritmos
40
20
Dado um determinado elemento pertencente à lista,
eliminá-lo desta
Profa. Dra. Laura Rodríguez
Estruturas de dados e algoritmos
-.
Profa. Dra. Laura Rodríguez
41
01
Estruturas de dados e algoritmos
42
21
&
Profa. Dra. Laura Rodríguez
-.
Profa. Dra. Laura Rodríguez
Estruturas de dados e algoritmos
43
01 ! 4
Estruturas de dados e algoritmos
44
22
1.
2.
3.
4.
Introdução
Listas
Listas ligadas simples
Operações dentro das listas
5. Listas Circulares
6. Listas Duplamente Ligadas
7. Pilhas
8. Filas
Profa. Dra. Laura Rodríguez
Estruturas de dados e algoritmos
45
Estruturas de dados e algoritmos
46
&
Profa. Dra. Laura Rodríguez
23
&
Método EscreveLista():
template <class T> void CLista<T>::EscreveLista(void){
CNoLista<T> *Actual=Cabeca;
if(Cabeca==NULL)
cout << "Lista Vazia..." << endl;
else{
do{
cout << Actual->Dados << ", ";
Actual=Actual->Proximo;
} while(Actual!=Cabeca)
cout << "FIM" << endl;
}
}
Actual
Profa. Dra. Laura Rodríguez
1.
2.
3.
4.
5.
Estruturas de dados e algoritmos
47
Introdução
Listas
Listas ligadas simples
Operações dentro das listas
Listas Circulares
6. Listas Duplamente Ligadas
7. Pilhas
8. Filas
Profa. Dra. Laura Rodríguez
Estruturas de dados e algoritmos
48
24
5
Cada nó possui um ponteiro para o seu
sucessor e para seu antecessor
Pode ser percorrida nos dois sentidos
∅
∅
;
/
Estruturas de dados e algoritmos
Profa. Dra. Laura Rodríguez
&
6
49
&
Pode ser interessante implementar um nó
especial, com informações como inicio, fim, e
quantidade de elementos
∅
∅
Profa. Dra. Laura Rodríguez
Estruturas de dados e algoritmos
50
25
6
6$
8
8
8
$%
8
:
<: $
:
:$
#$
$%
,
&'
$ =
) $ =
) % &'
+
&'
%
&
&
)'
* )'
,
Profa. Dra. Laura Rodríguez
Estruturas de dados e algoritmos
51
6
-.
017
template <class T> void CLista2<T>:: InsereItem(T Item) {
No<T> *Novo=new No<T>;
No<T> *Actual;
Novo->Dados=Item; Novo->Proximo=NULL;
Novo->Anterior=NULL;
if(Cabeca==NULL){
Cabeca=Novo;
} else {
Actual=Cabeca;
while(Actual->Proximo!=NULL)
Actual=Actual->Proximo;
Actual->Proximo=Novo;
Novo->Anterior=Actual;
}
}
Profa. Dra. Laura Rodríguez
Estruturas de dados e algoritmos
52
26
6
-.
017
if(Cabeca==NULL) {
Cabeca=Novo;
} else {
Actual=Cabeca;
while(Actual->Proximo!=NULL)
Actual=Actual->Proximo;
Actual->Proximo=Novo;
Novo->Anterior=Actual;
}
Profa. Dra. Laura Rodríguez
Estruturas de dados e algoritmos
53
&'&
Implemente as funções básicas de
manipulação de listas duplamente
encadeadas, que constam na declaração
da classe ListaDup
2. Proponha e implemente outras operações
sobre listas duplamente encadeadas
1.
Profa. Dra. Laura Rodríguez
Estruturas de dados e algoritmos
54
27
Download