Queue C Programs - Array
Queue C Programs - Array
#include <stdio.h>
#define SIZE 5
void enQueue(int);
void deQueue();
void display();
int main() {
//deQueue is not possible on empty queue
deQueue();
//enQueue 5 elements
enQueue(1);
enQueue(2);
enQueue(3);
enQueue(4);
enQueue(5);
display();
return 0;
}
Output
Queue is Empty!!
Inserted -> 1
Inserted -> 2
Inserted -> 3
Inserted -> 4
Inserted -> 5
Queue is Full!!
Queue elements are:
1 2 3 4 5
Deleted : 1
Queue elements are:
2 3 4 5
// Circular Queue implementation in C
#include <stdio.h>
#define SIZE 5
int items[SIZE];
int front = -1, rear = -1;
// Adding an element
void enQueue(int element) {
if (isFull())
printf("\n Queue is full!! \n");
else {
if (front == -1) front = 0;
rear = (rear + 1) % SIZE;
items[rear] = element;
printf("\n Inserted -> %d", element);
}
}
// Removing an element
int deQueue() {
int element;
if (isEmpty()) {
printf("\n Queue is empty !! \n");
return (-1);
} else {
element = items[front];
if (front == rear) {
front = -1;
rear = -1;
}
// Q has only one element, so we reset the
// queue after dequeing it. ?
else {
front = (front + 1) % SIZE;
}
printf("\n Deleted element -> %d \n", element);
return (element);
}
}
int main() {
// Fails because front = -1
deQueue();
enQueue(1);
enQueue(2);
enQueue(3);
enQueue(4);
enQueue(5);
display();
deQueue();
display();
enQueue(7);
display();
// Fails to enqueue because front == rear + 1
enQueue(8);
return 0;
}
Output
Queue is empty !!
Inserted -> 1
Inserted -> 2
Inserted -> 3
Inserted -> 4
Inserted -> 5
Queue is full!!
Front -> 0
Items -> 1 2 3 4 5
Rear -> 4
Deleted element -> 1
Front -> 1
Items -> 2 3 4 5
Rear -> 4
Inserted -> 7
Front -> 1
Items -> 2 3 4 5 7
Rear -> 0
Queue is full!!
// Priority Queue Implementation in C using array
#include <stdio.h>
#include <stdlib.h>
#define MAX 10
void create_queue();
void insert_element(int);
void delete_element(int);
void check_priority(int);
void display_priorityqueue();
int pqueue[MAX];
int front, rear;
void main()
{
int n, choice;
printf("\nEnter 1 to insert element by priority ");
printf("\nEnter 2 to delete element by priority ");
printf("\nEnter 3 to display priority queue ");
printf("\nEnter 4 to exit");
create_queue();
while (1)
{
printf("\nEnter your choice : ");
scanf("%d", &choice);
switch(choice)
{
case 1:
printf("\nEnter element to insert : ");
scanf("%d",&n);
insert_element(n);
break;
case 2:
printf("\nEnter element to delete : ");
scanf("%d",&n);
delete_element(n);
break;
case 3:
display_priorityqueue();
break;
case 4:
exit(0);
default:
printf("\n Please enter valid choice");
}
}
}
void create_queue()
{
front = rear = -1;
}
void insert_element(int data)
{
if (rear >= MAX - 1)
{
printf("\nQUEUE OVERFLOW");
return;
}
if ((front == -1) && (rear == -1))
{
front++;
rear++;
pqueue[rear] = data;
return;
}
else
check_priority(data);
rear++;
}
void check_priority(int data)
{
int i,j;
for (i = 0; i <= rear; i++)
{
if (data >= pqueue[i])
{
for (j = rear + 1; j > i; j--)
{
pqueue[j] = pqueue[j - 1];
}
pqueue[i] = data;
return;
}
}
pqueue[i] = data;
}
void delete_element(int data)
{
int i;
if ((front==-1) && (rear==-1))
{
printf("\nEmpty Queue");
return;
}
for (i = 0; i <= rear; i++)
{
if (data == pqueue[i])
{
for (; i < rear; i++)
{
pqueue[i] = pqueue[i + 1];
}
pqueue[i] = -99;
rear--;
if (rear == -1)
front = -1;
return;
}
}
printf("\n%d element not found in queue", data);
}
void display_priorityqueue()
{
if ((front == -1) && (rear == -1))
{
printf("\nEmpty Queue ");
return;
}
for (; front <= rear; front++)
{
printf(" %d ", pqueue[front]);
}
front = 0;
}
Output
#include<stdio.h>
#include<limits.h>
int isEmpty ()
{
return idx == -1;
}
int
isFull ()
{
return idx == MAX - 1;
}
// enqueue just adds item to the end of the priority queue | O(1)
void enqueue (int data, int priority)
{
if (!isFull ())
{
// Increase the index
idx++;
void display ()
{
for (int i = 0; i <= idx; i++)
{
printf ("(%d, %d)\n", pqVal[i], pqPriority[i]);
}
}
int main ()
{
// To enqueue items as per priority
enqueue (5, 1);
enqueue (10, 3);
enqueue (15, 4);
enqueue (20, 5);
enqueue (500, 2);
return 0;
}
Output
Before Dequeue :
(5, 1)
(10, 3)
(15, 4)
(20, 5)
(500, 2)
After Dequeue :
(5, 1)
(10, 3)
(500, 2)
// C Program implementation of Priority Queue – Ordered using array (Max Priority
Queue)
// to implement min priority queue you can just change greater than sign to smaller than
at // the time of comparison and initialisation of maxPriority
#include<stdio.h>
#include<limits.h>
#define MAX 100
int isEmpty ()
{
return idx == -1;
}
int
isFull ()
{
return idx == MAX - 1;
}
void display ()
{
for (int i = 0; i <= idx; i++)
{
printf ("(%d, %d)\n", pqVal[i], pqPriority[i]);
}
}
int main ()
{
// To enqueue items as per priority
enqueue (25, 1);
enqueue (10, 10);
enqueue (15, 50);
enqueue (20, 100);
enqueue (30, 5);
enqueue (40, 7);
return 0;
}
Output
Before Dequeue :
(25, 1)
(30, 5)
(40, 7)
(10, 10)
(15, 50)
(20, 100)
After Dequeue :
(25, 1)
(30, 5)
(40, 7)
(10, 10)
// C Program for Deque using array
// Deque implementation in C
#include <stdio.h>
#define MAX 10
int main() {
int arr[MAX];
int front, rear, i, n;
n = count(arr);
printf("\nTotal number of elements in deque: %d", n);
}
if (*pfront == -1) {
*pfront = *prear = 0;
arr[*pfront] = item;
return;
}
if (*prear != MAX - 1) {
c = count(arr);
k = *prear + 1;
for (i = 1; i <= c; i++) {
arr[k] = arr[k - 1];
k--;
}
arr[k] = item;
*pfront = k;
(*prear)++;
} else {
(*pfront)--;
arr[*pfront] = item;
}
}
if (*prear == MAX - 1) {
k = *pfront - 1;
for (i = *pfront - 1; i < *prear; i++) {
k = i;
if (k == MAX - 1)
arr[k] = 0;
else
arr[k] = arr[i + 1];
}
(*prear)--;
(*pfront)--;
}
(*prear)++;
arr[*prear] = item;
}
if (*pfront == -1) {
printf("\nDeque is empty.\n");
return 0;
}
item = arr[*pfront];
arr[*pfront] = 0;
if (*pfront == *prear)
*pfront = *prear = -1;
else
(*pfront)++;
return item;
}
if (*pfront == -1) {
printf("\nDeque is empty.\n");
return 0;
}
item = arr[*prear];
arr[*prear] = 0;
(*prear)--;
if (*prear == -1)
*pfront = -1;
return item;
}
Output
Elements in a deque:
front: 8 5 12 5 11 6 0 0 0 0 :rear
removed item: 8
Elements in a deque after deletion:
front: 0 5 12 5 11 6 0 0 0 0 :rear
Elements in a deque after addition:
front: 0 5 12 5 11 6 16 7 0 0 :rear
removed item: 7
Elements in a deque after deletion:
front: 0 5 12 5 11 6 16 0 0 0 :rear
Total number of elements in deque: 6