Download - Estruturas de Dados com Jogos
![Page 1: Estruturas de Dados com Jogos](https://reader038.vdocuments.com.br/reader038/viewer/2022103006/568142b1550346895daef3f1/html5/thumbnails/1.jpg)
Estruturas de Dados com Jogos
Capítulo 4
Listas Encadeadas
![Page 2: Estruturas de Dados com Jogos](https://reader038.vdocuments.com.br/reader038/viewer/2022103006/568142b1550346895daef3f1/html5/thumbnails/2.jpg)
Seus Objetivos
neste Capítulo
• Entender o que é Alocação Encadeada de Memória, no contexto do armazenamento temporário de conjuntos de elementos; conhecer o conceito de Listas Encadeadas, e sua representação usual;
• Desenvolver habilidade para implementar Pilhas e Filas através do conceito de Listas Encadeadas;
![Page 3: Estruturas de Dados com Jogos](https://reader038.vdocuments.com.br/reader038/viewer/2022103006/568142b1550346895daef3f1/html5/thumbnails/3.jpg)
Alocação Sequencial Versus Alocação Encadeada
![Page 4: Estruturas de Dados com Jogos](https://reader038.vdocuments.com.br/reader038/viewer/2022103006/568142b1550346895daef3f1/html5/thumbnails/4.jpg)
Definição: Alocação Encadeada de Memória para um Conjunto
de Elementos
Os elementos não são armazenados, necessariamente, em posições de memória adjacentes;
A ordem dos elementos precisa ser explicitamente indicada: cada elemento do conjunto aponta qual é o próximo na sequencia.
![Page 5: Estruturas de Dados com Jogos](https://reader038.vdocuments.com.br/reader038/viewer/2022103006/568142b1550346895daef3f1/html5/thumbnails/5.jpg)
Representação Usual de uma Lista Encadeada
![Page 6: Estruturas de Dados com Jogos](https://reader038.vdocuments.com.br/reader038/viewer/2022103006/568142b1550346895daef3f1/html5/thumbnails/6.jpg)
Notação para Manipulação de Listas Encadeadas
![Page 7: Estruturas de Dados com Jogos](https://reader038.vdocuments.com.br/reader038/viewer/2022103006/568142b1550346895daef3f1/html5/thumbnails/7.jpg)
Notação para Manipulação de Listas Encadeadas
Operações
X = P→Info;X recebe o valor do campo Info do nó apontado por P.
P→Info = X;O campo Info do Nó apontado por P recebe o valor de X.
P1 = P2;O ponteiro P1 passa a apontar para onde aponta P2.
P1 = P→Next; P1 passa a apontar para onde aponta o campo Next do Nó apontado por P.
P→Next = P1; O campo Next do Nó apontado por P passa a apontar para onde aponta P1.
P = NewNode; Aloca um Nó e retorna o endereço em P.
DeleteNode( P ); Libera (desaloca) o Nó apontado por P.
![Page 8: Estruturas de Dados com Jogos](https://reader038.vdocuments.com.br/reader038/viewer/2022103006/568142b1550346895daef3f1/html5/thumbnails/8.jpg)
Notação para Manipulação de Listas Encadeadas
Acessando e Atualizando o Campo Info de um Nó
![Page 9: Estruturas de Dados com Jogos](https://reader038.vdocuments.com.br/reader038/viewer/2022103006/568142b1550346895daef3f1/html5/thumbnails/9.jpg)
Notação para Manipulação de Listas Encadeadas
Acessando e Atualizando o Campo Info de um Nó
![Page 10: Estruturas de Dados com Jogos](https://reader038.vdocuments.com.br/reader038/viewer/2022103006/568142b1550346895daef3f1/html5/thumbnails/10.jpg)
Notação para Manipulação de Listas Encadeadas
Acessando e Atualizando o Campo Info de um Nó
![Page 11: Estruturas de Dados com Jogos](https://reader038.vdocuments.com.br/reader038/viewer/2022103006/568142b1550346895daef3f1/html5/thumbnails/11.jpg)
Notação para Manipulação de Listas Encadeadas
Acessando e Atualizando o Campo Info de um Nó
![Page 12: Estruturas de Dados com Jogos](https://reader038.vdocuments.com.br/reader038/viewer/2022103006/568142b1550346895daef3f1/html5/thumbnails/12.jpg)
Notação para Manipulação de Listas Encadeadas
Acessando e Atualizando o Campo Info de um Nó
![Page 13: Estruturas de Dados com Jogos](https://reader038.vdocuments.com.br/reader038/viewer/2022103006/568142b1550346895daef3f1/html5/thumbnails/13.jpg)
Notação para Manipulação de Listas Encadeadas
Acessando e Atualizando o Campo Info de um Nó
![Page 14: Estruturas de Dados com Jogos](https://reader038.vdocuments.com.br/reader038/viewer/2022103006/568142b1550346895daef3f1/html5/thumbnails/14.jpg)
Notação para Manipulação de Listas Encadeadas
Operações
X = P→Info;X recebe o valor do campo Info do nó apontado por P.
P→Info = X;O campo Info do Nó apontado por P recebe o valor de X.
P1 = P2;O ponteiro P1 passa a apontar para onde aponta P2.
P1 = P→Next; P1 passa a apontar para onde aponta o campo Next do Nó apontado por P.
P→Next = P1; O campo Next do Nó apontado por P passa a apontar para onde aponta P1.
P = NewNode; Aloca um Nó e retorna o endereço em P.
DeleteNode( P ); Libera (desaloca) o Nó apontado por P.
![Page 15: Estruturas de Dados com Jogos](https://reader038.vdocuments.com.br/reader038/viewer/2022103006/568142b1550346895daef3f1/html5/thumbnails/15.jpg)
Notação para Manipulação de Listas Encadeadas
Acessando e Atualizando o Campo Next de um Nó
![Page 16: Estruturas de Dados com Jogos](https://reader038.vdocuments.com.br/reader038/viewer/2022103006/568142b1550346895daef3f1/html5/thumbnails/16.jpg)
Notação para Manipulação de Listas Encadeadas
Acessando e Atualizando o Campo Next de um Nó
![Page 17: Estruturas de Dados com Jogos](https://reader038.vdocuments.com.br/reader038/viewer/2022103006/568142b1550346895daef3f1/html5/thumbnails/17.jpg)
Notação para Manipulação de Listas Encadeadas
Acessando e Atualizando o Campo Next de um Nó
![Page 18: Estruturas de Dados com Jogos](https://reader038.vdocuments.com.br/reader038/viewer/2022103006/568142b1550346895daef3f1/html5/thumbnails/18.jpg)
Notação para Manipulação de Listas Encadeadas
Acessando e Atualizando o Campo Next de um Nó
![Page 19: Estruturas de Dados com Jogos](https://reader038.vdocuments.com.br/reader038/viewer/2022103006/568142b1550346895daef3f1/html5/thumbnails/19.jpg)
Notação para Manipulação de Listas Encadeadas
Acessando e Atualizando o Campo Next de um Nó
![Page 20: Estruturas de Dados com Jogos](https://reader038.vdocuments.com.br/reader038/viewer/2022103006/568142b1550346895daef3f1/html5/thumbnails/20.jpg)
Notação para Manipulação de Listas Encadeadas
Acessando e Atualizando o Campo Next de um Nó
![Page 21: Estruturas de Dados com Jogos](https://reader038.vdocuments.com.br/reader038/viewer/2022103006/568142b1550346895daef3f1/html5/thumbnails/21.jpg)
Notação para Manipulação de Listas Encadeadas
Operações
X = P→Info;X recebe o valor do campo Info do nó apontado por P.
P→Info = X;O campo Info do Nó apontado por P recebe o valor de X.
P1 = P2;O ponteiro P1 passa a apontar para onde aponta P2.
P1 = P→Next; P1 passa a apontar para onde aponta o campo Next do Nó apontado por P.
P→Next = P1; O campo Next do Nó apontado por P passa a apontar para onde aponta P1.
P = NewNode; Aloca um Nó e retorna o endereço em P.
DeleteNode( P ); Libera (desaloca) o Nó apontado por P.
![Page 22: Estruturas de Dados com Jogos](https://reader038.vdocuments.com.br/reader038/viewer/2022103006/568142b1550346895daef3f1/html5/thumbnails/22.jpg)
Notação para Manipulação de Listas Encadeadas
Movendo Ponteiros
![Page 23: Estruturas de Dados com Jogos](https://reader038.vdocuments.com.br/reader038/viewer/2022103006/568142b1550346895daef3f1/html5/thumbnails/23.jpg)
Notação para Manipulação de Listas Encadeadas
Movendo Ponteiros
![Page 24: Estruturas de Dados com Jogos](https://reader038.vdocuments.com.br/reader038/viewer/2022103006/568142b1550346895daef3f1/html5/thumbnails/24.jpg)
Notação para Manipulação de Listas Encadeadas
Movendo Ponteiros
![Page 25: Estruturas de Dados com Jogos](https://reader038.vdocuments.com.br/reader038/viewer/2022103006/568142b1550346895daef3f1/html5/thumbnails/25.jpg)
Notação para Manipulação de Listas Encadeadas
Movendo Ponteiros
![Page 26: Estruturas de Dados com Jogos](https://reader038.vdocuments.com.br/reader038/viewer/2022103006/568142b1550346895daef3f1/html5/thumbnails/26.jpg)
Notação para Manipulação de Listas Encadeadas
Operações
X = P→Info;X recebe o valor do campo Info do nó apontado por P.
P→Info = X;O campo Info do Nó apontado por P recebe o valor de X.
P1 = P2;O ponteiro P1 passa a apontar para onde aponta P2.
P1 = P→Next; P1 passa a apontar para onde aponta o campo Next do Nó apontado por P.
P→Next = P1; O campo Next do Nó apontado por P passa a apontar para onde aponta P1.
P = NewNode; Aloca um Nó e retorna o endereço em P.
DeleteNode( P ); Libera (desaloca) o Nó apontado por P.
![Page 27: Estruturas de Dados com Jogos](https://reader038.vdocuments.com.br/reader038/viewer/2022103006/568142b1550346895daef3f1/html5/thumbnails/27.jpg)
Notação para Manipulação de Listas Encadeadas
Alocando e Desalocando Nós
![Page 28: Estruturas de Dados com Jogos](https://reader038.vdocuments.com.br/reader038/viewer/2022103006/568142b1550346895daef3f1/html5/thumbnails/28.jpg)
Notação para Manipulação de Listas Encadeadas
Alocando e Desalocando Nós
![Page 29: Estruturas de Dados com Jogos](https://reader038.vdocuments.com.br/reader038/viewer/2022103006/568142b1550346895daef3f1/html5/thumbnails/29.jpg)
Notação para Manipulação de Listas Encadeadas
Alocando e Desalocando Nós
![Page 30: Estruturas de Dados com Jogos](https://reader038.vdocuments.com.br/reader038/viewer/2022103006/568142b1550346895daef3f1/html5/thumbnails/30.jpg)
Notação para Manipulação de Listas Encadeadas
Alocando e Desalocando Nós
![Page 31: Estruturas de Dados com Jogos](https://reader038.vdocuments.com.br/reader038/viewer/2022103006/568142b1550346895daef3f1/html5/thumbnails/31.jpg)
Notação para Manipulação de Listas Encadeadas
Alocando e Desalocando Nós
![Page 32: Estruturas de Dados com Jogos](https://reader038.vdocuments.com.br/reader038/viewer/2022103006/568142b1550346895daef3f1/html5/thumbnails/32.jpg)
Notação para Manipulação de Listas Encadeadas
Alocando e Desalocando Nós
![Page 33: Estruturas de Dados com Jogos](https://reader038.vdocuments.com.br/reader038/viewer/2022103006/568142b1550346895daef3f1/html5/thumbnails/33.jpg)
Notação para Manipulação de Listas Encadeadas
Operações
X = P→Info;X recebe o valor do campo Info do nó apontado por P.
P→Info = X;O campo Info do Nó apontado por P recebe o valor de X.
P1 = P2;O ponteiro P1 passa a apontar para onde aponta P2.
P1 = P→Next; P1 passa a apontar para onde aponta o campo Next do Nó apontado por P.
P→Next = P1; O campo Next do Nó apontado por P passa a apontar para onde aponta P1.
P = NewNode; Aloca um Nó e retorna o endereço em P.
DeleteNode( P ); Libera (desaloca) o Nó apontado por P.
![Page 34: Estruturas de Dados com Jogos](https://reader038.vdocuments.com.br/reader038/viewer/2022103006/568142b1550346895daef3f1/html5/thumbnails/34.jpg)
Pilha como uma Lista Encadeada
![Page 35: Estruturas de Dados com Jogos](https://reader038.vdocuments.com.br/reader038/viewer/2022103006/568142b1550346895daef3f1/html5/thumbnails/35.jpg)
Pilha como uma Lista Encadeada
![Page 36: Estruturas de Dados com Jogos](https://reader038.vdocuments.com.br/reader038/viewer/2022103006/568142b1550346895daef3f1/html5/thumbnails/36.jpg)
Exercício 4.1 Operação 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);
/* Empilha o elemento X na Pilha P. O parâmetro DeuCerto deve indicar se a operação foi bem sucedida ou não */
![Page 37: Estruturas de Dados com Jogos](https://reader038.vdocuments.com.br/reader038/viewer/2022103006/568142b1550346895daef3f1/html5/thumbnails/37.jpg)
Exercício 4.1 Operação Empilha
![Page 38: Estruturas de Dados com Jogos](https://reader038.vdocuments.com.br/reader038/viewer/2022103006/568142b1550346895daef3f1/html5/thumbnails/38.jpg)
Exercício 4.1 Operação Empilha
![Page 39: Estruturas de Dados com Jogos](https://reader038.vdocuments.com.br/reader038/viewer/2022103006/568142b1550346895daef3f1/html5/thumbnails/39.jpg)
Exercício 4.1 Operação Empilha
![Page 40: Estruturas de Dados com Jogos](https://reader038.vdocuments.com.br/reader038/viewer/2022103006/568142b1550346895daef3f1/html5/thumbnails/40.jpg)
Exercício 4.1 Operação Empilha
![Page 41: Estruturas de Dados com Jogos](https://reader038.vdocuments.com.br/reader038/viewer/2022103006/568142b1550346895daef3f1/html5/thumbnails/41.jpg)
Exercício 4.1 Operação Empilha
![Page 42: Estruturas de Dados com Jogos](https://reader038.vdocuments.com.br/reader038/viewer/2022103006/568142b1550346895daef3f1/html5/thumbnails/42.jpg)
Exercício 4.1 Operação Empilha
![Page 43: Estruturas de Dados com Jogos](https://reader038.vdocuments.com.br/reader038/viewer/2022103006/568142b1550346895daef3f1/html5/thumbnails/43.jpg)
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;/* PAux é uma variável auxiliar do tipo NodePtr. O tipo Pilha, nesta implementação encadeada, contém o campo P.Topo, que também é do tipo NodePtr, ou seja, um ponteiro para Nó */ Se (Cheia(P)== Verdadeiro) // se a Pilha P estiver cheia... Então DeuCerto = Falso; // ... não podemos empilharSenão { PAux = NewNode; // aloca um novo NóPAux→Info = X; // armazena o valor de X no novo NóPAux→Next = P.Topo; // o próximo deste novo nó será o elemento do topoP.Topo = PAux; // o topo da pilha passa a ser o novo Nó
DeuCerto = Verdadeiro;}; // a operação deu certo} // fim do procedimento Empilha
Exercício 4.1 Operação Empilha
![Page 44: Estruturas de Dados com Jogos](https://reader038.vdocuments.com.br/reader038/viewer/2022103006/568142b1550346895daef3f1/html5/thumbnails/44.jpg)
Exercício 4.2 Executar passo a Passo a Operação Empilha Partindo de Situação Inicial com Um Elemento na Pilha
Exercícios 4.3, 4.4, 4.5 e 4.6 Operações Desempilha, Cria, Vazia e Cheia
Exercício 4.7 Executar passo a Passo a Operação Desempilha Partindo de Situação Inicial com Um Único Elemento na Pilha
Exercícios
![Page 45: Estruturas de Dados com Jogos](https://reader038.vdocuments.com.br/reader038/viewer/2022103006/568142b1550346895daef3f1/html5/thumbnails/45.jpg)
Exercício 4.2 Operação Desempilha
![Page 46: Estruturas de Dados com Jogos](https://reader038.vdocuments.com.br/reader038/viewer/2022103006/568142b1550346895daef3f1/html5/thumbnails/46.jpg)
Cria (parâmetro por referência P do tipo Pilha) {/* Cria a Pilha P, inicializando a Pilha como vazia - sem nenhum elemento. */P.Topo = Null; // P.Topo passa a apontar para Null. Isso indica que a Pilha está vazia.} // fim do Cria Boolean Vazia (parâmetro por referência P do tipo Pilha) {/* Retorna Verdadeiro se a Pilha P estiver sem nenhum elemento; Falso caso contrário */Se (P.Topo == Null)Então Retorne Verdadeiro; // a Pilha P está vaziaSenão Retorne Falso; // a Pilha P não está vazia} // fim do Vazia Boolean Cheia (parâmetro por referência P do tipo Pilha) {/* Nesta implementação conceitual, a operação cheia retorna sempre Falso */Retorne Falso; // nesta implementação conceitual, a Pilha nunca estará cheia.} // fim do Cheia
Exercícios 4.4 a 4.6
![Page 47: Estruturas de Dados com Jogos](https://reader038.vdocuments.com.br/reader038/viewer/2022103006/568142b1550346895daef3f1/html5/thumbnails/47.jpg)
Desempilha(parâmetro por referência P do tipo Pilha, parâmetro por referência X do tipo Char, parâmetro por referência DeuCerto do tipo Boolean) {/* Se a Pilha P estiver vazia o parâmetro DeuCerto deve retornar Falso. Caso a Pilha P não estiver vazia, a operação Desempilha deve retornar o valor do elemento do Topo da Pilha no parâmetro X. O Nó em que se encontra o elemento do Topo deve ser desalocado, e o Topo da Pilha deve então ser atualizado para o próximo elemento */
Variável PAux do tipo NodePtr; // ponteiro para Nó, auxiliar
Se (Vazia( P ) == Verdadeiro)Então DeuCerto = Falso;Senão { DeuCerto = Verdadeiro; X = P.Topo→Info;
PAux = P.Topo ; // aponta PAux para P.Topo, para guardar este endereço// antes de mudar P.Topo de lugar
P.Topo = P.Topo→Next; // o topo da Pilha avança para o próximo elemento. DeleteNode( PAux ); // desaloca o Nó que armazenava o elemento do topo
}} // fim do Desempilha
Exercício 4.3
![Page 48: Estruturas de Dados com Jogos](https://reader038.vdocuments.com.br/reader038/viewer/2022103006/568142b1550346895daef3f1/html5/thumbnails/48.jpg)
Solução Com Dois Ponteiros
Exercícios 4.8 a 4.12 - Fila Implementada como Lista Encadeada
![Page 49: Estruturas de Dados com Jogos](https://reader038.vdocuments.com.br/reader038/viewer/2022103006/568142b1550346895daef3f1/html5/thumbnails/49.jpg)
Exercício 4.13- Fila Implementada como Lista Encadeada Circular
![Page 50: Estruturas de Dados com Jogos](https://reader038.vdocuments.com.br/reader038/viewer/2022103006/568142b1550346895daef3f1/html5/thumbnails/50.jpg)
Exercício 4.14- Fila como Lista Encadeada Circular com Só 1 Ponteiro
![Page 51: Estruturas de Dados com Jogos](https://reader038.vdocuments.com.br/reader038/viewer/2022103006/568142b1550346895daef3f1/html5/thumbnails/51.jpg)
Exercício 4.15- Pilha como Lista Encadeada Circular
![Page 52: Estruturas de Dados com Jogos](https://reader038.vdocuments.com.br/reader038/viewer/2022103006/568142b1550346895daef3f1/html5/thumbnails/52.jpg)
Exercício 4.18 Avanço de
Projeto
Após fazer uma reflexão sobre as vantagens e desvantagens da Alocação Sequencial e da Alocação Encadeada, reflita sobre qual
técnica de implementação parece ser mais adequada às características dos jogos que você está desenvolvendo no momento:
Alocação Sequencial ou Alocação Encadeada de Memória?
Estruturas de Dados com JogosAprender a programar pode ser divertido!