Introdução
Uma fila é uma coleção de itens, onde o primeiro item adicionado à lista deve ser o primeiro item a ser removido a seguir. Assim, à medida que os itens são adicionados à coleção, ela cresce em tamanho, i.e. está crescendo em comprimento. Sempre que qualquer item deve ser removido, ele deve ser o primeiro a ser adicionado. Se os itens forem removidos continuamente, o próximo item removido é o segundo; o terceiro é removido depois, e assim por diante.
Depois que o primeiro item da lista original foi removido, o segundo se torna o primeiro item. Após o segundo item ter sido removido, o terceiro se torna o primeiro item e assim por diante.
Um bom exemplo da vida real de fila é quando as pessoas fazem fila para esperar por um serviço ou mercadoria. A primeira pessoa é atendida antes da última. No entanto, a fila de que falamos neste tutorial, é a fila de software, conforme projetado em C++.
FIFO
FIFO significa Primeiro a Entrar, Primeiro a Sair. É outra forma de valorizar a fila. Isso significa que o primeiro item a entrar na lista, é o primeiro item a ser removido, sempre que a remoção ocorrer. O início da lista é denominado cabeça ou frente; o final da lista é chamado de costas ou cauda.
Operações Essenciais
Uma fila de software deve ter pelo menos as seguintes operações:
Empurre
Esta operação adiciona um novo elemento na parte de trás da fila. Esta operação é oficialmente chamada de enfileirar.
mudança
Esta operação remove o primeiro elemento da fila, e o segundo elemento se torna o novo primeiro elemento. Esta operação é oficialmente chamada de dequeue. Chama-se pop em C++.
Este artigo explica como usar a estrutura de dados da fila C ++. Você deve conhecer os ponteiros e referências de C ++ para entender o restante deste artigo.
Classe e Objetos
Uma classe é um conjunto de variáveis e funções que funcionam juntas, onde as variáveis não têm valores atribuídos a. Quando os valores são atribuídos às variáveis, a classe se torna um objeto. Valores diferentes dados à mesma classe resultam em objetos diferentes; ou seja, objetos diferentes são da mesma classe com valores diferentes. A criação de um objeto a partir de uma classe é considerada uma instância do objeto.
O nome, fila, é uma classe. Um objeto criado a partir da classe de fila tem um nome escolhido pelo programador.
Uma função que pertence a uma classe é necessária para instanciar um objeto da classe. Em C ++, essa função tem o mesmo nome que o nome da classe. Os objetos criados (instanciados) a partir da classe têm nomes diferentes dados a eles, pelo programador.
Criar um objeto da classe significa construir o objeto; também significa instanciar.
Um programa C ++ que usa a classe de fila começa com as seguintes linhas na parte superior do arquivo:
#incluir#incluir
usando namespace std;
A primeira linha é para entrada / saída. A segunda linha é para permitir que o programa use todos os recursos da classe de fila. A terceira linha permite que o programa use os nomes no namespace padrão.
Sobrecarregando uma função
Quando duas ou mais assinaturas de função diferentes têm o mesmo nome, esse nome está sobrecarregado. Quando uma função é chamada, o número e tipo de argumentos determinam qual função é realmente executada.
Construção
filaA declaração a seguir instancia uma fila chamada, que do tipo int.
filaA fila esta vazia. A declaração começa com a palavra reservada, fila seguida por colchetes angulares com o tipo de dados. Então você tem o nome dado ao programador para a fila.
Construindo com lista de inicializador
A definição a seguir mostra como criar uma fila com lista de inicializadores:
filaDestruindo uma fila
Para destruir uma fila, basta deixá-la sair do escopo.
Acesso ao elemento da fila
push (valor)
Uma fila é uma lista do primeiro a entrar, primeiro a sair. Então, cada valor é adicionado na parte de trás. O segmento de código a seguir cria uma fila vazia, após a qual cinco valores flutuantes são adicionados na parte de trás:
filaThat.empurre (1.1);
That.empurre (2.2);
That.empurre (3.3);
That.empurre (4.4);
That.empurre (5.5);
size () const
Isso retorna o número de elementos na fila. O código a seguir ilustra:
filaThat.empurre (1.1); That.empurre (2.2); That.empurre (3.3); That.empurre (4.4); That.empurre (5.5);
cout << que.size() << '\n';
A saída é 5.
frente()
Isso retorna uma referência ao primeiro elemento da fila, sem remover o elemento. A saída do código a seguir é 1.1.
filaThat.empurre (1.1); That.empurre (2.2); That.empurre (3.3); That.empurre (4.4); That.empurre (5.5);
cout << que.front() << '\n';
O elemento não é removido da fila.
front () const
Quando a construção da fila é precedida por const, a expressão “front () const” é executada em vez de “front ()”. É usado no código a seguir, por exemplo.
fila constcout << que.front() << '\n';
Uma referência constante é retornada. O elemento não é removido do vetor. Os elementos da fila não podem ser alterados.
voltar()
Isso retorna uma referência ao último elemento da fila, sem remover o elemento. A saída do código a seguir é 5.5.
filaThat.empurre (1.1); That.empurre (2.2); That.empurre (3.3); That.empurre (4.4); That.empurre (5.5);
cout << que.back() << '\n';
back () const
Quando a construção da fila é precedida por const, a expressão “back () const” é executada em vez de “back ()”. É usado no código a seguir, por exemplo.
fila constcout << que.back() << '\n';
Uma referência constante é retornada. O elemento não é removido da fila. Com a const anterior para a construção da fila, os elementos na fila não podem ser alterados.
Capacidade da fila
size () const
- Veja acima
empty () const
Retorna 1 para verdadeiro se não houver elementos na fila ou 0 para falso se a fila estiver vazia. O código a seguir ilustra isso:
filacout << que1.empty() << '\n';
fila
cout << que2.empty() << '\n';
O resultado é:
01
Modificadores de fila
pop ()
Uma fila é FIFO, então qualquer elemento que precise ser removido deve ser removido do topo (cabeça) da fila. Esta função de membro remove o primeiro elemento sem retorná-lo. O código a seguir ilustra isso:
filacout << que.front() << '\n';
That.pop ();
cout << que.size() << '\n';
O resultado é:
1.14
uma.troca (b)
Duas filas podem ser trocadas, conforme ilustrado neste segmento de código:
filafila
que1.troca (que2);
cout << "First element and size of que1:
"<< que1.front() <<", "<< que1.size() << '\n';
cout << "First element and size of que2 "<<
que2.frente() <<", "<< que2.size() << '\n';
O resultado é:
Primeiro elemento e tamanho de que1: 10, 2
Primeiro elemento e tamanho de que2: 1.1, 5
Observe que o comprimento de uma fila é aumentado, se necessário. Além disso, os valores que não tiveram substituições são substituídos por algum valor padrão. Os tipos de dados devem ser do mesmo tipo.
Operadores relacionais e de igualdade para filas
Para caracteres comuns em C ++, em ordem crescente, os números vêm antes das letras maiúsculas, que vêm antes das letras minúsculas. O caractere de espaço vem antes de zero e todos eles.
Operadores de igualdade
Retorna 1 para verdadeiro e 0 para falso.
O == Operador
Retorna 1 se as duas filas tiverem o mesmo tamanho e os elementos correspondentes forem iguais; caso contrário, retorna 0. Exemplo:
filafila
int num = que1 == que2;
cout << num << '\n';
A saída é: 0.
O != Operador
- oposto do anterior. Exemplo:
filafila
int num = que1 != que2;
cout << num << '\n';
O resultado é: 1.
Operadores relacionais
Retorna 1 para verdadeiro e 0 para falso.
O < Operator
Retorna 1 se a primeira fila for o subconjunto inicial da segunda fila, com os elementos das duas partes iguais sendo os mesmos e na mesma ordem. Se ambas as filas forem do mesmo tamanho ou tamanhos diferentes, e movendo-se da esquerda para a direita, um elemento é encontrado na primeira fila que é menor que o elemento correspondente na segunda fila, então 1 ainda será retornado. Caso contrário, 0 é retornado. Exemplo:
filafila
int num = que1 < que2;
cout << num << '\n';
A saída é 1. < does not include the case when the size and order are the same.
O> Operador
- oposto do anterior. Exemplo:
filafila
int num = que1> que2;
cout << num << '\n';
Produto: 0
O <= Operator
- igual a < but includes the case when the size and order are the same. Example:
filafila
int num = que1 <= que2;
cout << num << '\n';
Produto: 1
O> = Operador
- oposto do anterior. Exemplo:
filafila
int num = que1> = que2;
cout << num << '\n';
Produto: 0
Classe e seus objetos instanciados
Um valor está para um tipo de dados, assim como um objeto instanciado está para uma classe. A construção da fila também pode aceitar uma classe como um tipo de dados. O programa a seguir ilustra isso:
#incluir#incluir
usando namespace std;
classe TheCla
público:
int num;
estático char ch;
void func (char cha, const char * str)
cout << "There are " << num << " books worth " << cha << str << " in the store." << '\n';
static void fun (char ch)
if (ch == 'a')
cout << "Official static member function" << '\n';
;
int main ()
TheCla obj1; TheCla obj2; TheCla obj3; TheCla obj4; TheCla obj5;
fila
That.push (obj1); That.push (obj2); That.push (obj3); That.push (obj4); That.push (obj5);
cout << que.size() << '\n';
return 0;
A saída é 5.
Lista Vinculada
A lista de filas é tecnicamente chamada de lista vinculada. Existem dois tipos de listas vinculadas para a fila: lista unida simples e lista duplamente vinculada.
Um elemento de lista vinculada individualmente pode ser implementado por uma estrutura de dois membros. Um membro mantém um ponteiro para o próximo elemento e o outro membro mantém o datum (singular para dados).
Um elemento de lista duplamente vinculado pode ser implementado por uma estrutura de três membros. O membro do meio contém o datum, enquanto o primeiro e o terceiro membros contêm ponteiros para seus elementos adjacentes.
Aplicações da Fila
A fila é uma estrutura de dados first-in-first-out. Existem situações na computação em que os dados chegam na forma de uma fila, exigindo um comportamento primeiro a entrar, primeiro a sair.
Compartilhando recursos de computador
Um recurso em um computador é qualquer componente físico ou virtual de disponibilidade limitada. Eles incluem a CPU, placa de vídeo, disco rígido e memória. Compartilhar tal recurso precisa de uma fila.
Manipulação de interrupções
Os periféricos de computador precisam interromper o computador de vez em quando. As interrupções devem ser tratadas da mesma maneira que chegaram. Isso precisa de uma fila.
Gerenciar informações.
A fila pode ser usada, por exemplo, para gerenciar arquivos de aplicativos para um trabalho, se os arquivos estiverem armazenados no computador.
Conclusão
Uma fila é uma estrutura de dados de lista, que pode ser uma lista unida ou uma lista duplamente vinculada. Via de regra, o primeiro elemento que entra na lista é o primeiro elemento a sair. C ++ fornece uma estrutura de dados de fila em sua biblioteca padrão. As categorias de funções de membro e operadores disponíveis para esta estrutura são construção de fila, acesso a elemento de fila, capacidade de fila, modificadores de fila e operadores sobrecarregados de fila.
Qualquer estrutura de dados de fila deve fornecer, pelo menos, as funções de membro push () e pop (). push () significa enviar um novo elemento no final da fila; e pop () significa remover o elemento que está na frente da fila. Infelizmente, em C ++, essas funções não retornam o valor enviado ou exibido. Portanto, para saber o último elemento antes de empurrar, a função extra back () deve ser usada; e para saber o primeiro elemento antes de popping, a função extra front () deve ser usada.
Um valor está para um tipo de dados, assim como um objeto instanciado está para uma classe. Portanto, uma classe específica pode ser usada como um tipo de dados para a instanciação do modelo de fila. Objetos diferentes para a classe tornam-se valores diferentes para a classe.
A fila tem aplicativos no computador. Pode ser usado, por exemplo, para gerenciar arquivos de aplicativos para um trabalho, se os arquivos estiverem armazenados no computador.
Chrys