51
1 Estruturas de Dados com Jogos Capítulo 7 Generalização de Listas Encadeadas

Estruturas de Dados com Jogosedcomjogos.dc.ufscar.br/slides/pdf/capitulo7.pdf · 2014-04-15 · Empilha (parâmetro por referência P do tipo Pilha, parâmetro X do tipo Char, parâmetro

Embed Size (px)

Citation preview

Page 1: Estruturas de Dados com Jogosedcomjogos.dc.ufscar.br/slides/pdf/capitulo7.pdf · 2014-04-15 · Empilha (parâmetro por referência P do tipo Pilha, parâmetro X do tipo Char, parâmetro

1

Estruturas de Dados com

Jogos

Capítulo 7

Generalização de Listas Encadeadas

Page 2: Estruturas de Dados com Jogosedcomjogos.dc.ufscar.br/slides/pdf/capitulo7.pdf · 2014-04-15 · Empilha (parâmetro por referência P do tipo Pilha, parâmetro X do tipo Char, parâmetro

2

• Estudar técnicas complementares para a implementação de

Listas Encadeadas: Encadeamento Duplo, Nó Header, e

Primitivas de Baixo Nível;

• Ganhar experiência na elaboração de algoritmos sobre Listas

Encadeadas, implementando Pilhas, Filas, Listas Cadastrais e

Filas de Prioridades utilizando combinações das técnicas

complementares estudadas;

• Conhecer conceitos relativos a generalização de Listas

Encadeadas: Listas Multilineares, Listas de Listas, e Listas

Genéricas Quanto ao Tipo do Elemento;

• Entender que é possível conceber sua própria estrutura

encadeada, para atender a necessidades específicas de

determinada aplicação.

Seus Objetivos neste

Capítulo

Page 3: Estruturas de Dados com Jogosedcomjogos.dc.ufscar.br/slides/pdf/capitulo7.pdf · 2014-04-15 · Empilha (parâmetro por referência P do tipo Pilha, parâmetro X do tipo Char, parâmetro

3

Listas Duplamente Encadeadas

Page 4: Estruturas de Dados com Jogosedcomjogos.dc.ufscar.br/slides/pdf/capitulo7.pdf · 2014-04-15 · Empilha (parâmetro por referência P do tipo Pilha, parâmetro X do tipo Char, parâmetro

4

Listas Duplamente Encadeadas

P1→Dir = P3; P3→Esq = P2→Esq;

Page 5: Estruturas de Dados com Jogosedcomjogos.dc.ufscar.br/slides/pdf/capitulo7.pdf · 2014-04-15 · Empilha (parâmetro por referência P do tipo Pilha, parâmetro X do tipo Char, parâmetro

5

Listas Duplamente Encadeadas

Page 6: Estruturas de Dados com Jogosedcomjogos.dc.ufscar.br/slides/pdf/capitulo7.pdf · 2014-04-15 · Empilha (parâmetro por referência P do tipo Pilha, parâmetro X do tipo Char, parâmetro

6

Listas Duplamente Encadeadas

P2 = P1→Esq;

Page 7: Estruturas de Dados com Jogosedcomjogos.dc.ufscar.br/slides/pdf/capitulo7.pdf · 2014-04-15 · Empilha (parâmetro por referência P do tipo Pilha, parâmetro X do tipo Char, parâmetro

7

Listas Duplamente Encadeadas

Page 8: Estruturas de Dados com Jogosedcomjogos.dc.ufscar.br/slides/pdf/capitulo7.pdf · 2014-04-15 · Empilha (parâmetro por referência P do tipo Pilha, parâmetro X do tipo Char, parâmetro

8

Listas Duplamente Encadeadas

P1→Info = P1→Dir→Dir→Info;

Page 9: Estruturas de Dados com Jogosedcomjogos.dc.ufscar.br/slides/pdf/capitulo7.pdf · 2014-04-15 · Empilha (parâmetro por referência P do tipo Pilha, parâmetro X do tipo Char, parâmetro

9

Pilha como uma Lista Circular Duplamente Encadeada

Page 10: Estruturas de Dados com Jogosedcomjogos.dc.ufscar.br/slides/pdf/capitulo7.pdf · 2014-04-15 · Empilha (parâmetro por referência P do tipo Pilha, parâmetro X do tipo Char, parâmetro

10

Operação Empilha

Page 11: Estruturas de Dados com Jogosedcomjogos.dc.ufscar.br/slides/pdf/capitulo7.pdf · 2014-04-15 · Empilha (parâmetro por referência P do tipo Pilha, parâmetro X do tipo Char, parâmetro

11

Operação Empilha

PAux = NewNode;

PAux→Info = X;

Page 12: Estruturas de Dados com Jogosedcomjogos.dc.ufscar.br/slides/pdf/capitulo7.pdf · 2014-04-15 · Empilha (parâmetro por referência P do tipo Pilha, parâmetro X do tipo Char, parâmetro

12

Operação Empilha

PAux = NewNode;

PAux→Info = X;

PAux→Esq = Paux;

Page 13: Estruturas de Dados com Jogosedcomjogos.dc.ufscar.br/slides/pdf/capitulo7.pdf · 2014-04-15 · Empilha (parâmetro por referência P do tipo Pilha, parâmetro X do tipo Char, parâmetro

13

Operação Empilha

PAux = NewNode;

PAux→Info = X;

PAux→Esq = Paux;

PAux→Dir= Paux;

Page 14: Estruturas de Dados com Jogosedcomjogos.dc.ufscar.br/slides/pdf/capitulo7.pdf · 2014-04-15 · Empilha (parâmetro por referência P do tipo Pilha, parâmetro X do tipo Char, parâmetro

14

Operação Empilha

PAux = NewNode;

PAux→Info = X;

PAux→Esq = Paux;

PAux→Dir= Paux;

P.Topo = Paux;

Page 15: Estruturas de Dados com Jogosedcomjogos.dc.ufscar.br/slides/pdf/capitulo7.pdf · 2014-04-15 · Empilha (parâmetro por referência P do tipo Pilha, parâmetro X do tipo Char, parâmetro

15

Empilha

PAux = NewNode; PAux→Info = X;

Page 16: Estruturas de Dados com Jogosedcomjogos.dc.ufscar.br/slides/pdf/capitulo7.pdf · 2014-04-15 · Empilha (parâmetro por referência P do tipo Pilha, parâmetro X do tipo Char, parâmetro

16

Empilha

PAux = NewNode; PAux→Info = X;

PAux→Dir = P.Topo; PAux→Esq = P.Topo→Esq;

Page 17: Estruturas de Dados com Jogosedcomjogos.dc.ufscar.br/slides/pdf/capitulo7.pdf · 2014-04-15 · Empilha (parâmetro por referência P do tipo Pilha, parâmetro X do tipo Char, parâmetro

17

Empilha

Page 18: Estruturas de Dados com Jogosedcomjogos.dc.ufscar.br/slides/pdf/capitulo7.pdf · 2014-04-15 · Empilha (parâmetro por referência P do tipo Pilha, parâmetro X do tipo Char, parâmetro

18

Empilha

P.Topo→Esq→Dir = PAux;

Page 19: Estruturas de Dados com Jogosedcomjogos.dc.ufscar.br/slides/pdf/capitulo7.pdf · 2014-04-15 · Empilha (parâmetro por referência P do tipo Pilha, parâmetro X do tipo Char, parâmetro

19

Empilha

Page 20: Estruturas de Dados com Jogosedcomjogos.dc.ufscar.br/slides/pdf/capitulo7.pdf · 2014-04-15 · Empilha (parâmetro por referência P do tipo Pilha, parâmetro X do tipo Char, parâmetro

20

Empilha

P.Topo→Esq = PAux;

Page 21: Estruturas de Dados com Jogosedcomjogos.dc.ufscar.br/slides/pdf/capitulo7.pdf · 2014-04-15 · Empilha (parâmetro por referência P do tipo Pilha, parâmetro X do tipo Char, parâmetro

21

Empilha

P.Topo = PAux; PAux = Null;

Page 22: Estruturas de Dados com Jogosedcomjogos.dc.ufscar.br/slides/pdf/capitulo7.pdf · 2014-04-15 · Empilha (parâmetro por referência P do tipo Pilha, parâmetro X do tipo Char, parâmetro

22

Empilha

Empilha (parâmetro por referência P do tipo Pilha,

parâmetro X do tipo Char, parâmetro por referência

DeuCerto do tipo Boolean) {

Variável PAux do tipo NodePtr;

Se (Cheia(P)==Verdadeiro) // se P estiver cheia, não empilha

Então DeuCerto = Falso;

Senão { DeuCerto = Verdadeiro;

Se (Vazia(P)==Verdadeiro)

Então {...} /* Caso 1 - Pilha Vazia */

Senão {...} /* Caso 2 - Pilha Não Vazia */

} // senão

} fim Empilha

Page 23: Estruturas de Dados com Jogosedcomjogos.dc.ufscar.br/slides/pdf/capitulo7.pdf · 2014-04-15 · Empilha (parâmetro por referência P do tipo Pilha, parâmetro X do tipo Char, parâmetro

23

Exercícios 7.2 a 7.5 – Pilha (Desempilha, Cria,

Vazia, Cheia), Fila, Lista Cadastral.

Todas as Operações. Identificar Casos. Visualizar Passo a Passo.

Exercícios Lista Duplamente Encadeada

Page 24: Estruturas de Dados com Jogosedcomjogos.dc.ufscar.br/slides/pdf/capitulo7.pdf · 2014-04-15 · Empilha (parâmetro por referência P do tipo Pilha, parâmetro X do tipo Char, parâmetro

24

Listas Com Nó Header

Page 25: Estruturas de Dados com Jogosedcomjogos.dc.ufscar.br/slides/pdf/capitulo7.pdf · 2014-04-15 · Empilha (parâmetro por referência P do tipo Pilha, parâmetro X do tipo Char, parâmetro

25

Busca em uma Lista Não

Ordenada Sem Header

Se (L == Null) // Lista Vazia

Então AchouX = Falso;

Senão { P = L→Dir // P é um ponteiro auxiliar que percorre a Lista

Enquanto (( P→Info != X ) E ( P != L ))

P = P→Dir;

Se (P→Info == X)

Então AchouX = Verdadeiro;

Senão AchouX = Falso;

} // senão

Page 26: Estruturas de Dados com Jogosedcomjogos.dc.ufscar.br/slides/pdf/capitulo7.pdf · 2014-04-15 · Empilha (parâmetro por referência P do tipo Pilha, parâmetro X do tipo Char, parâmetro

26

Busca em uma Lista Não

Ordenada Com Header

P = Header→Dir; // P é ponteiro auxiliar

Header→Info = X; // apenas para auxiliar na busca

Enquanto (P→Info != X) // E ( P != L ))

P = P→Dir;

Se (P != Header)

Então AchouX = Verdadeiro; // achamos um X de verdade

Senão AchouX = Falso; // achamos um X “de mentira”

Page 27: Estruturas de Dados com Jogosedcomjogos.dc.ufscar.br/slides/pdf/capitulo7.pdf · 2014-04-15 · Empilha (parâmetro por referência P do tipo Pilha, parâmetro X do tipo Char, parâmetro

27

Exercícios 7.6 e 7.7 – Fila e Lista Cadastral.

Todas as Operações. Identificar Casos. Visualizar Passo a Passo.

Exercícios Listas Com Nó Header

Page 28: Estruturas de Dados com Jogosedcomjogos.dc.ufscar.br/slides/pdf/capitulo7.pdf · 2014-04-15 · Empilha (parâmetro por referência P do tipo Pilha, parâmetro X do tipo Char, parâmetro

28

Operações de Baixo Nível para Listas Encadeadas

Page 29: Estruturas de Dados com Jogosedcomjogos.dc.ufscar.br/slides/pdf/capitulo7.pdf · 2014-04-15 · Empilha (parâmetro por referência P do tipo Pilha, parâmetro X do tipo Char, parâmetro

29

Operações de Baixo Nível para

Listas Encadeadas

Remove_P (LB, P, Ok)

InsereADireitaDeP (LB, P, X,Ok)

EstáNaLista (LB, X, P)

Char Info_de_P (LB, P, Ok)

Vazia (LB)

Cheia(LB)

Cria (LB)

PegaOPrimeiro(LB, X, TemElemento)

PegaOPróximo(LB, X, TemElemento)

Page 30: Estruturas de Dados com Jogosedcomjogos.dc.ufscar.br/slides/pdf/capitulo7.pdf · 2014-04-15 · Empilha (parâmetro por referência P do tipo Pilha, parâmetro X do tipo Char, parâmetro

30

Pilha Implementada a Partir de

Operações de Baixo Nível

Empilha (parâmetro por referência LB do tipo ListaBásica, parâmetro X do tipo Char,

parâmetro por referência DeuCerto do tipo Boolean) {

} // fim Empilha

InsereADireitaDeP (LB, P, X,Ok)

Page 31: Estruturas de Dados com Jogosedcomjogos.dc.ufscar.br/slides/pdf/capitulo7.pdf · 2014-04-15 · Empilha (parâmetro por referência P do tipo Pilha, parâmetro X do tipo Char, parâmetro

31

Pilha Implementada a Partir de

Operações de Baixo Nível

Empilha (parâmetro por referência LB do tipo ListaBásica, parâmetro X do tipo Char,

parâmetro por referência DeuCerto do tipo Boolean) {

InsereADireitaDeP (LB, LB.Header, X, DeuCerto);

/* DeuCerto é atualizado por InsereADireitaDeP */

} // fim Empilha

InsereADireitaDeP (LB, P, X,Ok)

Page 32: Estruturas de Dados com Jogosedcomjogos.dc.ufscar.br/slides/pdf/capitulo7.pdf · 2014-04-15 · Empilha (parâmetro por referência P do tipo Pilha, parâmetro X do tipo Char, parâmetro

32

Pilha Implementada a Partir de

Operações de Baixo Nível

Desempilha (parâmetro por referência LB do tipo ListaBásica, parâmetro por

referência X do tipo Char, parâmetro por referência DeuCerto do tipo Boolean) {

} // fim Desempilha

Char Info_de_P (LB, P, Ok)

Remove_P (LB, P, Ok)

Page 33: Estruturas de Dados com Jogosedcomjogos.dc.ufscar.br/slides/pdf/capitulo7.pdf · 2014-04-15 · Empilha (parâmetro por referência P do tipo Pilha, parâmetro X do tipo Char, parâmetro

33

Pilha Implementada a Partir de

Operações de Baixo Nível

Desempilha (parâmetro por referência LB do tipo ListaBásica, parâmetro por

referência X do tipo Char, parâmetro por referência DeuCerto do tipo Boolean) {

X = Info_de_P( LB, LB.Header→Dir, DeuCerto );

Remove_P ( LB, LB.Header→Dir, DeuCerto );

/* DeuCerto é atualizado por Remove_P */

} // fim Desempilha

Char Info_de_P (LB, P, Ok)

Remove_P (LB, P, Ok)

Page 34: Estruturas de Dados com Jogosedcomjogos.dc.ufscar.br/slides/pdf/capitulo7.pdf · 2014-04-15 · Empilha (parâmetro por referência P do tipo Pilha, parâmetro X do tipo Char, parâmetro

34

Exercícios 7.9 e 7.10 – Fila e Lista Cadastral

Implementadas a partir das Operações de Baixo Nível.

Todas as Operações. Identificar Casos. Visualizar Passo a Passo. Considere

Implementação por Lista Duplamente Encadeada com Header.

Exercícios Operações de Baixo Nível para Listas Encadeadas

Page 35: Estruturas de Dados com Jogosedcomjogos.dc.ufscar.br/slides/pdf/capitulo7.pdf · 2014-04-15 · Empilha (parâmetro por referência P do tipo Pilha, parâmetro X do tipo Char, parâmetro

35

Implementando as Operações de

Baixo Nível InsereADireitaDeP (LB, P, X,Ok)

Page 36: Estruturas de Dados com Jogosedcomjogos.dc.ufscar.br/slides/pdf/capitulo7.pdf · 2014-04-15 · Empilha (parâmetro por referência P do tipo Pilha, parâmetro X do tipo Char, parâmetro

36

Implementando as Operações de

Baixo Nível InsereADireitaDeP (LB, P, X,Ok)

PAux→Dir = P→Dir; PAux→Esq = P;

Page 37: Estruturas de Dados com Jogosedcomjogos.dc.ufscar.br/slides/pdf/capitulo7.pdf · 2014-04-15 · Empilha (parâmetro por referência P do tipo Pilha, parâmetro X do tipo Char, parâmetro

37

Implementando as Operações de

Baixo Nível InsereADireitaDeP (LB, P, X,Ok)

Page 38: Estruturas de Dados com Jogosedcomjogos.dc.ufscar.br/slides/pdf/capitulo7.pdf · 2014-04-15 · Empilha (parâmetro por referência P do tipo Pilha, parâmetro X do tipo Char, parâmetro

38

Implementando as Operações de

Baixo Nível InsereADireitaDeP (LB, P, X,Ok)

P→Dir→Esq = PAux;

Page 39: Estruturas de Dados com Jogosedcomjogos.dc.ufscar.br/slides/pdf/capitulo7.pdf · 2014-04-15 · Empilha (parâmetro por referência P do tipo Pilha, parâmetro X do tipo Char, parâmetro

39

Implementando as Operações de

Baixo Nível InsereADireitaDeP (LB, P, X,Ok)

Page 40: Estruturas de Dados com Jogosedcomjogos.dc.ufscar.br/slides/pdf/capitulo7.pdf · 2014-04-15 · Empilha (parâmetro por referência P do tipo Pilha, parâmetro X do tipo Char, parâmetro

40

Implementando as Operações de

Baixo Nível InsereADireitaDeP (LB, P, X,Ok)

P→Dir = PAux;

Page 41: Estruturas de Dados com Jogosedcomjogos.dc.ufscar.br/slides/pdf/capitulo7.pdf · 2014-04-15 · Empilha (parâmetro por referência P do tipo Pilha, parâmetro X do tipo Char, parâmetro

41

Implementando as Operações de

Baixo Nível

InsereADireitaDeP (parâmetro por referência LB do tipo ListaBásica, parâmetro P

do tipo NodePtr, parâmetro por referência DeuCerto do tipo Boolean) {

/* Insere um novo Nó a direita do Nó apontado por P, passado como parâmetro */

Variável auxiliar NovoNó do tipo NodePtr; // NodePtr = ponteiro para Nó

Se (Cheia(LB)==Verdadeiro)

Então DeuCerto = Falso;

Senão { DeuCerto = Verdadeiro;

PAux = NewNode;

PAux→Info = X;

PAux→Dir = P→Dir;

PAux→Esq = P;

P→Dir→Esq = PAux;

P→Dir = PAux;

Aux = Null;

} // fim Senão

} // fim Insere_a_Direita_de_P

Page 42: Estruturas de Dados com Jogosedcomjogos.dc.ufscar.br/slides/pdf/capitulo7.pdf · 2014-04-15 · Empilha (parâmetro por referência P do tipo Pilha, parâmetro X do tipo Char, parâmetro

42

Exercício 7.12 Remove_P, EstáNaLista e Info_de_P

Identificar Casos. Visualizar Passo a Passo. Considere Implementação por Lista

Duplamente Encadeada com Header.

Exercícios Implementar Primitivas de Baixo Nível

Page 43: Estruturas de Dados com Jogosedcomjogos.dc.ufscar.br/slides/pdf/capitulo7.pdf · 2014-04-15 · Empilha (parâmetro por referência P do tipo Pilha, parâmetro X do tipo Char, parâmetro

43

Generalização de Listas Encadeadas

Árvores

Page 44: Estruturas de Dados com Jogosedcomjogos.dc.ufscar.br/slides/pdf/capitulo7.pdf · 2014-04-15 · Empilha (parâmetro por referência P do tipo Pilha, parâmetro X do tipo Char, parâmetro

44

Generalização de Listas Encadeadas

Matrizes Esparsas

Page 45: Estruturas de Dados com Jogosedcomjogos.dc.ufscar.br/slides/pdf/capitulo7.pdf · 2014-04-15 · Empilha (parâmetro por referência P do tipo Pilha, parâmetro X do tipo Char, parâmetro

45

Generalização de Listas Encadeadas

Estruturas Aninhadas

Page 46: Estruturas de Dados com Jogosedcomjogos.dc.ufscar.br/slides/pdf/capitulo7.pdf · 2014-04-15 · Empilha (parâmetro por referência P do tipo Pilha, parâmetro X do tipo Char, parâmetro

46

Generalização de Listas Encadeadas

Estruturas Genéricas Quanto ao Tipo do Elemento: Templates

/* definição da Classe Node */

template<class TipoDoElemento> class Node {

// class Node usa template TipoDoElemento

private:

TipoDoElemento Info; // o tipo do elemento será definido posteriormente

Node<TipoDoElemento>* Next;

...

/* definição da Classe Pilha */

template<class TipoDoElemento> class Pilha {

private:

Node<TipoDoElemento> * Topo;

...

/* no momento de criar as Pilhas, indicamos o tipo dos elementos */

Pilha<int> * p1 = new Pilha<int>(); // cria uma Pilha de Inteiros - P1

Pilha<Carta> * p2 = new Pilha<Carta>(); // cria uma Pilha de Cartas - P2

Page 47: Estruturas de Dados com Jogosedcomjogos.dc.ufscar.br/slides/pdf/capitulo7.pdf · 2014-04-15 · Empilha (parâmetro por referência P do tipo Pilha, parâmetro X do tipo Char, parâmetro

47

Generalização de Listas Encadeadas

Elementos de Tipos Diferentes em uma Mesma Estrutura

Page 48: Estruturas de Dados com Jogosedcomjogos.dc.ufscar.br/slides/pdf/capitulo7.pdf · 2014-04-15 · Empilha (parâmetro por referência P do tipo Pilha, parâmetro X do tipo Char, parâmetro

48

Exercício 7.17 "Pilhas, Filas e Listas Cadastrais possuem uma funcionalidade

bem definida, e podem ser implementadas através de Listas Encadeadas ou

através de outras técnicas". Neste contexto, qual a diferença entre uma Lista

Cadastral e uma Lista Encadeada?

Exercício 7.13 Fila de Prioridades: Fila com Atendimento Prioritário a

Idosos

Fila de espera comdois critérios: (1) a idade do indivíduo que está na Fila, em

anos; (2) a ordem de chegada. O primeiro a ser atendido será sempre o

individuo com idade mais alta. Se houver mais que um individuo com a mesma

idade, será respeitado o segundo critério, que é a ordem de chegada. Projete

uma estrutura para implementar esta Fila com Atendimento Prioritário a

Idosos. Implemente a funcionalidade definida com a técnica de implementação

que considerar mais adequada.

Exercício 7.14 Lista Cadastral em C++

Exercícios

Page 49: Estruturas de Dados com Jogosedcomjogos.dc.ufscar.br/slides/pdf/capitulo7.pdf · 2014-04-15 · Empilha (parâmetro por referência P do tipo Pilha, parâmetro X do tipo Char, parâmetro

49

Passos Para Construir uma Boa Solução

Passo 1: Identificar Casos e Desenhar a Situação Inicial.

Passo 2: Desenho da Situação Final.

Passo 3: Algoritmo para Tratar Cada Caso,

Separadamente.

Passo 4: Faça um Algoritmo Geral

do Modo Mais Simples.

Passo 5: Testar Cada Caso, Alterando o Desenho Passo a Passo.

Para Tratar Caso 2:

•DeleteNode(P);

•L=Null;

Page 50: Estruturas de Dados com Jogosedcomjogos.dc.ufscar.br/slides/pdf/capitulo7.pdf · 2014-04-15 · Empilha (parâmetro por referência P do tipo Pilha, parâmetro X do tipo Char, parâmetro

50

Avanço de Projeto

(Exercício 6.30) Técnica de Implementação

Qual combinação de técnicas parece ser mais adequada às

características do jogo referente ao Desafio 3 que você

desenvolverá?

Projete Sua Própria Estrutura!

As Listas Encadeadas, e suas variações, constituem uma técnica

poderosa e flexível para armazenamento temporário de conjuntos de

elementos. É possível adaptar ou combinar diversas técnicas para

projetar estrutura encadeada que melhor atenda as peculiaridades de

sua aplicação.

Page 51: Estruturas de Dados com Jogosedcomjogos.dc.ufscar.br/slides/pdf/capitulo7.pdf · 2014-04-15 · Empilha (parâmetro por referência P do tipo Pilha, parâmetro X do tipo Char, parâmetro

51

Estruturas de Dados com Jogos Aprender a programar pode ser divertido!

Faça um jogo com a sua cara! Distribua para os

seus amigos!

Comece a

Desenvolver

Seu Jogo

Agora!