Queue: Array Implementation

Explore how a queue data structure works using array implementation. Watch enqueue, dequeue, and peek operations in action with FIFO (First In, First Out) principle.

Interactive Operations
Array Implementation
O(1) Operations

Queue Visualization

Empty Queue
-
-
-
-
-
-
-
-
Size: 0 / 8
Status: Empty

Current Step:

Select an operation to begin visualization

Complexity Analysis

O(1)
Enqueue
O(n)
Dequeue*
O(1)
Peek
O(n) Space
Fixed array allocation
*O(n) due to shifting elements. Circular array implementation achieves O(1).

Queue Operations

Enqueue

Add element to the rear of queue

Dequeue

Remove and return front element

Peek/Front

View front element without removing

FIFO Principle

First In: Elements added at the rear
First Out: Elements removed from the front
Order Preservation: Maintains insertion order
Fair Processing: No element jumps the queue

Applications

Task Scheduling: OS process scheduling
BFS Algorithms: Graph traversal
Print Queue: Document printing order
Buffer: Data stream processing
Breadth-First Search: Tree/graph exploration

Implementation

class QueueArray:
    def __init__(self, max_size):
        self.array = [None] * max_size  # Fixed-size array
        self.front = 0                  # Index of front element
        self.rear = -1                  # Index of rear element
        self.size = 0                   # Current number of elements
        self.max_size = max_size       # Maximum capacity
    
    def enqueue(self, value):
        # Check for queue overflow
        if self.size >= self.max_size:
            raise Exception("Queue Overflow")
        
        # Add element at rear
        self.rear = (self.rear + 1) % self.max_size  # Circular increment
        self.array[self.rear] = value
        self.size += 1
        return value
    
    def dequeue(self):
        # Check for queue underflow
        if self.size <= 0:
            raise Exception("Queue Underflow")
        
        # Get front element and move front pointer
        value = self.array[self.front]
        self.array[self.front] = None  # Optional: clear the slot
        self.front = (self.front + 1) % self.max_size  # Circular increment
        self.size -= 1
        return value
    
    def peek(self):
        # Check if queue is empty
        if self.size <= 0:
            raise Exception("Queue is Empty")
        
        return self.array[self.front]
    
    def is_empty(self):
        return self.size == 0
    
    def is_full(self):
        return self.size >= self.max_size
    
    def get_size(self):
        return self.size