Professional Documents
Culture Documents
1. Filas
Uma Fila é uma estrutura de dados do tipo FIFO (First In First Out), cujo funcionamento é
inspirado no de uma fila “natural”, na qual o primeiro elemento a ser inserido é sempre o
primeiro elemento a ser retirado. Um exemplo de uma fila é o caso de uma “fila de
supermercado”.
1.1. Método
Tipos de filas:
+ Filas de espera (queues)
o com duplo fim (deque “double-ended queue)
+ Filas de espera com prioridades (priority queues)
2. Filas de espera
2.1. Implementação em C++ usando arrays
2.1.1. Fila usando arrays
Vantagens:
B
Facilidade de implementação.
Desvantagens:
B
Vectores possuem um espaço limitado para armazenamento de dados.
B
Necessidade de definir um espaço grande o suficiente para a fila.
B
Necessidade de um indicador para o inicio e para o fim da fila.
Método de Implementação:
B
A adição de elementos à fila resulta no incremento do indicador do fim da fila
B
A remoção de elementos da fila resulta no incremento do indicador do inicio da
fila
Logicamente, assim, obtém-se rapidamente falta de espaço na fila para a inserção de
mais elementos! Solução?
Soluções comuns:
B
Juntar os elementos sempre à esquerda, cada vez que se faz u a remoção! (NÃO)
B
“Imaginar” o array como sendo um array circular, isto é, unir o fim do array ao
inicio da array! (Melhor Implementação)
0 1 2 3 4 5 6 7 8 9
Y
Soluções comuns:
Manter sempre uma posição vazia no array entre o indicador de inicio e o
indicador de fim, obrigando a definir uma capacidade de MAXFILA+1” para se
Y obter uma capacidade de MAXFILA”
Definir um indicador do número de elementos que a fila conté
2.1.3. Fila usando “array circular” com posição vazia entre inicio e fim
FILA::~FILA()
{ }
bool FILA::empty()
{
return(inicio == fim);
}
bool FILA::full()
{
return( inicio == ((fim +1) % MAXFILA) );
}
int FILA::remove()
{ int valor;
if ( empty() )
{
erro = 2; // erro: fila vazia
return(-1);
}
else
{
valor = dados[fim];
inicio = (inicio + 1) % MAXFILA;
}
return(valor);
}
int FILA::top()
{
if ( empty() )
{
erro = 2; // erro: fila vazia
return(-1);
}
else
{
return(dados[inicio]);
}
}
Desvantagens:
A implementação é fácil, contudo mais difícil que na utilização de vectores.
Método de Implementação:
Fila Vazia: Lista Ligada sem elementos
Fila Cheia:
Adição de elementos: consiste na adição de um elemento no fim da Lista Ligada.
Remoção de elementos: consiste em remover um elemento no início da Lista
Ligada.
class FILA
{
public:
FILA();
~FILA();
bool add(int elemento); // inserir um elemento
int remove(); // remover um elemento
bool empty(); // lista vazia?
bool full(); // lista cheia?
private:
struct no
{
int dados:
struct no * next;
};
struct no * inicio;
};
FILA::~FILA()
{
int valor;
while (! empty() )
{ valor = remove(); }
}
int FILA::remove()
{ int valor;
struct no *apt;
if (empty()==true)
{return(0);}
else
{
valor = inicio->valor;
apt = inicio->next;
delete inicio;
inicio = apt;
return(valor);
}
}
bool FILA::empty()
{
return(inicio==NULL);
}
*
Dicionário da Língua Portugue sa da Porto Editora: capicua = conjunto de algarismos ou
letras, cuja leitura é a mesma quando feita nos dois sentidos (lido de trás para diante ou
de diante para trás)
¾µ¿À»·À¼¿¸Á
¼Â ÃÄÀ"÷
Å$·ÆÇÄÈÈ ÂÉÀµ)¿·
8 de 10
ÊËÌ ÍÎ ÏÐ
ÑÒÑÒ
Ó
Filas de espera com prioridades, são filas na qual a ordem de armazenamento na fila não segue a
ordem de inserção (temporal), mas sim segundo um campo de prioridade.
Qualquer implementação de uma fila de espera pode ser modificada de modo a adquirir as
características de uma fila de espera com prioridades.
A implementação de uma fila de espera pode ser alterada de modo, a que a inserção sej
efectuada segundo o campo de prioridad es, não sendo necessário mais alterações à sua
implementação.
4. Resumo
Uma Fila é um (ADT - Abstract Data Type) tipo abstracto de dados, na qual são
conhecidas os aspectos essenciais de comportamento e funcionamento de um objecto sem
qualquer relação com a estrutura interna do objecto, e a forma como este é implementado.