O documento discute representação de filas usando listas e operações em filas. Ele introduz filas como listas FIFO, apresenta exemplos de filas, descreve operações como enqueue e dequeue, e discute implementação de filas circulares usando listas encadeadas.
3. INTRODUÇÃO
É uma lista linear.
É uma lista FIFO – first in / first out – primeiro a entrar primeiro a
sair.
As inserções ocorrem no final da fila e as remoções no inicio da
fila. Não há inserção e remoção no meio da fila.
Pode ser uma lista dinâmica que aumenta ou diminui durante a
sua existência.
3
4. Exemplos
Balcão de atendimento;
Fila de banco;
Fila de processos aguardando os recursos do sistema
operacional;
Fila de pacotes a serem transmitidos numa rede de
comutação de pacotes;
Fila de caixa em banco;
Etc.
07/12/2016
4
5. Operações
ENQUEUE: insere um novo elemento no final da fila, aumentando
o tamanho da fila.
DEQUEUE: remove um elemento do inicio da fila, diminuindo o
tamanho da fila.
07/12/2016
5
inicio final
FILA (F)
6. Operações
Init: inicializa a fila no estado vazia (NIL ou NULL), definindo um
um estado inicial.
IsEmpty: verifica se a fila está vazia. Do tipo booleano: retorna
TRUE somente se estiver vazia.
IsFull: verifica se a fila está cheia. Do tipo booleano: retorna TRUE
somente quando não há mais espaço de armazenamento.
(somente se a Fila for estática)
07/12/2016
6
25. Implementação: Dequeue Parte 1
function Dequeue():tipo_dado;
begin
//verifica se a fila está vazia
if(fila = nil)then
begin
writeln(' A fila está vazia! ');
end
else
begin
//remove se a fila tem apenas um
elemento
if(fila^.proximo = fila)then
begin
//remove o elemento
Dequeue := fila^.dado;
//desaloca memória
dispose(fila);
fila := nil; //inicio da fila
aponta para NIL
end
else07/12/2016
25
26. Implementação: Dequeue Parte 2
begin
new(pAux2); //aloca memória
//aux2 aponta para o inicio da fila
pAux2:=fila;
while(pAux2^.proximo<>fila)do
begin
//aux2 vai para o próximo elemento
da fila
pAux2 := pAux2^.proximo;
end;
new(pAux1); //aloca memória
pAux1 := fila;
//remove o elemento da fila
Dequeue := pAux1^.dado;
//inicio da fila aponta para o próximo
fila := fila^.próximo;
//o próximo de aux2 aponta para o inicio
pAux2^.proximo := fila;
dispose(pAux1); //libera memória
pAux1 := nil; //aux1 aponta para NIL
end;
end;
writeln(' Elemento removido com sucesso! ');
end;
07/12/2016
26
27. Implementação: Enqueue Parte 1
procedure Enqueue();
begin
write(' Digite um Elemento: ');
readln(x);
if(fila = nil)then
begin
new(fila); //aloca memória
fila^.dado := x; //aloca o novo elemento
fila^.proximo := fila; //aponta para o inicio da fila
end
else
07/12/2016
27
28. Implementação: Enqueue Parte 2
begin
new(pAux2); //aloca memória
pAux2:=fila; //aux aponta para o inicio da fila
while(pAux2^.proximo<>fila)do
begin
pAux2 := pAux2^.proximo; //vai para o próximo elemento da fila
end;
new(pAux1); //aloca memória
//o próximo elemento de aux1 aponta para inicio da fila
pAux1^.proximo := fila;
pAux1^.dado := x; //aloca o novo elemento
//o próximo elemento de aux2 aponta para aux1
pAux2^.proximo := pAux1;
end;
writeln(' Elemento inserido com sucesso! ');
end;
07/12/2016
28
29. Implementação: Inicio da Fila
Function Inicio(fila: tipo_fila): integer;
Begin
Inicio := fila^.dado;
end;
07/12/2016
29
30. Implementação: Impressão da Fila
procedure imprimir();
begin
if(fila = nil)then
begin
writeln('Fila vazia');
end
else
begin
pAux1:=fila;
while(pAux1^.proximo <> fila)do
//imprimindo fila
begin
write(' Elemento : ');
writeln(pAux1^.dado);
pAux1 := pAux1^.proximo;
end; //while
write(' Elemento : ');
writeln(pAux1^.dado);
end; //if
end; //begin07/12/2016
30
32. Referências
1. Deitel, H. M.; Deitel, P. J. Java: Como Programar. Tradução: Edson
Furmankiewicz; Revisão Técnica: Fábio Luis Picelli Lucchini. 6.ª Edição. São Paulo:
Pearson Prentice Hall, 2005. Cap. 17, p. 607 – 644.
2. Deitel, H. M.; Deitel, P. J. C: Como Programar. Tradução: Daniel Vieira; Revisão
Técnica: César Caetano. 6.ª Edição. São Paulo: Pearson Prentice Hall, 2011. Cap. 12,
p. 379 – 413.
3. Deitel, H. M.; Deitel, P. J. C++: Como Programar. Tradução: Edson
Furmankiewicz; Revisão Técnica: Fábio Luis Picelli Lucchini. 5.ª Edição. São Paulo:
Pearson Prentice Hall, 2006. Cap. 21, p. 789 – 845.
4. Schildt, H.; Skrien, D. Programação com Java: Uma Introdução Abrangente.
Tradução: Aldir José Coelho Cêrrea da Silva. Revisão Técnica: Maria Lúcia Blanck
Lisbôa. Porto Alegre: AMGH, 2013. Cap. 25, p. 911 – 966
07/12/2016
32
33. Referências
5. Ziviani, N. Projeto de Algoritmos com Implementações em Pascal e C.
3.ª ed. rev. e amp. São Paulo: Cengage Learning, 2015. Cap. 3, p. 69 – 100.
6. Forouzan, B., Mosharraf, F. Fundamentos da Ciência da Computação.
Tradução: Solange Aparecida Visconti. Revisão Técnica: Ronaldo A. L.
Gonçalves. São Paulo: Cengage Learning, 2011. Cap. 11, p. 257 – 278.
7. Pereira, S. L. Estruturas de Dados Fundamentais: Conceitos e
Aplicações. São Paulo: Érica, 1996.
8. Ascencio, A. F. G.; Araújo, G. S. Estruturas de Dados: Algoritmos,
Análise da Complexidade e Implementações em Java e C/C++. São Paulo:
Pearson Prentice Hall, 2010. Cap. 4, p.183 – 200.
07/12/2016
33