Estrutura de dados: fila simples

Artigo composto por uma apresentação no Prezi explicando os conceitos básicos da estrutura de dados de fila a implementação em C++ do funcionamento disponibilizado na apresentação. O código mostrado possui um link para editor online e que permite o teste da execução e aplique alterações para teste.

Link para a presentação: https://prezi.com/2cnztgnpl03g/?token=50b8a4b3eaa05f3b7c027dcef47952b350f7f8ded14135a7186db47bc2f735b9

Código em C++

Implementação de uma fila simples e com isso limitada. A ideia é bastante parecida com a implementação da pilha mostrada em Estrutura de dados: pilha

/*
Implementação de pilha simples
Autor: Benjamin Grando Moreira
*/

#include <iostream>
#define tamanho 5
using namespace std;

//define a estrutura que será a fila
//a estrutura armazena a indicação do inicio e final da fila e um vetor com os itens (valores) da fila
typedef struct{
    int ini = 0;
    int fim = 0;
    int item [tamanho] ;
} FILA;

//retorna se a fila está vazia ou não
bool filaVazia(FILA p){
    if(p.ini == p.fim) {
        return true;
    } else {
        return false;
    }
}

//retorna se a fila está cheia ou não
bool filaCheia(FILA p) {
	int tam = sizeof(p.item)/sizeof(int); //determina o tamanho do vetor
	
    if (p.fim < tam) {
        return false;
    } else {
        return true;
    }
}

//adiciona valor na fila
void enfilera(FILA &p, int x){
    p.item[p.fim++] = x;
}

//remove valor da fila
int desenfilera(FILA &p){
    return (p.item[p.ini++]) ;
}

//mostra os valores armazenados na fila
void mostraFila(FILA p) {
	cout << "Valores da fila: ";
	for (int i = p.ini; i < p.fim; i++) {
		cout << p.item[i] << " ";
	}
	cout << "\n";
}


//Código para testar a implementação
int main(){
    FILA s; //criar a fila
    
    //Verificar que a fila está vazia
    if(filaVazia(s)) {
        cout<<"A fila esta vazia."<<endl;
    } else {
        cout<<"A fila nao esta vazia."<<endl;
    }
    
    //Enfilera valor e verifica se a fila está vazia
    enfilera(s,10);
    if(filaVazia(s)) {
        cout<<"A fila esta vazia."<<endl ;
    } else {
        cout<<"A fila nao esta vazia."<<endl;
    }
    
    //Insere 3 elementos na fila
    enfilera(s,20);
    enfilera(s,30);
    enfilera(s,40);

	//Mostra os valores da fila
    mostraFila(s);
    
    //Verifica que a fila está cheia
    if(filaCheia(s)) {
        cout<<"A fila esta cheia."<<endl;
    } else {
        cout<<"A fila nao esta cheia."<<endl;
    }
    
    //Enfilera valor e verifica se a fila esta cheia
    enfilera(s,50);
    mostraFila(s);
    if(filaCheia(s)) {
        cout<<"A fila esta cheia."<<endl;
    } else {
        cout<<"A fila nao esta cheia."<<endl;
    }
    
    //Desempilha e mostrar o valor desempilhado
    cout<<"Valor removido da fila: "<< desenfilera(s) <<endl;

	mostraFila(s);

    if(filaCheia(s)) {
        cout<<"A fila esta cheia."<<endl;
    } else {
        cout<<"A fila nao esta cheia."<<endl;
    }
    
    return 0;
}

Observe que essa é uma implementação simples da fila e ela mostrará que fila está cheia mesmo quando ela não estiver (desde que o indicador de fim tenha chego ao final da fila.

Experimente esse código online: http://ideone.com/y5aWLd

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Este site utiliza o Akismet para reduzir spam. Saiba como seus dados em comentários são processados.