1 Estruturas de Dados com Jogos Capítulo 7 Generalização de Listas Encadeadas.
Transcript of 1 Estruturas de Dados com Jogos Capítulo 7 Generalização de Listas Encadeadas.
![Page 1: 1 Estruturas de Dados com Jogos Capítulo 7 Generalização de Listas Encadeadas.](https://reader036.fdocumentos.com/reader036/viewer/2022062303/552fc133497959413d8d7233/html5/thumbnails/1.jpg)
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.](https://reader036.fdocumentos.com/reader036/viewer/2022062303/552fc133497959413d8d7233/html5/thumbnails/2.jpg)
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.](https://reader036.fdocumentos.com/reader036/viewer/2022062303/552fc133497959413d8d7233/html5/thumbnails/3.jpg)
3
Listas Duplamente Encadeadas
![Page 4: 1 Estruturas de Dados com Jogos Capítulo 7 Generalização de Listas Encadeadas.](https://reader036.fdocumentos.com/reader036/viewer/2022062303/552fc133497959413d8d7233/html5/thumbnails/4.jpg)
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.](https://reader036.fdocumentos.com/reader036/viewer/2022062303/552fc133497959413d8d7233/html5/thumbnails/5.jpg)
5
Listas Duplamente Encadeadas
![Page 6: 1 Estruturas de Dados com Jogos Capítulo 7 Generalização de Listas Encadeadas.](https://reader036.fdocumentos.com/reader036/viewer/2022062303/552fc133497959413d8d7233/html5/thumbnails/6.jpg)
6
Listas Duplamente Encadeadas
P2 = P1→Esq;
![Page 7: 1 Estruturas de Dados com Jogos Capítulo 7 Generalização de Listas Encadeadas.](https://reader036.fdocumentos.com/reader036/viewer/2022062303/552fc133497959413d8d7233/html5/thumbnails/7.jpg)
7
Listas Duplamente Encadeadas
![Page 8: 1 Estruturas de Dados com Jogos Capítulo 7 Generalização de Listas Encadeadas.](https://reader036.fdocumentos.com/reader036/viewer/2022062303/552fc133497959413d8d7233/html5/thumbnails/8.jpg)
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.](https://reader036.fdocumentos.com/reader036/viewer/2022062303/552fc133497959413d8d7233/html5/thumbnails/9.jpg)
9
Pilha como uma Lista Circular Duplamente Encadeada
![Page 10: 1 Estruturas de Dados com Jogos Capítulo 7 Generalização de Listas Encadeadas.](https://reader036.fdocumentos.com/reader036/viewer/2022062303/552fc133497959413d8d7233/html5/thumbnails/10.jpg)
10
Operação Empilha
![Page 11: 1 Estruturas de Dados com Jogos Capítulo 7 Generalização de Listas Encadeadas.](https://reader036.fdocumentos.com/reader036/viewer/2022062303/552fc133497959413d8d7233/html5/thumbnails/11.jpg)
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.](https://reader036.fdocumentos.com/reader036/viewer/2022062303/552fc133497959413d8d7233/html5/thumbnails/12.jpg)
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.](https://reader036.fdocumentos.com/reader036/viewer/2022062303/552fc133497959413d8d7233/html5/thumbnails/13.jpg)
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.](https://reader036.fdocumentos.com/reader036/viewer/2022062303/552fc133497959413d8d7233/html5/thumbnails/14.jpg)
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.](https://reader036.fdocumentos.com/reader036/viewer/2022062303/552fc133497959413d8d7233/html5/thumbnails/15.jpg)
15
Empilha
PAux = NewNode; PAux→Info = X;
![Page 16: 1 Estruturas de Dados com Jogos Capítulo 7 Generalização de Listas Encadeadas.](https://reader036.fdocumentos.com/reader036/viewer/2022062303/552fc133497959413d8d7233/html5/thumbnails/16.jpg)
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.](https://reader036.fdocumentos.com/reader036/viewer/2022062303/552fc133497959413d8d7233/html5/thumbnails/17.jpg)
17
Empilha
![Page 18: 1 Estruturas de Dados com Jogos Capítulo 7 Generalização de Listas Encadeadas.](https://reader036.fdocumentos.com/reader036/viewer/2022062303/552fc133497959413d8d7233/html5/thumbnails/18.jpg)
18
Empilha
P.Topo→Esq→Dir = PAux;
![Page 19: 1 Estruturas de Dados com Jogos Capítulo 7 Generalização de Listas Encadeadas.](https://reader036.fdocumentos.com/reader036/viewer/2022062303/552fc133497959413d8d7233/html5/thumbnails/19.jpg)
19
Empilha
![Page 20: 1 Estruturas de Dados com Jogos Capítulo 7 Generalização de Listas Encadeadas.](https://reader036.fdocumentos.com/reader036/viewer/2022062303/552fc133497959413d8d7233/html5/thumbnails/20.jpg)
20
Empilha
P.Topo→Esq = PAux;
![Page 21: 1 Estruturas de Dados com Jogos Capítulo 7 Generalização de Listas Encadeadas.](https://reader036.fdocumentos.com/reader036/viewer/2022062303/552fc133497959413d8d7233/html5/thumbnails/21.jpg)
21
Empilha
P.Topo = PAux; PAux = Null;
![Page 22: 1 Estruturas de Dados com Jogos Capítulo 7 Generalização de Listas Encadeadas.](https://reader036.fdocumentos.com/reader036/viewer/2022062303/552fc133497959413d8d7233/html5/thumbnails/22.jpg)
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.](https://reader036.fdocumentos.com/reader036/viewer/2022062303/552fc133497959413d8d7233/html5/thumbnails/23.jpg)
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.](https://reader036.fdocumentos.com/reader036/viewer/2022062303/552fc133497959413d8d7233/html5/thumbnails/24.jpg)
24
Listas Com Nó Header
![Page 25: 1 Estruturas de Dados com Jogos Capítulo 7 Generalização de Listas Encadeadas.](https://reader036.fdocumentos.com/reader036/viewer/2022062303/552fc133497959413d8d7233/html5/thumbnails/25.jpg)
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.](https://reader036.fdocumentos.com/reader036/viewer/2022062303/552fc133497959413d8d7233/html5/thumbnails/26.jpg)
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.](https://reader036.fdocumentos.com/reader036/viewer/2022062303/552fc133497959413d8d7233/html5/thumbnails/27.jpg)
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.](https://reader036.fdocumentos.com/reader036/viewer/2022062303/552fc133497959413d8d7233/html5/thumbnails/28.jpg)
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.](https://reader036.fdocumentos.com/reader036/viewer/2022062303/552fc133497959413d8d7233/html5/thumbnails/29.jpg)
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.](https://reader036.fdocumentos.com/reader036/viewer/2022062303/552fc133497959413d8d7233/html5/thumbnails/30.jpg)
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.](https://reader036.fdocumentos.com/reader036/viewer/2022062303/552fc133497959413d8d7233/html5/thumbnails/31.jpg)
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.](https://reader036.fdocumentos.com/reader036/viewer/2022062303/552fc133497959413d8d7233/html5/thumbnails/32.jpg)
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.](https://reader036.fdocumentos.com/reader036/viewer/2022062303/552fc133497959413d8d7233/html5/thumbnails/33.jpg)
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.](https://reader036.fdocumentos.com/reader036/viewer/2022062303/552fc133497959413d8d7233/html5/thumbnails/34.jpg)
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.](https://reader036.fdocumentos.com/reader036/viewer/2022062303/552fc133497959413d8d7233/html5/thumbnails/35.jpg)
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.](https://reader036.fdocumentos.com/reader036/viewer/2022062303/552fc133497959413d8d7233/html5/thumbnails/36.jpg)
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.](https://reader036.fdocumentos.com/reader036/viewer/2022062303/552fc133497959413d8d7233/html5/thumbnails/37.jpg)
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.](https://reader036.fdocumentos.com/reader036/viewer/2022062303/552fc133497959413d8d7233/html5/thumbnails/38.jpg)
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.](https://reader036.fdocumentos.com/reader036/viewer/2022062303/552fc133497959413d8d7233/html5/thumbnails/39.jpg)
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.](https://reader036.fdocumentos.com/reader036/viewer/2022062303/552fc133497959413d8d7233/html5/thumbnails/40.jpg)
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.](https://reader036.fdocumentos.com/reader036/viewer/2022062303/552fc133497959413d8d7233/html5/thumbnails/41.jpg)
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.](https://reader036.fdocumentos.com/reader036/viewer/2022062303/552fc133497959413d8d7233/html5/thumbnails/42.jpg)
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.](https://reader036.fdocumentos.com/reader036/viewer/2022062303/552fc133497959413d8d7233/html5/thumbnails/43.jpg)
43
Generalização de Listas Encadeadas
Árvores
![Page 44: 1 Estruturas de Dados com Jogos Capítulo 7 Generalização de Listas Encadeadas.](https://reader036.fdocumentos.com/reader036/viewer/2022062303/552fc133497959413d8d7233/html5/thumbnails/44.jpg)
44
Generalização de Listas Encadeadas
Matrizes Esparsas
![Page 45: 1 Estruturas de Dados com Jogos Capítulo 7 Generalização de Listas Encadeadas.](https://reader036.fdocumentos.com/reader036/viewer/2022062303/552fc133497959413d8d7233/html5/thumbnails/45.jpg)
45
Generalização de Listas Encadeadas
Estruturas Aninhadas
![Page 46: 1 Estruturas de Dados com Jogos Capítulo 7 Generalização de Listas Encadeadas.](https://reader036.fdocumentos.com/reader036/viewer/2022062303/552fc133497959413d8d7233/html5/thumbnails/46.jpg)
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.](https://reader036.fdocumentos.com/reader036/viewer/2022062303/552fc133497959413d8d7233/html5/thumbnails/47.jpg)
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.](https://reader036.fdocumentos.com/reader036/viewer/2022062303/552fc133497959413d8d7233/html5/thumbnails/48.jpg)
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.](https://reader036.fdocumentos.com/reader036/viewer/2022062303/552fc133497959413d8d7233/html5/thumbnails/49.jpg)
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.](https://reader036.fdocumentos.com/reader036/viewer/2022062303/552fc133497959413d8d7233/html5/thumbnails/50.jpg)
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.](https://reader036.fdocumentos.com/reader036/viewer/2022062303/552fc133497959413d8d7233/html5/thumbnails/51.jpg)
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!