Você está aqui: C ::: Estruturas de Dados ::: Filas |
Como criar uma fila em C usando um vetor de ints - Fila em C usando um menu de opções switch...caseQuantidade de visualizações: 741 vezes |
|
Como sabemos, a Fila é uma estrutura de dados do tipo FIFO - First-In, First-Out (Primeiro a entrar, primeiro a sair). Neste tipo de estrutura, o primeiro elemento a ser inserido é o primeiro a ser removido. Funciona exatamente igual a fila de um banco, fila para comprar ingressos, fila para pagar no caixa da lanchonete, etc. Nesta dica mostrarei como implementar um fila na linguagem C usando um vetor de inteiros, ou seja, um array. Para facilitar o seu entendimento eu coloquei um menu de opções, feito usando a estrutura de controle switch...case. Veja que coloquei a maioria das funções presentes em uma fila, a saber, exibir_fila(), enfileirar(), desenfileirar(), fila_cheia(), fila_vazia(), retornar_inicio() e retornar_fim(). Veja o código C completo: ----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
// tamanho máximo da fila
#define TAM_MAX 10
// vamos precisar de algumas variáveis globais
int fila[TAM_MAX]; // vetor de inteiros que servirá como fila
unsigned int tamanho = 0; // tamanho atual da fila
unsigned int inicio = 0; // índice que aponta para o início da fila
unsigned int fim = TAM_MAX - 1; // índice que aponta para o final da fila
// protótipo das funções (sim, alguns compiladores exigem isso)
void exibir_fila();
void enfileirar(int valor);
int desenfileirar();
int fila_cheia();
int fila_vazia();
int retornar_inicio();
int retornar_fim();
// função principal do programa
int main(int argc, char *argv[]){
// variáveis usadas na resolução do exercício
int opcao, valor, continuar = 1;
setlocale(LC_ALL,""); // para acentos do português
// laço infinito para o menu de opções
while (continuar){
printf("--------------------------------------\n");
printf(" SIMULAÇÃO DE FILA EM C \n");
printf("--------------------------------------\n");
printf("1. Enfileirar\n");
printf("2. Desenfileirar\n");
printf("3. Tamanho da Fila\n");
printf("4. Retornar Início da Fila\n");
printf("5. Retornar Final da Fila\n");
printf("6. Sair do Programa\n");
printf("--------------------------------------\n");
printf("Sua opção: ");
// lê a opção informada pelo usuário
scanf("%d", &opcao);
// trata as opções usando um menu switch
switch(opcao){
case 1: // enfileira um novo valor na fila
printf("\nInforme o valor a ser enfileirado: ");
scanf("%d", &valor);
// enfileira o valor
if(!fila_cheia()){
enfileirar(valor);
printf("\nValor enfileirado com sucesso.\n\n");
exibir_fila();
}
else{
printf("\nA fila está cheia.\n\n");
}
break;
case 2: // desenfileira um valor da fila
if(!fila_vazia()){
valor = desenfileirar();
printf("\nValor desenfileirado: %d\n\n", valor);
exibir_fila();
}
else{
printf("\nA fila está vazia.\n\n");
}
break;
case 3: // retorna o tamanho da fila
printf("\nA fila possui %d elementos.\n\n", tamanho);
break;
case 4: // retorna o elemento no início da fila
if(!fila_vazia()){
valor = retornar_inicio();
printf("\nValor no início da fila: %d\n\n", valor);
}
else{
printf("\nA fila está vazia.\n\n");
}
break;
case 5: // retorna o elemento no final da fila
if(!fila_vazia()){
valor = retornar_fim();
printf("\nValor no final da fila: %d\n\n", valor);
}
else{
printf("\nA fila está vazia.\n\n");
}
break;
case 6: // sai do menu de opções
printf("\nObrigado por usar o programa.\n");
continuar = 0;
break;
}
}
printf("\n\n");
system("PAUSE");
return 0;
}
// função que exibe o conteúdo da fila
void exibir_fila() {
int i;
// a fila está vazia
if(fila_vazia()){
printf("\nA fila está vazia.\n\n");
}
else {
printf("Conteúdo da fila:\n\n");
for (i = inicio; i <= fim; i++) {
printf("Item[%d]: %d\n", (i + 1), fila[i]);
}
printf("\n");
}
}
// função que testa se a fila está cheia
int fila_cheia(){
return (tamanho == TAM_MAX);
}
// função que testa se a fila está vazia
int fila_vazia(){
return (tamanho == 0);
}
// retorna o elemento no início da fila
int retornar_inicio(){
return fila[inicio];
}
// retorna o elemento no fim da fila
int retornar_fim(){
return fila[fim];
}
// função que permite enfileirar um novo valor na fila
void enfileirar(int valor){
// assegura que o final da fila não ultrapasse os limites
// do vetor
fim = (fim + 1) % TAM_MAX;
// aumentamos o tamanho da fila
tamanho++;
// enfileiramos o novo valor
fila[fim] = valor;
}
int desenfileirar(){
int valor;
// desenfileira um valor da fila
valor = fila[inicio];
// vamos evitar que o início da fila não ultrapassa
// os limites do vetor
inicio = (inicio + 1) % TAM_MAX;
// reduzimos o tamanho da fila
tamanho--;
// e retornamos o valor desenfileirado
return valor;
}
Ao executar este código C nós teremos o seguinte resultado:
--------------------------------------
SIMULAÇÃO DE FILA EM C
--------------------------------------
1. Enfileirar
2. Desenfileirar
3. Tamanho da Fila
4. Retornar Início da Fila
5. Retornar Final da Fila
6. Sair do Programa
--------------------------------------
Sua opção: 1
Informe o valor a ser enfileirado: 39
Valor enfileirado com sucesso.
Conteúdo da fila:
Item[1]: 56
Item[2]: 39
...
|
|
|
Desafios, Exercícios e Algoritmos Resolvidos de C |
Veja mais Dicas e truques de C |
Dicas e truques de outras linguagens |
E-Books em PDF |
||||
|
||||
|
||||
Linguagens Mais Populares |
||||
|
1º lugar: Java |






