A queue is a collection of objects in which elements are added/deleted based on the principle of FIFO (First In First Out). In this post, Queue data structure is implemented in C using Linked List.
#include <stdio.h>
#include <stdlib.h>
typedef struct QNode {
int data;
struct QNode *next;
} QueueNode;
typedef struct QueueStruct {
int size;
struct QNode *head;
struct QNode *tail;
} Queue;
Queue *initQueue() {
Queue *q = (Queue *) malloc(sizeof(Queue));
q->size = 0;
q->head = NULL;
q->tail = NULL;
return q;
}
int isEmpty(Queue *q) {
return (q->size == 0);
}
void enqueue(Queue *q, int value) {
QueueNode *node = (QueueNode *) malloc(sizeof(QueueNode));
node->data = value;
node->next = NULL;
if (q->size == 0) {
q->head = node;
q->tail = node;
} else {
q->tail->next = node;
q->tail = node;
}
q->size++;
}
int dequeue(Queue *q) {
int returnData = q->head->data;
if (q->size == 1) {
q->head = NULL;
q->tail = NULL;
} else {
q->head = q->head->next;
}
q->size--;
return returnData;
}
void printQueue(QueueNode *node) {
if (node == NULL) {
return;
} else {
printf("%d\n",node->data);
printQueue(node->next);
}
}
int main() {
Queue *q = initQueue();
enqueue(q,10);
enqueue(q,20);
enqueue(q,30);
printf("Contents of Queue\n");
printQueue(q->head);
dequeue(q);
printf("Contents of Queue\n");
printQueue(q->head);
return 0;
}