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

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

Embed Size (px)

Citation preview

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

1

Estruturas de Dados com Jogos

Capítulo 7

Generalização de Listas Encadeadas

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

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: 1 Estruturas de Dados com Jogos Capítulo 7 Generalização de Listas Encadeadas

3

Listas Duplamente Encadeadas

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

4

Listas Duplamente Encadeadas

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

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

5

Listas Duplamente Encadeadas

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

6

Listas Duplamente Encadeadas

P2 = P1→Esq;

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

7

Listas Duplamente Encadeadas

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

8

Listas Duplamente Encadeadas

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

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

9

Pilha como uma Lista Circular Duplamente Encadeada

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

10

Operação Empilha

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

11

Operação Empilha

PAux = NewNode; PAux→Info = X;

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

12

Operação Empilha

PAux = NewNode; PAux→Info = X;

PAux→Esq = Paux;

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

13

Operação Empilha

PAux = NewNode; PAux→Info = X;

PAux→Esq = Paux;

PAux→Dir= Paux;

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

14

Operação Empilha

PAux = NewNode; PAux→Info = X;

PAux→Esq = Paux;

PAux→Dir= Paux;

P.Topo = Paux;

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

15

Empilha

PAux = NewNode; PAux→Info = X;

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

16

Empilha

PAux = NewNode; PAux→Info = X;

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

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

17

Empilha

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

18

Empilha

P.Topo→Esq→Dir = PAux;

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

19

Empilha

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

20

Empilha

P.Topo→Esq = PAux;

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

21

Empilha

P.Topo = PAux; PAux = Null;

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

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 empilhaEntã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: 1 Estruturas de Dados com Jogos Capítulo 7 Generalização de Listas Encadeadas

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íciosLista Duplamente Encadeada

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

24

Listas Com Nó Header

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

25

Busca em uma Lista Não Ordenada Sem Header

Se (L == Null) // Lista VaziaEntã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: 1 Estruturas de Dados com Jogos Capítulo 7 Generalização de Listas Encadeadas

26

Busca em uma Lista Não Ordenada Com Header

P = Header→Dir; // P é ponteiro auxiliarHeader→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 verdadeSenão AchouX = Falso; // achamos um X “de mentira”

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

27

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

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

ExercíciosListas Com Nó Header

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

28

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

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

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: 1 Estruturas de Dados com Jogos Capítulo 7 Generalização de Listas Encadeadas

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: 1 Estruturas de Dados com Jogos Capítulo 7 Generalização de Listas Encadeadas

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: 1 Estruturas de Dados com Jogos Capítulo 7 Generalização de Listas Encadeadas

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: 1 Estruturas de Dados com Jogos Capítulo 7 Generalização de Listas Encadeadas

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: 1 Estruturas de Dados com Jogos Capítulo 7 Generalização de Listas Encadeadas

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íciosOperações de Baixo Nível para Listas Encadeadas

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

35

Implementando as Operações de Baixo Nível

InsereADireitaDeP (LB, P, X,Ok)

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

36

Implementando as Operações de Baixo Nível

InsereADireitaDeP (LB, P, X,Ok)

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

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

37

Implementando as Operações de Baixo Nível

InsereADireitaDeP (LB, P, X,Ok)

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

38

Implementando as Operações de Baixo Nível

InsereADireitaDeP (LB, P, X,Ok)

P→Dir→Esq = PAux;

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

39

Implementando as Operações de Baixo Nível

InsereADireitaDeP (LB, P, X,Ok)

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

40

Implementando as Operações de Baixo Nível

InsereADireitaDeP (LB, P, X,Ok)

P→Dir = PAux;

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

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: 1 Estruturas de Dados com Jogos Capítulo 7 Generalização de Listas Encadeadas

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íciosImplementar Primitivas de Baixo Nível

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

43

Generalização de Listas Encadeadas

Árvores

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

44

Generalização de Listas Encadeadas

Matrizes Esparsas

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

45

Generalização de Listas Encadeadas

Estruturas Aninhadas

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

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 - P1Pilha<Carta> * p2 = new Pilha<Carta>(); // cria uma Pilha de Cartas - P2

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

47

Generalização de Listas Encadeadas

Elementos de Tipos Diferentes em uma Mesma Estrutura

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

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 IdososFila 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: 1 Estruturas de Dados com Jogos Capítulo 7 Generalização de Listas Encadeadas

49

Passos Para Construir uma Boa Solução

Passo 1: Identificar Casos e Desenhara 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.

Se Caso 1

Então [tratar Caso 1]

Senão Se Caso 2

Então [tratar Caso 2]

Senão Se Caso 3...

Para Tratar Caso 2:•DeleteNode(P);•L=Null;

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

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: 1 Estruturas de Dados com Jogos Capítulo 7 Generalização de Listas Encadeadas

51

Estruturas de Dados com JogosAprender a programar pode ser divertido!

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

Comece a Desenvolver

Seu Jogo Agora!