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

Leave a Comment

Your email address will not be published. Required fields are marked *