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...case

Quantidade de visualizações: 662 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:

#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
...


Link para compartilhar na Internet ou com seus amigos:

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

E-Book 350 Exercícios Resolvidos de Java - PDF com 500 páginas
Domine lógica de programação e a linguagem Java com o nosso E-Book 350 Exercícios Exercícios de Java, para você estudar onde e quando quiser.

Este e-book contém exercícios resolvidos abrangendo os tópicos: Java básico, matemática e estatística, programação dinâmica, strings e caracteres, entrada e saída, estruturas condicionais, vetores e matrizes, funções, laços, recursividade, internet, arquivos e diretórios, programação orientada a objetos e muito mais.
Ver Conteúdo do E-book
E-Book 650 Dicas, Truques e Exercícios Resolvidos de Python - PDF com 1.200 páginas
Domine lógica de programação e a linguagem Python com o nosso E-Book 650 Dicas, Truques e Exercícios Exercícios de Python, para você estudar onde e quando quiser.

Este e-book contém dicas, truques e exercícios resolvidos abrangendo os tópicos: Python básico, matemática e estatística, banco de dados, programação dinâmica, strings e caracteres, entrada e saída, estruturas condicionais, vetores e matrizes, funções, laços, recursividade, internet, arquivos e diretórios, programação orientada a objetos e muito mais.
Ver Conteúdo do E-book

Linguagens Mais Populares

1º lugar: Java
2º lugar: Python
3º lugar: C#
4º lugar: PHP
5º lugar: C
6º lugar: Delphi
7º lugar: JavaScript
8º lugar: C++
9º lugar: VB.NET
10º lugar: Ruby



© 2025 Arquivo de Códigos - Todos os direitos reservados
Neste momento há 41 usuários muito felizes estudando em nosso site.