Queues implementation in C using Linked List

March 2, 2019 1 min read C Queues

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;
}

Comments