struct queueNode *front, *rear;
struct queueNode* newNode(int data){
struct queueNode* node = (struct queueNode*) malloc(sizeof(struct queueNode));
struct Queue* createQueue(unsigned capacity){
struct Queue* queue = (struct Queue*) malloc (sizeof (struct Queue));
queue->capacity = capacity;
bool isFull(struct Queue* queue){
return queue -> size == queue -> capacity;
bool isEmpty(struct Queue* queue){
return queue -> size == 0;
void enQueue(struct Queue* queue, int data){
struct queueNode* node = newNode(data);
queue->rear->next = node;
queue->size = queue->size + 1;
int deQueue(struct Queue* queue){
struct queueNode* tmp = queue->front;
int frontData = tmp->data;
queue->front = queue->front->next;
if(queue->front == NULL){
queue->size = queue->size - 1;
int front(struct Queue* queue){
return queue->front->data;
int rear(struct Queue* queue){
return queue->rear->data;
void printQueue(struct Queue* queue){
struct queueNode* q = queue->front;
printf("Node[%d] = %d \n", i, q->data);