Data Structures Practical 23
Question 1
Write a C program to implement a Circular queue using Array with operations for enqueue (15), enqueue (48), enqueue (69), dequeue, enqueue (12), enqueue (23), dequeue, dequeue.
circularq.c
C
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#define max 5
int queue[max];
int front = -1;
int rear = -1;
void enqueue(int);
int dequeue();
void display();
void main()
{
printf("--- Executing Circular Queue Operations ---\n");
enqueue(15);
enqueue(48);
enqueue(69);
display();
dequeue();
display();
enqueue(12);
enqueue(23);
display();
dequeue();
dequeue();
display();
getch();
}
void enqueue(int element)
{
if ((front == 0 && rear == max - 1) || front == rear + 1)
{
printf("\nQueue is Full.");
return;
}
if (front == -1)
{
front = rear = 0;
}
else if (rear == max - 1)
rear = 0;
else
rear = rear + 1;
queue[rear] = element;
printf("\nEnqueued: %d (at index %d)\n", element, rear);
}
int dequeue() {
if (front == -1)
{
printf("\nQueue Underflow! Queue is Empty.\n");
return -9999;
}
int deletedValue = queue[front];
printf("\nDequeued: %d (from index %d)\n", deletedValue, front);
if (front == rear)
{
front = rear = -1;
return (deletedValue);
}
else if (front == max - 1)
{
front = 0;
return (deletedValue);
}
else
{
front = front + 1;
return (deletedValue);
}
}
void display()
{
int i;
if (front == -1)
{
printf("\nQueue is Empty.");
return;
}
printf("\nThe various queue elements are :\n");
i = front;
while (i != rear)
{
printf("%d\t", queue[i]);
if (i == max - 1)
i = 0;
else
i = i + 1;
}
printf("%d\t", queue[i]);
}
Output
Question 2
Write a C program to implement a Queue overflow and underflow operations on Circular Queue using Array.
checkqueue.c
C
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#define max 3
int queue[max];
int front = -1;
int rear = -1;
void enqueue(int);
int dequeue();
void display();
void main()
{
printf("=== DEMONSTRATING CIRCULAR QUEUE UNDERFLOW ===\n");
dequeue();
printf("\n=== FILLING THE CIRCULAR QUEUE ===\n");
enqueue(10);
enqueue(20);
enqueue(30);
display();
printf("\n=== DEMONSTRATING CIRCULAR QUEUE OVERFLOW ===\n");
enqueue(40);
printf("\n=== CREATING VACANT SPACE AND WRAPPING AROUND ===\n");
dequeue();
display();
enqueue(40);
display();
printf("\n=== TRIGGERING OVERFLOW AFTER WRAP-AROUND ===\n");
enqueue(50);
getch();
}
void enqueue(int element)
{
if ((front == 0 && rear == max - 1) || front == rear + 1)
{
printf("[OVERFLOW ERROR] Queue is Full! Cannot enqueue %d.\n", element);
return;
}
if (front == -1)
{
front = rear = 0;
}
else if (rear == max - 1)
{
rear = 0;
else
{
rear = rear + 1;
}
queue[rear] = element;
printf("Enqueued: %d (at index %d)\n", element, rear);
}
int dequeue()
{
if (front == -1)
{
printf("[UNDERFLOW ERROR] Queue Underflow! Queue is Empty.\n");
return -9999;
}
int deletedValue = queue[front];
printf("Dequeued: %d (from index %d)\n", deletedValue, front);
if (front == rear)
{
front = rear = -1;
}
else if (front == max - 1)
{
front = 0;
}
else
{
front = front + 1;
}
return deletedValue;
}
void display()
{
int i;
if (front == -1)
{
printf("Queue is Empty.\n");
return;
}
printf("Current Queue elements: ");
i = front;
while (i != rear)
{
printf("%d ", queue[i]);
if (i == max - 1)
i = 0;
else
i = i + 1;
}
printf("%d\n", queue[i]);
}
Output
