Monash University > CSSE > CSE1303 > Part A > Lectures > Lecture A04 notes
/* queue.h */
#ifndef QUEUEH
#define QUEUEH
#include <stdbool.h>
#define MAXQUEUE 20
struct QueueRec
{
int count;
int front;
int rear;
float entry[MAXQUEUE];
};
typedef struct QueueRec Queue;
void intializeQueue(Queue* queuePtr);
bool queueEmpty(Queue* queuePtr);
bool queueFull(Queue* queuePtr);
void append(Queue* queuePtr, float item);
float serve(Queue* queuePtr);
#endif
/* queue.c */
#include <stdio.h>
#include <stdlib.h>
#include "queue.h"
/* Initialize a queue to be empty. */
void initializeQueue(Queue* queuePtr)
{
queuePtr->count = 0;
queuePtr->front = 0;
queuePtr->rear = MAXQUEUE - 1;
}
/* Returns true if queue is empty */
bool queueEmpty(const Queue* queuePtr)
{
if (queuePtr->count <= 0)
{
return true;
}
else
{
return false;
}
}
/* Returns true if the queue is full */
bool queueFull(const Queue* queuePtr)
{
if (queuePtr->count >= MAXQUEUE)
{
return true;
}
else
{
return false;
}
}
/* Append an item to the rear of a queue. */
void append(Queue* queuePtr, float item)
{
if (queueFull(queuePtr))
{
fprintf(stderr, "Queue is full\n");
exit(1);
}
else
{
queuePtr->rear++;
if (queuePtr->rear == MAXQUEUE)
{
queuePtr->rear = 0;
}
queuePtr->entry[queuePtr->rear] = item;
queuePtr->count++;
}
}
/* Serve the item at the front of a queue. */
float serve(Queue* queuePtr)
{
float item;
if (queueEmpty(queuePtr))
{
fprintf(stderr, "Queue is empty\n");
exit(1);
}
else
{
item = queuePtr->entry[queuePtr->front];
queuePtr->front++;
if (queuePtr->front == MAXQUEUE)
{
queuePtr->front = 0;
}
queuePtr->count--;
}
return item;
}