2

Estrutura de dados: Fila

#Estrutura de dados
Leo Andrade
Leo Andrade

A estrutura de dados é um dos temas fundamentais da ciência da computação, mas para entender este assunto, precisamos saber o conceito de algoritmo, pois são estes que organizam os dados.


Dados quando organizados de forma coerente formam estruturas que podem solucionar problemas de alta complexidade. Podemos usar vetores quando for uma estrutura estática ou ponteiros quando for dinâmica.


Hoje vou falar um pouco sobre a estrutura de dados fila.

Filas são estruturas de dados onde o primeiro item a ser inserido é o primeiro item a ser retirado do array. Este tipo de estrutura é chamada de FIFO( First In First Out )


Por Exemplo:


Imaginem um array de tamanho 5 de início 0 e final 4

Vamos inserir alguns dados inteiros:

100

50

5

150

200

Vamos ter um array com 5 posições [ 0 , 1, 2, 3, 4 ]


lista[0] = 100 > Início


lista[1] = 50


lista[2] = 5


lista[3] = 150


lista[4] = 200 > Final


Então no nosso array, o primeiro numero inserido foi o lista[0] (100). Este vai ser o primeiro número q vamos retirar da nossa lista quando quisermos. Quando o retirarmos nosso array vai ficar deste jeito:


lista[1] = 50 > Início


lista[2] = 5


lista[3] = 150


lista[4] = 200 > Final


Nosso array agora se encontra com 4 valores, então possui um valor livre, vamo inserir mais um valor, 500.


lista[1] = 50 > Início


lista[2] = 5


lista[3] = 150


lista[4] = 200


lista[5] = 500 > Final


Deste modo nosso início se torna a posição numero 1 e nosso final a posição numero 5.


Vou deixar um algoritmo em c, para terem uma noção maior que é necessário para criar uma estrutura.


#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#define TAMANHO 3
#define LINHA "**********\n"
//INICIA UMA NOVA FILA
void Inicia_Fila(int *inicio, int *fim){
	*inicio = 0;
	*fim = -1;
}


//VERIFICA SE FILA ESTA VAZIA
bool Fila_Vazia(int inicio, int fim){
	if(inicio > fim) return true;
	else return false;
}


//VERIFICA SE FILA ESTA CHEIA
bool Fila_Cheia(int fim){
	if(fim == TAMANHO - 1) return true;
	else return false;
}


//INSERE DADO NA FILA
bool Insere(int fila[],int *inicio, int *termino, int dado){
	if(*termino - *inicio == TAMANHO - 1){
		printf(LINHA);
		printf("Erro! pilha cheia!\n");
		printf(LINHA);
		return false;
	}else{
		(*termino)++;
		fila[*termino] = dado;
		return true;
	}	
}


//REMOVE DADO DA FILA
bool Retira(int fila[], int *inicio,int *fim, int *x){
	if(*inicio > *fim){
		printf(LINHA);
		printf("Erro! Fila vazia!\n");
		printf(LINHA);
		return false;
	}else{
		*x = fila[*inicio];
		(*inicio)++;
	}
}
//LISTAR A FILA
int Listar(int fila[],int *inicio,int *fim){
	int i;
	if(*inicio > *fim){
		printf(LINHA);
		printf("Pilha vazia!\n");
		printf(LINHA);
	}else{
		printf(LINHA);
		printf("Inicio: %d\nFim: %d\n", *inicio, *fim);
	}
	for(i = *inicio; i <= *fim; i++){
		printf("fila[%d] => %d\n", i, fila[i]);
	}
}


int main(int argc, char** argv) {
	int fila[TAMANHO];
	int inicio, fim;
	int opcao = 0;
	int dado;
	bool operacao_realizada; 
	Inicia_Fila(&inicio,&fim);
	while(opcao >=0 && opcao <= 4){
		printf(LINHA);
		printf("ESCOLHER OPCAO\n");
		printf("1: INSERIR\n2: EXCLUIR\n3: LISTAR\n4: REINICIAR FILA\n\n");
		scanf("%d", &opcao);
		switch(opcao){
			case 1: printf("Digite um numero para inserir\n");
					scanf("%d", &dado);
					Insere(fila,&inicio,&fim,dado);
					break;
			case 2: operacao_realizada = Retira(fila,&inicio,&fim,&dado);
					if(operacao_realizada == true){
						printf("Operacao realizada! Elemento removido: %d\n", dado);
					}
					break;
			case 3: Listar(fila,&inicio,&fim);
					break;
			case 4: Inicia_Fila(&inicio,&fim);
					break;		
		};
	}
	
	return 0;
}
0
35

Comentários (1)

0
R

Rafael Ramos

18/05/2021 08:48

Deveras interessante

Carioca sonhador

Brasil