You are on page 1of 5

Ex 6: Circular Queue

To organize a traffic light management system based on number of vehicles on each


side, Implement a circular queue data structure algorithm along with its respective
operations.
ALGORITHM:
Input: max_size - maximum size of the circular queue
1. Initialize a circular queue with max_size elements, front, and rear indices set to -1.
2. Function is_empty:
- Return true if front is -1, indicating an empty queue; otherwise, return false.
3. Function is_full:
- Return true if (rear + 1) % max_size is equal to front, indicating a full queue; otherwise,
return false.

4. Function enqueue(item):
a. If is_full() is true, print "Queue is full. Cannot enqueue."
b. If is_empty() is true, set front and rear to 0.
c. Increment rear by 1 (rear = (rear + 1) % max_size).
d. Set queue[rear] to the given item.
e. Print "Item enqueued to the queue."

5. Function dequeue():
a. If is_empty() is true, print "Queue is empty. Cannot dequeue."
b. Store the item at queue[front] in a variable (removed_item).
c. If front is equal to rear, set front and rear to -1.
Otherwise, increment front by 1 (front = (front + 1) % max_size).
d. Print "Item dequeued from the queue."
e. Return removed_item.

6. Function peek():
- If is_empty() is true, print "Queue is empty."
- Otherwise, print "Front element: " followed by queue[front].
7. Function display():
- If is_empty() is true, print "Queue is empty."
- Otherwise, initialize an index i with front.
a. Loop while true:
- Print queue[i].
- If i is equal to rear, break from the loop.
- Otherwise, increment i by 1 (i = (i + 1) % max_size).
b. Print a newline.

8. Example usage:
- Create a CircularQueue instance with the desired max_size.
- Perform enqueue, dequeue, peek, and display operations as needed.

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

def is_empty(self):
return self.front == -1

def is_full(self):
return (self.rear + 1) % self.max_size == self.front

def enqueue(self, item):


if self.is_full():
print("Queue is full. Cannot enqueue.")
else:
if self.is_empty():
self.front = self.rear = 0
else:
self.rear = (self.rear + 1) % self.max_size
self.queue[self.rear] = item
print(f"{item} enqueued to the queue.")

def dequeue(self):
if self.is_empty():
print("Queue is empty. Cannot dequeue.")
else:
removed_item = self.queue[self.front]
if self.front == self.rear:
self.front = self.rear = -1
else:
self.front = (self.front + 1) % self.max_size
print(f"{removed_item} dequeued from the queue.")
return removed_item

def peek(self):
if self.is_empty():
print("Queue is empty.")
else:
print(f"Front element: {self.queue[self.front]}")

def display(self):
if self.is_empty():
print("Queue is empty.")
else:
i = self.front
while True:
print(self.queue[i], end=" ")
if i == self.rear:
break
i = (i + 1) % self.max_size
print()

# Example usage:
max_size = 5
traffic_queue = CircularQueue(max_size)

traffic_queue.enqueue("North: 5 vehicles")
traffic_queue.enqueue("East: 3 vehicles")
traffic_queue.enqueue("South: 2 vehicles")
traffic_queue.enqueue("West: 4 vehicles")

traffic_queue.display()

traffic_queue.dequeue()
traffic_queue.dequeue()

traffic_queue.display()

traffic_queue.enqueue("North: 1 vehicle")
traffic_queue.enqueue("South: 7 vehicles")

traffic_queue.display()
OUTPUT:
North: 5 vehicles enqueued to the queue.
East: 3 vehicles enqueued to the queue.
South: 2 vehicles enqueued to the queue.
West: 4 vehicles enqueued to the queue.
North: 5 vehicles East: 3 vehicles South: 2 vehicles West: 4 vehicles

North: 5 vehicles dequeued from the queue.


East: 3 vehicles dequeued from the queue.
South: 2 vehicles West: 4 vehicles

North: 1 vehicle enqueued to the queue.


South: 7 vehicles enqueued to the queue.
South: 2 vehicles West: 4 vehicles North: 1 vehicle South: 7 vehicles

You might also like