P. 1
if969 - Estrutura de Dados: Listas

if969 - Estrutura de Dados: Listas

|Views: 2.096|Likes:
if969 - Estrutura de Dados: Listas
if969 - Estrutura de Dados: Listas

More info:

Published by: Vinicius Cardoso Garcia on Sep 19, 2011
Direitos Autorais:Attribution Non-commercial Share Alike

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as PDF or read online from Scribd
See more
See less

07/01/2013

pdf

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

Centro  de  Informá-ca   Universidade  Federal  de  Pernambuco   Sistemas  de  Informação     Vinicius  Cardoso  Garcia   vcg@cin.ufpe.br  

©  2011  –  Vinicius  Cardoso  Garcia  

Introdução  
•  Um  das  formas  mais  usadas  para  se  manter   dados  agrupados  é  a  lista  
–  Lista  de  compras,  itens  de  estoque,  notas  de   alunos,  informações  de  funcionários,  etc.  

•  Lista  Linear  agrupa  informações  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  

2  

Definição  de  Uma  Lista  
•  É  uma  coleção  L:[a1,  a2,  ...,  an],  n≥0,  cuja   propriedade  estrutural  baseia-­‐se  apenas  na   posição  rela-va  dos  elementos,  que  são   dispostos  linearmente.  
–  Se  n=0,a  lista  L  é  vazia.     –  Caso  contrário:  
•  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  

3  

Operação  Sobre  uma  Lista  
•  Operações  comuns  
–  Pesquisa,  inserção,  alteração  e  remoção  de  um   determinado  elemento  da  lista  

•  Outras  operações:  
–  Determinação  do  número  total  de  elementos  da   lista;   –  Ordenamento  da  lista;     –  União  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  

4  

Tipos  Especiais  de  Listas  
•  Pilha:  lista  linear  onde  todas  as  inserções  e   remoções  são  realizadas  em  um  único   extremo  da  lista.  Conhecidas  também  como   listas  LIFO  (Last-­‐In/First-­‐Out)   •  Fila:  lista  linear  onde  todas  as  inserções  são   realizadas  num  determinado  extremo  da  lista   e  as  remoções,  no  outro  extremo.  Conhecidas   também  como  FIFO  (First-­‐In/First-­‐Out)  

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

5  

Tipos  Especiais  de  Listas  
•  Fila  Dupla:  lista  linear  onde  as  inserções  e   remoções  podem  ser  feitas  em  qualquer   extremo.  
–  Fila  Dupla  de  Entrada  Restrita  (FDER):  inserção   restrita  a  um  único  extremo.   –  Fila  Dupla  de  Saída  Restrita  (FDSR):  remoção   restrita  a  um  único  extremo.  

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

6  

Implementações  das  Listas  
•  Quanto  a  alocação  de  memória,  a   implementação  de  listas  lineares  pode  ser:  
Sequencial   Está-ca   Sequencial   Dinâmica   Sequencial   Encadeada   Está-ca   Encadeada   Dinâmica   Encadeada  

Está-ca   Dinâmica  

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

7  

Alocação  EstáPca  e  Dinâmica  
•  EstáPca:  quan-dade  total  de  memória   u-lizada  pelos  dados  de  um  programa  é   previamente  conhecida  e  definida  de  modo   imutável.  Durante  toda  a  execução  a   quan-dade  de  memória  u-lizada  não  varia   •  Dinâmica:  durante  a  execução,  a  quan-dade   de  memória  u-lizada  pelos  dados  do   programa  é  variável  

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

8  

Alocação  Seqüencial  
•  Seqüencial:  elementos  da  lista  são  colocados   em  posições  de  memória  consecuPvas  
–  Pontos  Fortes:    
•  Fácil  Endereçamento     •  Aritmé-ca  simples  (endereços)     •  Fácil  inserção  e  supressão  de  elementos  no  final  da  lista  

–  Pontos  Fracos:    
•  Dincil  inserção  e  supressão  de  elementos  no  meio  da   lista     •  Dincil  movimentação  de  elementos  na  lista  
Algoritmos  e  Estrutura  de  Dados   Estrutura  de  Dados:  Listas   ©  2011  –  Vinicius  Cardoso  Garcia  

9  

Alocação  Encadeada  
•  Listas  Sequenciais  são  estruturas  de  fácil   acesso  
–  No  entanto,  o  acesso  a  memória  não  é  ó-mo   –  Listas  muito  pequenas  sofrem  de  problemas  de   re-­‐alocação   –  Listas  muito  grandes  alocam  memória   desnecessariamente  

•  Listas  encadeadas  fornecem  uma  maneira  de   o-mizar  a  alocação  de  memória  
–  Para  cada  novo  elemento  é  alocado  um  espaço   em  memória  
Algoritmos  e  Estrutura  de  Dados   Estrutura  de  Dados:  Listas   ©  2011  –  Vinicius  Cardoso  Garcia  

10  

Nós  de  uma  Lista  
•  Cada  elemento  da  lista  é  chamado  de  um  nó  da  lista   •  Um  nó  é  representado  por  uma  estrutura  de  contém   2  campos:  
–  A  informação   –  Um  endereço  para  o  próximo  elemento  da  lista  

•  A  lista  é  representada  como  um  endereço  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  EstáPca  Seqüencial  
•  Implementada  usando  um  vetor  (ou  arranjo)  
–  Quan-dade  máxima  de  nós  determinada   –  Memória  alocada  em  tempo  de  compilação   –  Entretanto,  os  nós  podem,  ou  não,  ser  ordenados  pelos   índices  do  vetor  
•  Cada  um  dos  nós  pode  conter  em  si  próprio  um  ponteiro  para  o   próximo  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  Dinâmica  Encadeada  
–  Implementada  usando  Objetos  (Java,  Python)  ou   Ponteiros  (C)   –  Os  espaços  de  memória  para  os  nós  são  alocados   dinamicamente,  à  medida  que  os  novos  nós  são   inseridos  na  lista   –  E  liberados  à  medida  que  os  nós  são  excluídos  

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   dinâmico  de  nós  
–  Composta  por  uma  estrutura  de  nós  previamente  definida  
Primeiro  

Info  1  

Info  2  

Info  3  

Nós  da  Lista  

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

14  

Listas  Encadeadas  -­‐  Exemplo  

Primeiro  

19  

12  

3  

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

15  

Operações  em  Listas  
•  •  •  •  •  •  Criação   Inserção   Exclusão   Busca   Verificação  de  Lista  Vazia   Liberação  de  Memória  

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

16  

Criação  da  Lista  

Primeiro  

NULL  

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

17  

Criação  da  Lista  
•  Uma  outra  abordagem  é  u-lizar  2   endereçamentos  
–  Um  para  o  início  e  outro  para  o  fim  da  lista  

•  O  endereço  para  o  fim  da  lista  permite  realizar   inserções  sem  que  seja  necessário  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  

Inserção  na  Lista  
•  Existem  diversos  -pos  de  inserção  que  podem   ser  feitas  em  uma  lista  
–  Diferentemente  das  pilhas  e  filas,  os  elementos   podem  ser  inseridos  em  qualquer  lugar  da  lista  

•  Exemplos:  
–  Inserção  no  início   –  Inserção  em  uma  posição  n  da  lista   –  Inserção  no  final  da  lista   –  Inserção  ordenada  na  lista  
Algoritmos  e  Estrutura  de  Dados   Estrutura  de  Dados:  Listas   ©  2011  –  Vinicius  Cardoso  Garcia  

19  

Inserção  no  início  -­‐  Inserindo  o  elemento  10  

Primeiro  

NULL  

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

20  

Inserção  no  início  -­‐  Inserindo  o  elemento  10  

Primeiro  

10  

NULL  

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

21  

Inserção  no  início  -­‐  Inserindo  o  elemento  20  

Primeiro  

10  

NULL  

20  

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

22  

Inserção  no  início  -­‐  Inserindo  o  elemento  30  

30  

Primeiro  

10  

NULL  

20  

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

23  

Remoção  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  

Inserção  no  Início  –  Caso  Geral  

Lista   Primeiro   el1   ...   eln  

novoEl  

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

25  

Exercícios  
•  1.  Implementar  uma  lista  na  linguagem  de  sua   preferência,  com  funções  para:  
–  Criar  uma  lista   –  Inserir  um  elemento  no  início  da  lista   –  Inserir  um  elemento  no  fim  da  lista   –  Imprimir  os  elementos  da  lista  na  tela   –  Verificar  se  a  lista  é  vazia   –  Buscar  um  elemento  qualquer  na  lista   –  Re-rar  um  elemento  qualquer  da  lista   –  Liberar  a  memória  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  são  fáceis  de  serem   navegadas  do  início  para  o  fim   •  No  entanto,  é  dincil  navegar  do  final  para  o   início  da  lista   •  As  listas  duplamente  encadeadas  facilitam  tal   navegação  
–  Permite  o  deslocamento  em  ambas  as  direções   –  Um  nó  em  uma  LDE  armazena  duas  referências  
•  next,  que  aponta  para  o  próximo  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  

3  

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

31  

SenPnelas  da  cabeça  e  da  cauda  
•  Cabeçalho  (header),  antes  do  início  da  lista  e  final  (trailer)   após  a  cauda  da  lista  
–  Não  armazenam  nenhum  elemento   –  Header:  referência  next  válida  e  prev  nula   –  Trailer:  referência  next  nula  e  prev  válida  

•  O  objeto  LDE  deverá  apenas  armazenar  referências  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  

Remoção  de  um  nodo  na  extremidade  de  uma  LDE  

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

33  

Inserção  no  início  de  uma  LDE  

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

34  

Inserção  no  meio  de  uma  LDE  

Dado  um  nó  v  de  uma  LDE  (sem  ser  a  cauda),  pode-­‐se  inserir  um  novo  nodo  z   imediatamente  após  v.  

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

35  

Remoção  do  meio  de  uma  LDE  

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

36  

Exercícios  
•  1.  Implementar  uma  lista  duplamente  encadeada   na  linguagem  de  sua  preferência,  com  funções   para:  
–  Criar  uma  lista   –  Inserir  um  elemento  no  início  da  lista   –  Inserir  um  elemento  no  fim  da  lista   –  Imprimir  os  elementos  da  lista  na  tela   –  Verificar  se  a  lista  é  vazia   –  Buscar  um  elemento  qualquer  na  lista   –  Re-rar  um  elemento  qualquer  da  lista   –  Liberar  a  memória  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  nós  de  uma  LES   •  Não  existe  cabeça  nem  cauda,  o  úl-mo  nó  aponta   para  o  primeiro  nó  
–  Não  existe  nó  inicial  nem  final   –  Por  isso  precisamos  de  um  cursor  
•  Serve  de  ponto  de  par-da  (sabemos  quando  uma  volta  foi   completa)  

•  Se  a  estrutura  não  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  crianças  podem  representar  os  nodos   •  O  pegador  pode  ser  iden-ficado  como  a  pessoa   sentada  após  o  cursor,  e  pode  ser  removida  da   lista  para  simular  a  marcha  ao  redor   •  Avança-­‐se  o  cursor  para  cada  “pato”  que  o   pegador  iden-fica  (decisão  aleatória)   •  Uma  vez  que  o  ganso  é  iden-ficado,  pode-­‐se   remover  este  nodo  da  lista   •  Avança-­‐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  

Saída  

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

42  

APvidades  Complementares  
•  Implementar,  com  as  mesmas  funções  básica:  
–  Lista  Encadeada  Circular   –  Lista  Duplamente  Encadeada  Circular  

•  Desafio:  Implementar  o  jogo  Pato,  Pato,   Ganso  em  Python   •  Leitura  do  capítulo  10  do  livro  do  Cormen  
Algoritmos  e  Estrutura  de  Dados   Estrutura  de  Dados:  Listas   ©  2011  –  Vinicius  Cardoso  Garcia  

43  

You're Reading a Free Preview

Descarregar
scribd
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->