Você está na página 1de 19

Estrutura de Dados

Filas

Roteiro

Definies Tipo de Dados Abstratos Exemplo Exerccios de Pilha e Fila

Definies

Fila uma estrutura linear de dados em que as operaes de entrada de dados so feitas em uma extremidade e as operaes de sada de dados so feitas em outra extremidade. As entradas so feitas no incio da fila e as sadas so feitas no fim da fila. Por esta razo, fila chamada de estrutura FIFO (do ingls First in / First out).

Definies
Circular Fila Simples
O que aconteceria ao tentarmos inserir outro elemento na fila?
ini ini 1 7 fim fim ini 8 2 fim ini 3 9 fim 4 fim 5 fim 6 fim

Uma fila simples daria mensagem de falta de espao, quando, na verdade, eles ainda existem. Queremos aproveit-los.

TDA filaest.h

Ser implementado em uma estrutura esttica (Vetor). O TDA no possui ser executado, ser utilizado como outra biblioteca. Atributos:

ini: marca o ndice do primeiro elemento da fila. fim: marca o ndice do ltimo elemento da fila. tot: armazena a quantidade de elementos na fila. info: vetor para armazenar os dados enfileirados.

TDA filaest.h

Mdulos:

iniciaFila: inicializa a Fila. filaVazia: retorna verdadeiro (1) se a fila estiver vazia, caso contrrio, retorna falso (0). filaCheia: retorna verdadeiro (1) se a fila estiver cheia, caso contrrio, retorna falso (0). adc adiciona 1 aos atributos ini ou fim, transforma a fila em fila circular (prximo slide). enfileira: insere dados na fila. desefileira: retira dados da fila.

TDA filaest.h
#define MAXFILA 100 typedef int elem; typedef struct fila { int ini, fim, tot; elem info[MAXFILA + 1]; };

TDA filaest.h

Procedimento: iniciaFila recebe uma fila, e inicializa seus atributos. void iniciaFila(fila *f) { f->ini = -1; f->fim = -1; f->tot = 0; }

TDA filaest.h
int filaVazia(fila *f) { return f->tot == 0 ? 1 : 0; } int filaCheia(fila *f) { return f->tot == MAXFILA ? 1 : 0; }

TDA filaest.h

Funo adc recebe um inteiro e faz o controle com relao ao ltimo endereo da fila, se o valor recebido por adc igual MAXFILA, ento ela retorna 0, repaginando o endereamento da fila; caso contrrio ela retorna o valor recebido mais um.
int adc(int x) { return x == MAXFILA ? 0 : x + 1; }

TDA filaest.h

Funo enfileira: recebe uma fila e um valor a ser inserido na fila. Insere um elemento na fila. Se a operao for bem sucedida, retorna 1, se a fila estiver cheia, retorna 0. (Obs. Quem chama a funo, deve tratar o erro.)

int enfileira(fila *f, elem x) { if(!filaCheia(f)) { f->fim = adc(f->fim); f->tot = f->tot + 1; f->info[f->fim] = x; return 1; } else return 0; }

int enfileira(fila *f, elem x) { if(!filaCheia(f)) { f->fim = adc(f->fim); f->tot = f->tot + 1; f->info[f->fim] = x; return 1; } else return 0; }

TDA filaest.h

Funo desenfileira: recebe uma fila e um parmetro por referncia. O parmetro por referncia receber o valor que ser retirado da fila. Se a operao for bem sucedida, retorna 1, se a fila estiver vazia, retorna 0. int desenfileira(fila *f, elem *x) { if(!filaVazia(f)) { f->ini = adc(f->ini); f->tot = f->tot - 1; *x = f->info[f->ini]; return 1; } else return 0; }

int desenfileira(fila *f, elem *x) { if(!filaVazia(f)) { f->ini = adc(f->ini); f->tot = f->tot - 1; *x = f->info[f->ini]; return 1; } else return 0; }

Exemplo faa um programa para manipular uma fila: entrada, sada, mostrar, limpar e sair.
#include <conio.h> #include <stdio.h> #include <iostream> #include "filaest.h" int tela(); main() { fila f, g; int vldesnf, op, n; iniciaFila(&f); op = tela(); int tela() { int op; system("cls"); printf("1 - enfileira"); printf("\n2 - desenfileira"); printf("\n3 - mostrar fila"); printf("\n4 - limpa a fila"); printf("\n5 - Sair"); printf("\n\nDigite uma opo: "); scanf("%d", &op); return op; }

Continuao
while(op > 0 && op < 5) { switch (op) { // Enfileirando case 1 : printf("Digite o valor a enfileirar: "); scanf("%d", &n); if(!enfileira(&f, n)) { printf("\nErro, fila cheia!"); getch(); } break;

Continuao
case 2 : if(desenfileira(&f, &n)) printf("\nValor desenfileirado: %d", n); else printf("\nErro! Fila vazia!"); getch(); break; case 3 : g = f; while(!filaVazia(&g)) { vldesnf = desenfileira(&g, &n); printf("%d ", n); } getch(); break;

Continuao
case 4 : while(!filaVazia(&f)) { vldesnf = desenfileira(&f, &n); printf("%d ", n); } getch(); break; case 5 : printf("saindo!"); getch(); return 1; default : break;
} op = tela(); } getch(); }

Exerccios
1. 2. 3. 4. 5.

6. 7.

Faa um programa que leia uma palavra e determine se a mesma ou no um palndrome. (ovo, mirim, marceloolecram, etc). Faa um programa e leia um nmero mostre o seu correspondente hexadecimal. Faa um programa que leia uma palavra, insira seus caracteres em uma fila. Inverta a fila. Insira uma funo em fila.h que receba uma fila e retorne o primeiro elemento da fila, sem o retirar. Insira uma funo em pilha.h que recebe uma pilha e mostre o ltimo elemento da pilha, obs: trate pilha como pilha e no como vetor. Faa um programa que receba uma fila e ordene-a, voc pode utilizar uma fila adicional e algumas variveis. Faa um programa que receba uma expresso aritmtica e determine e a mesma est balanceada com relao aos (), [] e {}.