Estrutura de dados e algoritmos - fila
Fila é uma estrutura de dados abstrata, um tanto semelhante a Pilhas. Ao contrário das pilhas, uma fila está aberta em ambas as extremidades. Uma extremidade é sempre usada para inserir dados (enfileirar) e a outra é usada para remover dados (desenfileirar). A fila segue a metodologia First-In-First-Out, ou seja, o item de dados armazenado primeiro será acessado primeiro.
Um exemplo do mundo real de fila pode ser uma estrada de mão única de faixa única, onde o veículo entra primeiro e sai primeiro. Mais exemplos do mundo real podem ser vistos como filas nos guichês e pontos de ônibus.
Representação de fila
Como agora entendemos que na fila, acessamos ambas as extremidades por motivos diferentes. O diagrama a seguir fornecido abaixo tenta explicar a representação da fila como estrutura de dados -
Como nas pilhas, uma fila também pode ser implementada usando Arrays, Linked-lists, Pointers e Structures. Para fins de simplicidade, devemos implementar filas usando uma matriz unidimensional.
Operações básicas
As operações de fila podem envolver inicializar ou definir a fila, utilizá-la e, em seguida, apagá-la completamente da memória. Aqui, devemos tentar entender as operações básicas associadas às filas -
enqueue() - adicionar (armazenar) um item à fila.
dequeue() - remover (acessar) um item da fila.
Poucas funções a mais são necessárias para tornar eficiente a operação de fila mencionada acima. Estes são -
peek() - Obtém o elemento na frente da fila sem removê-lo.
isfull() - Verifica se a fila está cheia.
isempty() - Verifica se a fila está vazia.
Na fila, sempre retiramos da fila (ou acessamos) dados, apontados por front ponteiro e enquanto enfileiramos (ou armazenamos) dados na fila, ajudamos rear ponteiro.
Vamos primeiro aprender sobre as funções de suporte de uma fila -
olhadinha()
Esta função ajuda a ver os dados no frontda fila. O algoritmo da função peek () é o seguinte -
Algorithm
begin procedure peek
return queue[front]
end procedure
Implementação da função peek () na linguagem de programação C -
Example
int peek() {
return queue[front];
}
está cheio()
Como estamos usando um array de dimensão única para implementar a fila, apenas verificamos se o ponteiro traseiro atinge MAXSIZE para determinar se a fila está cheia. No caso de mantermos a fila em uma lista ligada circular, o algoritmo será diferente. Algoritmo da função isfull () -
Algorithm
begin procedure isfull
if rear equals to MAXSIZE
return true
else
return false
endif
end procedure
Implementação da função isfull () na linguagem de programação C -
Example
bool isfull() {
if(rear == MAXSIZE - 1)
return true;
else
return false;
}
está vazia()
Algoritmo da função isempty () -
Algorithm
begin procedure isempty
if front is less than MIN OR front is greater than rear
return true
else
return false
endif
end procedure
Se o valor de front for menor que MIN ou 0, indica que a fila ainda não foi inicializada, portanto, está vazia.
Aqui está o código de programação C -
Example
bool isempty() {
if(front < 0 || front > rear)
return true;
else
return false;
}
Operação de enfileiramento
As filas mantêm dois indicadores de dados, front e rear. Portanto, suas operações são comparativamente difíceis de implementar do que as de pilhas.
As etapas a seguir devem ser realizadas para enfileirar (inserir) dados em uma fila -
Step 1 - Verifique se a fila está cheia.
Step 2 - Se a fila estiver cheia, produza um erro de estouro e saia.
Step 3 - Se a fila não estiver cheia, incremente rear ponteiro para apontar o próximo espaço vazio.
Step 4 - Adicione o elemento de dados ao local da fila, para onde a parte traseira está apontando.
Step 5 - sucesso de retorno.
Às vezes, também verificamos se uma fila foi inicializada ou não, para lidar com qualquer situação imprevista.
Algoritmo para operação de enfileiramento
procedure enqueue(data)
if queue is full
return overflow
endif
rear ← rear + 1
queue[rear] ← data
return true
end procedure
Implementação de enqueue () na linguagem de programação C -
Example
int enqueue(int data)
if(isfull())
return 0;
rear = rear + 1;
queue[rear] = data;
return 1;
end procedure
Operação de desenfileiramento
Acessar dados da fila é um processo de duas tarefas - acessar os dados onde frontestá apontando e remove os dados após o acesso. As seguintes etapas são realizadas para realizardequeue operação -
Step 1 - Verifique se a fila está vazia.
Step 2 - Se a fila estiver vazia, produz um erro de underflow e sai.
Step 3 - Se a fila não estiver vazia, acesse os dados onde front está apontando.
Step 4 - Incrementar front ponteiro para apontar para o próximo elemento de dados disponível.
Step 5 - Retorno com sucesso.
Algoritmo para operação de desenfileiramento
procedure dequeue
if queue is empty
return underflow
end if
data = queue[front]
front ← front + 1
return true
end procedure
Implementação de dequeue () na linguagem de programação C -
Example
int dequeue() {
if(isempty())
return 0;
int data = queue[front];
front = front + 1;
return data;
}
Para um programa de fila completo em linguagem de programação C, clique aqui .