Você está na página 1de 43

Estrutura

de Dados: Listas (Pilhas, Filas, Listas Encadeadas)


Centro de Inform-ca Universidade Federal de Pernambuco Sistemas de Informao Vinicius Cardoso Garcia vcg@cin.ufpe.br

2011 Vinicius Cardoso Garcia

Introduo
Um das formas mais usadas para se manter dados agrupados a lista
Lista de compras, itens de estoque, notas de alunos, informaes de funcionrios, etc.

Lista Linear agrupa informaes referentes a um conjunto de elementos que, de alguma forma, se relacionam entre si

Algoritmos e Estrutura de Dados Estrutura de Dados: Listas 2011 Vinicius Cardoso Garcia

Denio de Uma Lista


uma coleo L:[a1, a2, ..., an], n0, cuja propriedade estrutural baseia-se apenas na posio rela-va dos elementos, que so dispostos linearmente.
Se n=0,a lista L vazia. Caso contrrio:
a1 o primeiro elemento de L; an o l-mo elemento de L; ak, 1<k<n, precedido pelo elemento ak-1 e seguido por ak+1 em L
Algoritmos e Estrutura de Dados Estrutura de Dados: Listas 2011 Vinicius Cardoso Garcia

Operao Sobre uma Lista


Operaes comuns
Pesquisa, insero, alterao e remoo de um determinado elemento da lista

Outras operaes:
Determinao do nmero total de elementos da lista; Ordenamento da lista; Unio de duas ou mais listas; Par-cionamento da lista e sub-listas; etc...
Algoritmos e Estrutura de Dados Estrutura de Dados: Listas 2011 Vinicius Cardoso Garcia

Tipos Especiais de Listas


Pilha: lista linear onde todas as inseres e remoes so realizadas em um nico extremo da lista. Conhecidas tambm como listas LIFO (Last-In/First-Out) Fila: lista linear onde todas as inseres so realizadas num determinado extremo da lista e as remoes, no outro extremo. Conhecidas tambm como FIFO (First-In/First-Out)

Algoritmos e Estrutura de Dados Estrutura de Dados: Listas 2011 Vinicius Cardoso Garcia

Tipos Especiais de Listas


Fila Dupla: lista linear onde as inseres e remoes podem ser feitas em qualquer extremo.
Fila Dupla de Entrada Restrita (FDER): insero restrita a um nico extremo. Fila Dupla de Sada Restrita (FDSR): remoo restrita a um nico extremo.

Algoritmos e Estrutura de Dados Estrutura de Dados: Listas 2011 Vinicius Cardoso Garcia

Implementaes das Listas


Quanto a alocao de memria, a implementao de listas lineares pode ser:
Sequencial Est-ca Sequencial Dinmica Sequencial Encadeada Est-ca Encadeada Dinmica Encadeada

Est-ca Dinmica

Algoritmos e Estrutura de Dados Estrutura de Dados: Listas 2011 Vinicius Cardoso Garcia

Alocao EstPca e Dinmica


EstPca: quan-dade total de memria u-lizada pelos dados de um programa previamente conhecida e denida de modo imutvel. Durante toda a execuo a quan-dade de memria u-lizada no varia Dinmica: durante a execuo, a quan-dade de memria u-lizada pelos dados do programa varivel

Algoritmos e Estrutura de Dados Estrutura de Dados: Listas 2011 Vinicius Cardoso Garcia

Alocao Seqencial
Seqencial: elementos da lista so colocados em posies de memria consecuPvas
Pontos Fortes:
Fcil Endereamento Aritm-ca simples (endereos) Fcil insero e supresso de elementos no nal da lista

Pontos Fracos:
Dincil insero e supresso de elementos no meio da lista Dincil movimentao de elementos na lista
Algoritmos e Estrutura de Dados Estrutura de Dados: Listas 2011 Vinicius Cardoso Garcia

Alocao Encadeada
Listas Sequenciais so estruturas de fcil acesso
No entanto, o acesso a memria no -mo Listas muito pequenas sofrem de problemas de re-alocao Listas muito grandes alocam memria desnecessariamente

Listas encadeadas fornecem uma maneira de o-mizar a alocao de memria


Para cada novo elemento alocado um espao em memria
Algoritmos e Estrutura de Dados Estrutura de Dados: Listas 2011 Vinicius Cardoso Garcia

10

Ns de uma Lista
Cada elemento da lista chamado de um n da lista Um n representado por uma estrutura de contm 2 campos:
A informao Um endereo para o prximo elemento da lista

A lista representada como um endereo para o primeiro n


A par-r deste n podemos acessar os demais

Algoritmos e Estrutura de Dados Estrutura de Dados: Listas 2011 Vinicius Cardoso Garcia

11

Lista EstPca Seqencial


Implementada usando um vetor (ou arranjo)
Quan-dade mxima de ns determinada Memria alocada em tempo de compilao Entretanto, os ns podem, ou no, ser ordenados pelos ndices do vetor
Cada um dos ns pode conter em si prprio um ponteiro para o prximo elemento, ex.:
Em C: #define MAX 100 ! struct node {! int info, next; ! struct node Node[MAX];! Em Pyton: Max = 100! Node = (info, next) ! Lista = [] ! for i in range(Max):! Lista += [Nodo]!
Algoritmos e Estrutura de Dados Estrutura de Dados: Listas 2011 Vinicius Cardoso Garcia

12

Listas Simplesmente Encadeadas


Ou Dinmica Encadeada
Implementada usando Objetos (Java, Python) ou Ponteiros (C) Os espaos de memria para os ns so alocados dinamicamente, medida que os novos ns so inseridos na lista E liberados medida que os ns so excludos

Algoritmos e Estrutura de Dados Estrutura de Dados: Listas 2011 Vinicius Cardoso Garcia

13

Listas Simplesmente Encadeadas


Uma LSE pode ser descrita como sendo um conjunto dinmico de ns
Composta por uma estrutura de ns previamente denida
Primeiro

Info 1

Info 2

Info 3

Ns da Lista

Algoritmos e Estrutura de Dados Estrutura de Dados: Listas 2011 Vinicius Cardoso Garcia

14

Listas Encadeadas - Exemplo

Primeiro

19

12

Algoritmos e Estrutura de Dados Estrutura de Dados: Listas 2011 Vinicius Cardoso Garcia

15

Operaes em Listas
Criao Insero Excluso Busca Vericao de Lista Vazia Liberao de Memria

Algoritmos e Estrutura de Dados Estrutura de Dados: Listas 2011 Vinicius Cardoso Garcia

16

Criao da Lista

Primeiro

NULL

Algoritmos e Estrutura de Dados Estrutura de Dados: Listas 2011 Vinicius Cardoso Garcia

17

Criao da Lista
Uma outra abordagem u-lizar 2 endereamentos
Um para o incio e outro para o m da lista

O endereo para o m da lista permite realizar inseres sem que seja necessrio percorrer toda a lista Inicialmente, como a lista est vazia, ambos apontam para NULL
Algoritmos e Estrutura de Dados Estrutura de Dados: Listas 2011 Vinicius Cardoso Garcia

18

Insero na Lista
Existem diversos -pos de insero que podem ser feitas em uma lista
Diferentemente das pilhas e las, os elementos podem ser inseridos em qualquer lugar da lista

Exemplos:
Insero no incio Insero em uma posio n da lista Insero no nal da lista Insero ordenada na lista
Algoritmos e Estrutura de Dados Estrutura de Dados: Listas 2011 Vinicius Cardoso Garcia

19

Insero no incio - Inserindo o elemento 10

Primeiro

NULL

Algoritmos e Estrutura de Dados Estrutura de Dados: Listas 2011 Vinicius Cardoso Garcia

20

Insero no incio - Inserindo o elemento 10

Primeiro

10

NULL

Algoritmos e Estrutura de Dados Estrutura de Dados: Listas 2011 Vinicius Cardoso Garcia

21

Insero no incio - Inserindo o elemento 20

Primeiro

10

NULL

20

Algoritmos e Estrutura de Dados Estrutura de Dados: Listas 2011 Vinicius Cardoso Garcia

22

Insero no incio - Inserindo o elemento 30

30

Primeiro

10

NULL

20

Algoritmos e Estrutura de Dados Estrutura de Dados: Listas 2011 Vinicius Cardoso Garcia

23

Remoo de n - Removendo o elemento 30

30

Primeiro

10

NULL

20

Algoritmos e Estrutura de Dados Estrutura de Dados: Listas 2011 Vinicius Cardoso Garcia

24

Insero no Incio Caso Geral

Lista Primeiro el1 ... eln

novoEl

Algoritmos e Estrutura de Dados Estrutura de Dados: Listas 2011 Vinicius Cardoso Garcia

25

Exerccios
1. Implementar uma lista na linguagem de sua preferncia, com funes para:
Criar uma lista Inserir um elemento no incio da lista Inserir um elemento no m da lista Imprimir os elementos da lista na tela Vericar se a lista vazia Buscar um elemento qualquer na lista Re-rar um elemento qualquer da lista Liberar a memria da lista
Algoritmos e Estrutura de Dados Estrutura de Dados: Listas 2011 Vinicius Cardoso Garcia

26

LISTAS DUPLAMENTE ENCADEADAS


Algoritmos e Estrutura de Dados Estrutura de Dados: Listas 2011 Vinicius Cardoso Garcia

27

Listas Duplamente Encadeadas (LDE)


Listas encadeadas so fceis de serem navegadas do incio para o m No entanto, dincil navegar do nal para o incio da lista As listas duplamente encadeadas facilitam tal navegao
Permite o deslocamento em ambas as direes Um n em uma LDE armazena duas referncias
next, que aponta para o prximo n da lista prev, que aponta para o n anterior
Algoritmos e Estrutura de Dados Estrutura de Dados: Listas 2011 Vinicius Cardoso Garcia

28

Listas Simplesmente Encadeadas

Primeiro

Info 1

Info 2

Info 3

Algoritmos e Estrutura de Dados Estrutura de Dados: Listas 2011 Vinicius Cardoso Garcia

29

Listas Duplamente Encadeadas

Primeiro

Info 1

Info 2

Info 3

Algoritmos e Estrutura de Dados Estrutura de Dados: Listas 2011 Vinicius Cardoso Garcia

30

LDE - Exemplo

Primeiro

19

12

Algoritmos e Estrutura de Dados Estrutura de Dados: Listas 2011 Vinicius Cardoso Garcia

31

SenPnelas da cabea e da cauda


Cabealho (header), antes do incio da lista e nal (trailer) aps a cauda da lista
No armazenam nenhum elemento Header: referncia next vlida e prev nula Trailer: referncia next nula e prev vlida

O objeto LDE dever apenas armazenar referncias para estas duas sen-nelas e um contador (size) para a quan-dade de elementos (sem contar os sen-nelas)

Algoritmos e Estrutura de Dados Estrutura de Dados: Listas 2011 Vinicius Cardoso Garcia

32

Remoo de um nodo na extremidade de uma LDE

Algoritmos e Estrutura de Dados Estrutura de Dados: Listas 2011 Vinicius Cardoso Garcia

33

Insero no incio de uma LDE

Algoritmos e Estrutura de Dados Estrutura de Dados: Listas 2011 Vinicius Cardoso Garcia

34

Insero no meio de uma LDE

Dado um n v de uma LDE (sem ser a cauda), pode-se inserir um novo nodo z imediatamente aps v.

Algoritmos e Estrutura de Dados Estrutura de Dados: Listas 2011 Vinicius Cardoso Garcia

35

Remoo do meio de uma LDE

Algoritmos e Estrutura de Dados Estrutura de Dados: Listas 2011 Vinicius Cardoso Garcia

36

Exerccios
1. Implementar uma lista duplamente encadeada na linguagem de sua preferncia, com funes para:
Criar uma lista Inserir um elemento no incio da lista Inserir um elemento no m da lista Imprimir os elementos da lista na tela Vericar se a lista vazia Buscar um elemento qualquer na lista Re-rar um elemento qualquer da lista Liberar a memria da lista
Algoritmos e Estrutura de Dados Estrutura de Dados: Listas 2011 Vinicius Cardoso Garcia

37

LISTAS ENCADEADAS CIRCULARES


Algoritmos e Estrutura de Dados Estrutura de Dados: Listas 2011 Vinicius Cardoso Garcia

38

Listas Encadeadas Circulares (LEC)


Possui o mesmo -po de ns de uma LES No existe cabea nem cauda, o l-mo n aponta para o primeiro n
No existe n inicial nem nal Por isso precisamos de um cursor
Serve de ponto de par-da (sabemos quando uma volta foi completa)

Se a estrutura no for ordenada, o elemento dever ser inserido sempre no primeiro lugar. Ao remover um elemento, deve-se estar atento para o caso de a lista ter somente um nico elemento, pois a estrutura torna-se- vazia
Algoritmos e Estrutura de Dados Estrutura de Dados: Listas 2011 Vinicius Cardoso Garcia

39

O Jogo Pato, Pato, Ganso

Algoritmos e Estrutura de Dados Estrutura de Dados: Listas 2011 Vinicius Cardoso Garcia

40

O Jogo Pato, Pato, Ganso


As crianas podem representar os nodos O pegador pode ser iden-cado como a pessoa sentada aps o cursor, e pode ser removida da lista para simular a marcha ao redor Avana-se o cursor para cada pato que o pegador iden-ca (deciso aleatria) Uma vez que o ganso iden-cado, pode-se remover este nodo da lista Avana-se o cursor e insere-se o pegador de volta, repe-ndo o processo
Algoritmos e Estrutura de Dados Estrutura de Dados: Listas 2011 Vinicius Cardoso Garcia

41

Sada

Algoritmos e Estrutura de Dados Estrutura de Dados: Listas 2011 Vinicius Cardoso Garcia

42

APvidades Complementares
Implementar, com as mesmas funes bsica:
Lista Encadeada Circular Lista Duplamente Encadeada Circular

Desao: Implementar o jogo Pato, Pato, Ganso em Python Leitura do captulo 10 do livro do Cormen
Algoritmos e Estrutura de Dados Estrutura de Dados: Listas 2011 Vinicius Cardoso Garcia

43