#include <stdio.h>
// TAD Fila
// TAD Fila
#define MAX 900000
// definição do tipochave
typedef int TipoChave;
// definição do registro tipo item
typedef struct {
TipoChave Chave;
} TipoItem;
// definição do apontador para célula
typedef struct TipoCelula *TipoApontador;
// definição para o tipo célula
typedef struct TipoCelula {
TipoItem Item;
TipoApontador Prox;
} TipoCelula;
// definição do tipo fila
typedef struct{
TipoApontador Frente, Tras;
int Tamanho;
} TipoFila;
// função que inicializa a fila
void FFVazia(TipoFila *Fila);
// função que verifica se a fila está vazia
int VaziaFila(TipoFila Fila);
// função que enfileira um item na fila (TRÁS)
void Enfileira(TipoItem x, TipoFila *Fila);
// função que desenfileira um item da fila (FRENTE)
void Desenfileira(TipoFila *Fila, TipoItem *Item);
// função que retorna o tamanho da fila
int TamanhoFila(TipoFila Fila);
// função que informa o elemento na frente da fila
TipoItem FrenteFila(TipoFila *Fila);
// função que informa o elemento atrás na fila
TipoItem TrasFila(TipoFila *Fila);
// função que imprime o estado atual da fila
void ImprimirFila(TipoFila Fila);
// função que cria uma nova fila
void FFVazia(TipoFila *Fila)
{ // cria a célula cabeça
Fila->Frente = (TipoApontador)
malloc(sizeof(TipoCelula));
// inicializa a frente e trás
Fila->Tras = Fila->Frente;
Fila->Frente->Prox = NULL;
Fila->Tamanho = 0;
}
// função que verifica se a
//fila está vazia
int VaziaFila(TipoFila Fila)
{ // se a célula na frente for igual
// a célula atrás, ela está
// vazia
return (Fila.Frente == Fila.Tras);
}
// função que Enfileira um item na fila
void Enfileira(TipoItem x, TipoFila *Fila)
{ Fila->Tras->Prox = (TipoApontador)
malloc(sizeof(TipoCelula));
Fila->Tras = Fila->Tras->Prox;
Fila->Tras->Item = x;
Fila->Tras->Prox = NULL;
Fila->Tamanho++;
}
// função que desenfileira o item na
// frente da fila
void Desenfileira(TipoFila *Fila,
TipoItem *Item)
{ TipoApontador q;
if (VaziaFila(*Fila)) {
printf("Erro fila esta vazia\n"); return; }
q = Fila->Frente;
Fila->Frente = Fila->Frente->Prox;
*Item = Fila->Frente->Item;
Fila->Tamanho--;
free(q);
}
// função para obter Tamanho da fila
int TamanhoFila(TipoFila Fila)
{ return (Fila.Tamanho); }
// função para obter o elemento na frente da fila
TipoItem FrenteFila(TipoFila *Fila)
{ TipoItem item; item.Chave = -1;
if (VaziaFila(*Fila) == 0){
item = Fila->Frente->Prox->Item;
} return (item);
}
// função para obter o elemento atrás na fila
TipoItem TrasFila(TipoFila *Fila)
{ TipoItem item; item.Chave = -1;
if (VaziaFila(*Fila) == 0){
item = Fila->Tras->Item;
} return (item);
}
void ImprimeFila(TipoFila Fila)
{ TipoApontador Aux;
Aux = Fila.Frente->Prox;
printf("FRENTE: ");
while (Aux != NULL)
{ printf("%d | ", Aux->Item.Chave);
Aux = Aux->Prox;
} printf("TRAS \n");
}
/*
============================================================================
Name : projeto-aed-tad-fila.c
Author : waldir
Version :
Copyright : Your copyright notice
Description : Hello World in C, Ansi-style
============================================================================
*/
#include <stdio.h>
#include <stdlib.h>
#include "tad-fila.h"
int main(void) {
TipoFila fila; TipoItem item; int i; int chaves[] = {10, 11, 12, 45, 1};
FFVazia(&fila); // Inicializa a fila
printf("Fila vazia?: %d\n", VaziaFila(fila)); // fila vazia?
item = FrenteFila(&fila); // elemento na frente da fila
printf("Elemento na frente da fila: %d\n", item.Chave);
for (i = 0; i < 5; i++){ /*Enfileira cada chave */
item.Chave = chaves[i]; Enfileira(item, &fila);
printf("Enfileirou: %3d \n", item.Chave);
ImprimeFila(fila);
}
int tam = TamanhoFila(fila); // tamanho da fila
printf("Tamanho da fila: %d \n", tam);
printf("Fila vazia?: %d\n", VaziaFila(fila)); // fila vazia?
item = FrenteFila(&fila); // elemento na frente da fila
printf("Elemento na frente da fila: %d\n", item.Chave);
for (i = 0; i < tam; i++) { /*Desenfileira cada chave */
Desenfileira(&fila, &item);
printf("Desenfileirou: %3d \n", item.Chave);
ImprimeFila(fila);
}
printf("Tamanho da fila: %d\n", TamanhoFila(fila)); // tamanho da pilha
printf("Fila vazia?: %d\n", VaziaFila(fila)); // fila vazia?
system("PAUSE");
return EXIT_SUCCESS;
}
Nenhum comentário:
Postar um comentário