Fila dinâmica
Declarando a fila
#include <stdio.h>
#include<stdlib.h>
typedef struct{
int chave;
} REGISTRO;
typedef struct item{
REGISTRO r;
struct item* prox;
} ITEM;
typedef struct{
ITEM *inicio;
ITEM *fim;
int qtde;
} FILA;
*️⃣ Funções de manipulação da fila
Inicializando a fila estática
void inicializar(FILA *f){
f->inicio = NULL;
f->fim = NULL;
f->qtde = 0;
}
Inserindo um item na fila
void inserir(FILA *f, REGISTRO r){
ITEM *novo = criarItem(r);
if(novo){
if(!f->inicio){
f->inicio = novo;
}
else if(f->fim){
f->fim->prox = novo;
}
f->fim = novo;
f->qtde++;
}
}
Removendo item da fila
void remover(FILA *f){
if(f->inicio){
ITEM *excluir = f->inicio;
f->inicio = f->inicio->prox;
free(excluir);
f->qtde--;
}
}
Imprimindo a fila
A lógica de impressão da fila pode ser um pouco diferente daquela a que estamos acostumados. Aqui, a variável i
do laço de repetição não indica a posição a ser impressa, mas representa cada item existente na fila.
void imprimir(FILA *f){
ITEM* pos = f->inicio;
while(pos){
printf("%d\n", pos->r.chave);
pos = pos->prox;
}
}
🧑🏻💻 Testando a fila
int main(void){
FILA f;
inicializarFila(&f);
inserir(&f, (REGISTRO){10});
inserir(&f, (REGISTRO){20});
inserir(&f, (REGISTRO){30});
inserir(&f, (REGISTRO){40});
imprimir(f);
remover(&f);
remover(&f);
inserir(&f, (REGISTRO){50});
imprimir(f);
}