This program implements a circular queue using a fixed-size list. The circular queue overcomes the limitation of wasting spaces in normal queue operations by reconnecting the end of the queue back to its beginning.

Program Structure

The circular queue uses an array to store elements and two pointers, front and rear, to track the start and end of the queue respectively. Here’s how the basic operations work:

  • Enqueue: Adds an element to the rear end of the queue. If the queue is full, it will return an overflow condition.
  • Dequeue: Removes an element from the front of the queue. If the queue is empty, it will return an underflow condition.
  • Is Full/Is Empty: Checks whether the queue is full or empty to prevent overflow and underflow.

Python Code

class CircularQueue:
    def __init__(self, size):
        self.size = size
        self.queue = [None] * size
        self.front = self.rear = -1

    def enqueue(self, item):
        if (self.rear + 1) % self.size == self.front:
            print("Queue is Full")
        elif self.front == -1:
            self.front = self.rear = 0
            self.queue[self.rear] = item
        else:
            self.rear = (self.rear + 1) % self.size
            self.queue[self.rear] = item

    def dequeue(self):
        if self.front == -1:
            print("Queue is Empty")
        elif self.front == self.rear:
            self.queue[self.front] = None
            self.front = self.rear = -1
        else:
            self.queue[self.front] = None
            self.front = (self.front + 1) % self.size

    def display(self):
        if self.front == -1:
            print("Queue is Empty")
        else:
            start = self.front
            while True:
                print(self.queue[start], end=" ")
                if start == self.rear:
                    break
                start = (start + 1) % self.size
            print()

# Example Usage
cq = CircularQueue(5)
cq.enqueue(1)
cq.enqueue(2)
cq.enqueue(3)
cq.enqueue(4)
cq.enqueue(5)
cq.enqueue(6)  # Should show "Queue is Full"
cq.display()  # Should display 1 2 3 4 5
cq.dequeue()
cq.dequeue()
cq.enqueue(7)
cq.enqueue(8)
cq.display()  # Should display 3 4 5 7 8

Explanation of the Code

  • __init__: Initializes the queue with a given size, setting both front and rear to -1, indicating an empty queue.
  • enqueue: Adds an item at the rear and handles circular index movement.
  • dequeue: Removes an item from the front and handles circular index movement.
  • display: Outputs elements from the front to the rear, following the circular nature of the queue.

Usage

This circular queue implementation can be used in scenarios where constant memory usage is critical, such as in embedded systems or when implementing resource-shared environments.

 

By Aditya Bhuyan

I work as a cloud specialist. In addition to being an architect and SRE specialist, I work as a cloud engineer and developer. I have assisted my clients in converting their antiquated programmes into contemporary microservices that operate on various cloud computing platforms such as AWS, GCP, Azure, or VMware Tanzu, as well as orchestration systems such as Docker Swarm or Kubernetes. For over twenty years, I have been employed in the IT sector as a Java developer, J2EE architect, scrum master, and instructor. I write about Cloud Native and Cloud often. Bangalore, India is where my family and I call home. I maintain my physical and mental fitness by doing a lot of yoga and meditation.

Leave a Reply

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

error

Enjoy this blog? Please spread the word :)