Escolar Documentos
Profissional Documentos
Cultura Documentos
Objetivo da Unidade:
📄 Contextualização
📄 Material Teórico
📄 Material Complementar
📄 Referências
📄 Contextualização
Página 1 de 4
Tendo em mente as Filas e as Listas Ordenadas, pense e descreva uma situação, inserida em um
jogo, que utilize as estruturas mencionadas, não necessariamente ambas na mesma parte do
jogo, ok?
📄 Material Teórico
Página 2 de 4
Filas
Uma FILA é um tipo especial de lista linear em que as inserções são realizadas num extremo
enquanto as remoções são feitas no outro. O extremo onde os elementos são inseridos é
denominado final e aquele onde são inseridos é denominado começo da fila.
A ordem de saída dos elementos corresponde diretamente à ordem de entrada dos mesmos na
fila, de modo que os primeiros elementos que entram serão os primeiros a sair, caracterizando
uma estrutura FIFO (First-In/First-Out).
A palavra queue, da língua inglesa, significa fila. As duas operações básicas que uma fila suporta
são:
Exemplo:
Tabela 1
– F:[ ]
F.enqueue(a) F:[ a ]
F.enqueue(b) F:[ a, b ]
F.enqueue(c) F:[ a, b, c ]
F.enqueue(d) F:[ a, b, c, d ]
dequeue() F:[ b, c, d ]
F.enqueue(F.dequeue()) F:[ c, d, b ]
enqueue(e) F:[ c, d, b, e ]
F.enqueue(F.dequeue()) F:[ d, b, e, c ]
Fila Estática Sequencial
Assim com as pilhas, como manipulamos apenas as extremidades da estrutura, não possuindo
inserção e remoção no meio dela, podemos implementar as Filas de maneira estática-sequencial
ou dinâmica-encadeada.
Quando inserimos elementos até ela ficar cheia (fim=MAX), temos que não há mais
possibilidades de inserção. Porém, mesmo que removamos todos os elementos,
ainda assim ela vai achar que está cheia por não ter possibilidade de inserção e vazia
por não ter mais elementos.
Para resolver o primeiro problema, podemos criar uma Fila Circular onde, após o último
elemento volta para a primeira posição e se estiver disponível para inserção, podemos colocar
mais elementos.
O segundo problema, para descobrir se a Fila está cheia ou vazia, basta cria um contador de
elementos, que se estiver zerado está vazia e se estiver com MAX estará cheia.
Para tanto, nós tivemos que implementar a Fila Circular que eliminava o problema, o que não
ocorre aqui, pois a alocação não é sequencial e sim encadeada.
Para criarmos uma Fila, ainda vamos usar a notação onde cada elemento da Fila será um nó
contendo um dado e o endereço do próximo nó da Fila através de Listas Simplesmente
Encadeadas. Porém, a Fila por ser uma estrutura FIFO, deve manipular as duas extremidades
(começo e final), pois as inserções são feitas no final da Fila e as remoções no começo. Além
disso, usaremos um contador para armazenar a quantidade de elementos que a Fila possui.
public FilaDin() {
comeco = null;
fim = null;
total = 0;
}
Aplicação de Filas
Apesar da simplicidade de conceito de Filas, ele tem se mostrado essencial para o
desenvolvimento de muitas aplicações, sobretudo, quando se trata de simular no computador
situações reais, onde algum tipo de atendimento é modelado.
Em resumo, qualquer aplicação onde a ordem de entrada é a mesma ordem de saída dos
elementos é um candidato ao uso de filas.
desenho é um conjunto de pontos conectados entre si e que têm a mesma cor. Dizemos que dois
pontos Pi e Pj estão conectados entre si se, e somente se, podemos partir de Pi, incrementar (ou
decrementar) sua abscissa (ou ordenada e não ambas) e chegar ao ponto Pj.
Para colorir uma região R, podemos utilizar o seguinte algoritmo básico:
Para poder simular o efeito, vamos representar uma imagem qualquer através de uma matriz,
onde cada elemento da matriz representa um ponto do desenho(pixel) e cada pixel é
discriminado pelas coordenadas da sua posição na matriz. Cada elemento da matriz armazena
um valor correspondente a cor do ponto representado (0=branco, 1=cinza, 2=preto...).
Figura 1
import javax.swing.*;
public class RegGrafica {
private static Fila F; //Fila para a aplicação
private static int x,y; //Coordenadas do ponto
private static String imagem[][]; //Matriz da imagem
private static int MAX; //Tamanho da matriz
//Fim
System.exit(0);
}
Listas Ordenadas
Lista Ordenada é uma estrutura de dados auto-ajustável, no sentido de sempre se manter
ordenada após cada inserção ou remoção. Devido a este comportamento altamente dinâmico,
esta estrutura será melhor implementada como alocação dinâmica encadeada pois a inserção e
remoção de nós no meio das Listas será inevitável.
Uma Lista Ordenada L:[a1, a2, a3, ..., an] é uma lista linear tal que, sendo n>1, temos:
Se L é uma lista ordenada, podemos garantir que nenhum elemento em L é inferior ao primeiro
elemento(a1) ou superior ao último elemento (an). Além disso, tomando um elemento qualquer
no meio da lista, nenhum elemento à sua esquerda o supera e nenhum elemento à direita é
inferior a ele. Entre as diversas operações que podem ser realizadas com Listas Ordenadas,
vamos considerar:
– L:[ ] –
L.ins(e) L:[ e ] –
L.ins(x) L:[ e, x ] –
L.ins(e) L:[ e, e, x ] –
L.ins(m) L:[ e, e, m, x ] –
L.ins(p) L:[ e, e, m, p, x ] –
L.ins(l) L:[ e, e, l, m, p, x ] –
L.ins(o) L:[ e, e, l, m, o, p, x ] –
L.find(o) L:[ e, e, l, o, p ] 4
L.find(e) L:[ e, e, l, o, p ] 1
Assim como Pilhas Dinâmicas e Filas Dinâmicas, a lista ordenada dinâmica encadeada usa a
estrutura de listas simplesmente encadeadas.
import javax.swing.*;
//Se encontrou
if(aux.getProx() != null && emFloat(x) ==
emFloat(aux.getProx().getDado()))
{
aux.setProx(aux.getProx().getProx());
return true;
}
else //Não encontrou o elemento
return false;
}
}
}
L:[(Ana,32),(Beth,17),(Caio,32),(Denis,15),(Elis,28),(Zélia,51)]
No caso acima, uma instrução set(Caio,28) apenas alteraria o conteúdo do valor de y do par,
ficando assim:
L:[(Ana,32),(Beth,17),(Caio,28),(Denis,15),(Elis,28),(Zélia,51)]
Variáveis Polinômios
Desejamos aplicar os conceitos de listas ordenadas para implementar um tipo de dados que nos
possibilitará a criação de variáveis capazes de armazenar polinômios na forma.
Analisando a forma de P(x), concluímos facilmente que o polinômio pode ser representado pó
um conjunto de pares (ak,k), onde cada par associa o coeficiente e a potência correspondente de
x.
Para representar cada monômio do polinômio, vamos criar um TAD que representará esse nó do
polinômio.
Figura 2
//Implementação de um Polinômio
import javax.swing.*;
Livros
Vídeo
Listas, Pilhas e Filas em Estruturas de Dados - Qual a
Diferença?
PENTON, R. Data Structures for Game Programmers, Ohio, USA, Focal Press, 2003
DROZDEK, A. Estrutura de Dados e Algoritmos em C++. Sao Paulo: Pioneira Thomson Learning,
2005.
SHERROD, A. Data Structures And Algorithms For Game Developers. New York City: Charles River
Media, 2007.