#include <stdbool.h>
#include <stddef.h>
#include <malloc.h>
#define MAXSIZE 100
typedef struct fifoCDT{
int *data;
size_t front;
size_t rear;
}fifoCDT_t;
fifoCDT_t* new_fifo(void)
{
fifoCDT_t* fifo;
fifo = malloc(sizeof(fifoCDT_t));
fifo->data = malloc(sizeof(int) * MAXSIZE);
fifo->front = 0;
fifo->rear = 0;
return fifo;
}
void delete_fifo(fifoCDT_t* fifo)
{
free(fifo->data);
free(fifo);
}
bool is_fifo_full(fifoCDT_t* fifo)
{
return ((fifo->rear +1)%MAXSIZE == fifo->front);
}
bool is_fifo_empty(fifoCDT_t* fifo)
{
return (fifo->front == fifo->rear);
}
bool in_fifo(fifoCDT_t* fifo, int data)
{
if(is_fifo_full(fifo)) return false;
fifo->data[fifo->rear] = data;
fifo->rear = (fifo->rear +1 ) % MAXSIZE;
return true;
}
bool out_fifo(fifoCDT_t* fifo, int *data)
{
if(is_fifo_empty(fifo)) return false;
*data = fifo->data[fifo->front];
fifo->front = (fifo->front +1 ) % MAXSIZE;
return true;
}
int main(int argc, int *argv[])
{
int temp;
fifoCDT_t *fifo;
fifo = new_fifo();
for(int i = 0; i < 16; i++) in_fifo(fifo, i);
while (out_fifo(fifo, &temp)) {
printf("%d ", temp);
}
printf("\n");
delete_fifo(fifo);
return 0;
}