aeds2/Codigos/u02 Estruturas de dados bas.../c/fila.c

145 lines
2.4 KiB
C

/**
* Lista estatica
* @author Max do Val Machado
* @version 2 01/2015
*/
#include <stdio.h>
#include <stdlib.h>
#define MAXTAM 6
#define bool short
#define true 1
#define false 0
int array[MAXTAM+1]; // Elementos da pilha
int primeiro; // Remove do indice "primeiro".
int ultimo; // Insere no indice "ultimo".
/**
* Inicializacoes
*/
void start(){
primeiro = ultimo = 0;
}
/**
* Insere um elemento na ultima posicao da
* @param x int elemento a ser inserido.
* @Se a fila estiver cheia.
*/
void inserir(int x) {
//validar insercao
if (((ultimo + 1) % MAXTAM) == primeiro) {
printf("Erro ao inserir!");
exit(1);
}
array[ultimo] = x;
ultimo = (ultimo + 1) % MAXTAM;
}
/**
* Remove um elemento da primeira posicao da fila e movimenta
* os demais elementos para o primeiro da mesma.
* @return resp int elemento a ser removido.
* @Se a fila estiver vazia.
*/
int remover() {
//validar remocao
if (primeiro == ultimo) {
printf("Erro ao remover!");
exit(1);
}
int resp = array[primeiro];
primeiro = (primeiro + 1) % MAXTAM;
return resp;
}
/**
* Mostra os array separados por espacos.
*/
void mostrar (){
int i;
printf("\n[");
for(i = primeiro; i != ultimo; i = ((i + 1) % MAXTAM)) {
printf(" %d", array[i]);
}
printf(" ]");
}
/**
* Retorna um bool indicando se a fila esta vazia
* @return bool indicando se a fila esta vazia
*/
bool isVazia() {
return (primeiro == ultimo);
}
int main(int argc, char** argv){
int x1, x2, x3;
printf("\n==== FILA ESTATICA ====");
start();
inserir(5);
inserir(7);
inserir(8);
inserir(9);
printf("\nApos insercoes(5, 7, 8, 9): ");
mostrar();
x1 = remover();
x2 = remover();
printf("\nApos remocoes (%d, %d):", x1, x2);
mostrar();
inserir(3);
inserir(4);
printf("\nApos insercoes(3, 4): ");
mostrar();
x1 = remover();
x2 = remover();
x3 = remover();
printf("\nApos remocoes (%d, %d, %d):", x1, x2, x3);
mostrar();
inserir(4);
inserir(5);
printf("\nApos insercoes(4, 5): ");
mostrar();
x1 = remover();
x2 = remover();
printf("\nApos remocoes (%d, %d):", x1, x2);
mostrar();
inserir(6);
inserir(7);
printf("\nApos insercoes(6, 7): ");
mostrar();
x1 = remover();
printf("\nApos remocao (%d):", x1);
mostrar();
}