Queue is abstract data type in data structure which works as FIFO principle. FIFO means “First in First out”, i.e the element which we have inserted first will be deleted first and the element that we have inserted last will be deleted last. You can have c program to implement queue using array, using stack and using linked list. Two variables are used to implement queue, i.e “rear” and “front”. Insertion will be done at rear side and deletion will be performed at front side. Real-life example of queues are above which will use concept of queue.
Here we use circular array to implement queue which is quite efficient than tradition simple array implementation.
Array implementation of Queue
#include <stdio.h>
int A[10], front=-1, rear=-1; // Creating Queue
int size_A = sizeof(A)/sizeof(A[0]); // Calculating Size of Array Dynamically
/* Driver Function */
int IsEmpty();
void Insert(int data);
int Delete();
void PrintQueue();
/* Main Method */
int main()
{
Insert(0);
Insert(1);
Insert(2);
Insert(3);
Delete(); // Delete 0 from starting
Delete(); // Delete 1 from starting
PrintQueue(); //Print Queue
return 0;
}
int IsEmpty()
{
if(rear==-1 && front==-1)
return 1;
else
return 0;
}
void Insert(int data)
{
if(IsEmpty())
front = rear = 0;
else if( rear+1 == front )
printf("\n Queue is Full \n");
else
rear = (rear+1)%size_A;
A[rear] = data;
}
int Delete()
{
if(IsEmpty())
printf("\n Queue is Empty \n");
else
front = (front+1)%size_A;
return A[front-1];
}
void PrintQueue()
{
int i=0;
for(i=front;i<=rear;i++)
printf(" %d",A[i]);
}
Linked List implementation of Queue
#include <stdio.h>
#include <stdlib.h>
/* List Structure */
typedef struct Node
{
int data;
struct Node *link;
}node;
node *head=NULL; // Head node to keep track of list
/* Driver Functions */
void EnQueque(int data);
int DeQueue();
void print(node *p);
/* Main Method */
int main()
{
EnQueque(0);
EnQueque(1);
EnQueque(2);
EnQueque(3);
DeQueue(); // Delete 0 from list
DeQueue(); // Delete 1 from list
EnQueque(4); // Add 4 at the end of list
print(head); // Print element of queue
return 0;
}
/* Insert Element */
void EnQueque(int data)
{
// Declaring node
node *temp = (node*)calloc(1,sizeof(node));
temp->data = data;
temp->link = NULL;
// If head is NULL or first node
if(!head)
{
head = temp;
return;
}
node *traverse=head;
// Traverse list upto end
while(traverse->link)
traverse = traverse->link;
traverse->link = temp;
}
/* Delete Element */
int DeQueue()
{
node* temp = head;
head = head->link;
int data = temp->data;
free(temp);
return data;
}
/* Print queue */
void print(node *p)
{
printf(" %d",p->data);
if(!p->link)
return;
print(p->link);
}
Suggested Reading
- Program to check balanced parentheses in expression c++
- Write a program to reverse a linked list using stack in c++
- Write a program to reverse a string using stack in c++


