Data Structures Practical 24
Question 1
Write a C program to implement enqueue operation on Circular queue using Linked List.
enqueue.c
C
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
struct Node
{
int data;
struct Node* next;
};
struct Node* front = NULL;
struct Node* rear = NULL;
void enqueue(int);
void display();
void main()
{
clrscr();
printf("--- Circular Queue using Linked List ---\n\n");
enqueue(15);
enqueue(48);
enqueue(69);
display();
printf("\nInserting more elements...\n");
enqueue(12);
enqueue(23);
display();
getch();
}
void enqueue(int element)
{
struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));
if (newNode == NULL)
{
printf("Queue Overflow! Out of memory heap allocation.\n");
return;
}
newNode->data = element;
if (front == NULL)
{
front = newNode;
rear = newNode;
newNode->next = front;
}
else
{
rear->next = newNode;
rear = newNode;
rear->next = front;
}
printf("Enqueued: %d\n", element);
}
void display()
{
struct Node* temp = front;
if (front == NULL)
{
printf("\nQueue is empty!\n");
return;
}
printf("\nCurrent Queue elements are: ");
do
{
printf("%d\t", temp->data);
temp = temp->next;
} while (temp != front);
}
Output
Question 2
Write a C program to implement dequeue operation on Circular queue using Linked List.
dequeue.c
C
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
struct Node {
int data;
struct Node* next;
};
struct Node* front = NULL;
struct Node* rear = NULL;
void enqueue(int);
int dequeue();
void display();
void main()
{
clrscr();
printf("--- Circular Queue Operations using Linked List ---\n\n");
printf("=== ENQUEUE OPERATIONS ===\n");
enqueue(15);
enqueue(48);
enqueue(69);
display();
printf("\n=== DEQUEUE OPERATIONS ===\n");
dequeue();
display();
dequeue();
display();
dequeue();
display();
printf("\n=== TRIGGERING UNDERFLOW ===\n");
dequeue();
getch();
}
void enqueue(int element)
{
struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));
if (newNode == NULL)
{
printf("Queue Overflow! Out of memory.\n");
return;
}
newNode->data = element;
if (front == NULL)
{
front = newNode;
rear = newNode;
newNode->next = front;
}
else
{
rear->next = newNode;
rear = newNode;
rear->next = front;
}
printf("Enqueued: %d\n", element);
}
int dequeue()
{
struct Node* temp = front;
int deletedValue;
if (front == NULL)
{
printf("[UNDERFLOW ERROR] Queue is Empty! Cannot dequeue.\n");
return -9999;
}
deletedValue = front->data;
if (front == rear)
{
front = NULL;
rear = NULL;
free(temp);
}
else
{
front = front->next;
rear->next = front;
free(temp);
}
printf("Dequeued: %d\n", deletedValue);
return deletedValue;
}
void display()
{
struct Node* temp = front;
if (front == NULL)
{
printf("Current Queue: [Empty]\n");
return;
}
printf("Current Queue: ");
do
{
printf("%d -> ", temp->data);
temp = temp->next;
} while (temp != front);
}
Output
