Um exemplo de fila na computação é a fila de impressão. Quando temos um computador ligado a uma impressora ao mandarmos imprimir os arquivos, eles vão para uma fila de impressão e assim impressos de acordo com a ordem.


#include <stdio.h>;
#include <stdlib.h>;
#define N 50
typedef struct fila {
float info[N];
int n;
int ini;
}Fila;
Fila *f = (Fila*)malloc(sizeof(Fila));
f->n=0;
f->ini=0;
return f;
}
int estaVazia(Fila *f){
return(f->ini==0 && f->n==0);
}
void push(Fila *f, float v){
if(f->n==N){
printf("\nCapacidade da fila esgotada.\n");
return;
}else{
f->info[f->n]=v;
f->n++;
}
}
float pop(Fila *f){
float v;
if(vazia(f)){
printf("\nFila vazia.\n");
}else{
v = f->info[f->ini];
f->ini++;
}
return v;
}
void liberar(Fila *f){
free(f);
}
void imprimir(Fila *f){
int i;
for(i=f->ini;i<f->n;i++)
printf("\n%.2f",f->info[i]);
printf("\n");
}
#include <stdlib.h>
#include <stdio.h>
#define N 100
struct fila {
int ini, fim;
float vet[N];
}
Fila* f = (Fila*) malloc(sizeof(Fila));
f->ini = f->fim = 0;
return f;
}
int incremento(int i){
return (i+1)%N;
}
void push(Fila* f, float v){
if (incremento(f->fim) == f->ini) {
printf("Capacidade da fila estourou.\n");
exit(1);
}
f->vet[f->fim] = v;
f->fim = incremento(f->fim);
}
float pop(Fila* f){
float v;
if (vazia(f)) {
printf("Fila vazia.\n");
exit(1);
}
v = f->vet[f->ini];
f->ini = incr(f->ini);
return v;
}
int vazia (Fila* f){
return (f->ini == f->fim);
}
void libera (Fila* f){
free(f);
}
#include <stdlib.h>
#include <stdio.h>
typedef struct nolista{
float info;
struct nolista* prox;
}Nolista;
struct Fila{
Nolista* ini;
Nolista* fim;
};
Fila *f= (Fila*)malloc(sizeof(Fila));
f->ini = f->fim = NULL;
return f;
}
void push(Fila* f, float v) {
Nolista* n = (Nolista*)malloc(sizeof(Nolista));
n->info = v;
n->prox = NULL;
if(f->fim != NULL)
f->fim->prox = n;
else
f->ini = n;
f->fim = n;
}
int estaVazia(Fila* f) {
return (f->ini == NULL);
}
float pop(Fila* f) {
Nolista* t;
float valor;
if(estaVazia(f)){
printf("Fila vazia!");
exit(1);
}
t = f->ini;
valor = t->info;
f->ini = t->prox;
if(f->ini == NULL)
f->fim = NULL;
free(t);
return valor;
}
float verPrimeiroElemento (Fila* f) {
return (f->ini->info);
}
void liberarFila(Fila* f) {
Nolista* q = f->ini;
while(q != NULL){
Nolista* t = q->prox;
free(q);
q = t;
}
free(f);
}
void imprimir(Fila* f){
Nolista* q;
for(q = f->ini; q!= NULL; q = q->prox)
printf("%.2f\n", q->info);
}
Todo os exemplos de código acima foram extraÃdos de uma solução completa que está disponÃvel no Github.
No próximo post darei continuidade a esta série sobre estrutura de dados escrevendo um pouco sobre listas, que correspondem a uma sequência ordenada de elementos do mesmo tipo podendo ser estáticas, dinâmicas, encadeadas, duplamente encadeadas e circulares.




Ater Fernandes Ferrari
25th fev, 11
Ótimo artigo minha amiga Andressa. Muito bem escrito e desenvolvido!!!
Vale lembrar, também, que pilhas, filas e arvores esão no top da programação para sistemas computacionais, pois geram eficiência e uma organização coerente, possibilitando um melhor desempenho dos programas.
Parabéns pelo artigo.
atAter Fernandes Ferrari
25th fev, 11
“estão” e não esão hehe. sorry.
atSpidey
29th set, 11
Dá pra misturar os dois modos, fazer uma fila circular sem usar ponteiros, só controlando o Ãndice de inÃcio e o tamanho da fila.
atProgramação é massa por isso, o mesmo problema pode ser resolvido de várias formas, e SEMPRE alguém vai pensar e fazer de forma diferente. Mesmo que essa outra forma não seja melhor que a sua, para um próximo problema pode ser, daà o ponto interessante da interação entre os programadores.
Andressa Agnhesi
29th set, 11
Concordo Cláudio! Visões diferentes sempre tem, por isso é importante a troca de informações e conhecimentos. Acaba forçando o jeito de pensar e melhorando bastanteˆˆ
at