Bird
Raised Fist0
DSA C#programming~5 mins

Queue Implementation Using Array in DSA C# - Time & Space Complexity

Choose your learning style10 modes available
Time Complexity: Queue Implementation Using Array
O(1)
Understanding Time Complexity

We want to understand how the time taken by queue operations changes as the number of elements grows.

How fast can we add or remove items from a queue implemented with an array?

Scenario Under Consideration

Analyze the time complexity of the following queue operations using an array.


public class QueueArray {
    private int[] arr;
    private int front, rear, size, capacity;

    public QueueArray(int capacity) {
        this.capacity = capacity;
        arr = new int[capacity];
        front = 0;
        rear = -1;
        size = 0;
    }

    public void Enqueue(int item) {
        if (size == capacity) throw new InvalidOperationException("Queue full");
        rear = (rear + 1) % capacity;
        arr[rear] = item;
        size++;
    }

    public int Dequeue() {
        if (size == 0) throw new InvalidOperationException("Queue empty");
        int item = arr[front];
        front = (front + 1) % capacity;
        size--;
        return item;
    }
}
    

This code adds (Enqueue) and removes (Dequeue) items from a fixed-size array acting as a circular queue.

Identify Repeating Operations

Look for loops or repeated steps inside the operations.

  • Primary operation: Adding or removing one item involves simple index updates and assignments.
  • How many times: Each Enqueue or Dequeue runs once per call, no loops inside.
How Execution Grows With Input

Each operation does a fixed number of steps regardless of queue size.

Input Size (n)Approx. Operations
105-6 steps per operation
1005-6 steps per operation
10005-6 steps per operation

Pattern observation: The time to add or remove an item stays the same no matter how many items are in the queue.

Final Time Complexity

Time Complexity: O(1)

This means each enqueue or dequeue operation takes the same small amount of time, no matter the queue size.

Common Mistake

[X] Wrong: "Removing an item from the queue takes longer as the queue grows because we have to shift elements."

[OK] Correct: This queue uses a circular array with front and rear indexes, so no shifting is needed. Each operation just moves an index.

Interview Connect

Understanding this helps you explain how queues work efficiently in real programs and shows you know how to manage data with fixed storage.

Self-Check

"What if we changed the array to resize dynamically when full? How would the time complexity of enqueue change then?"

Practice

(1/5)
1. What is the main characteristic of a queue implemented using an array?
easy
A. It removes elements from the end only.
B. It allows random access to elements.
C. It stores elements in sorted order automatically.
D. It follows First-In-First-Out (FIFO) order.

Solution

  1. Step 1: Understand queue behavior

    A queue adds elements at the rear and removes from the front, following FIFO order.
  2. Step 2: Compare options with queue properties

    Only It follows First-In-First-Out (FIFO) order. correctly describes FIFO behavior; others describe different data structures or incorrect behavior.
  3. Final Answer:

    It follows First-In-First-Out (FIFO) order. -> Option D
  4. Quick Check:

    Queue = FIFO order [OK]
Hint: Remember queue = first in, first out [OK]
Common Mistakes:
  • Confusing queue with stack (LIFO)
  • Thinking queue allows random access
  • Assuming queue sorts elements automatically
2. Which of the following is the correct way to declare a queue array of size 5 in C#?
easy
A. int queue = new int[5];
B. int queue[] = new int(5);
C. int[] queue = new int[5];
D. int[] queue = int[5];

Solution

  1. Step 1: Recall C# array declaration syntax

    In C#, arrays are declared as type[] name = new type[size];
  2. Step 2: Check each option

    int[] queue = new int[5]; matches correct syntax; others have syntax errors or wrong usage.
  3. Final Answer:

    int[] queue = new int[5]; -> Option C
  4. Quick Check:

    C# array declaration = int[] name = new int[size] [OK]
Hint: Use type[] name = new type[size] for arrays [OK]
Common Mistakes:
  • Missing [] after type
  • Using parentheses instead of brackets
  • Assigning array without new keyword
3. Consider this C# code for a queue using an array of size 3:
int[] queue = new int[3];
int front = -1, rear = -1;

// Enqueue 10
rear++;
queue[rear] = 10;
if(front == -1) front = 0;

// Enqueue 20
rear++;
queue[rear] = 20;

// Dequeue
int val = queue[front];
front++;

// Enqueue 30
rear++;
queue[rear] = 30;

// Current queue elements from front to rear?
medium
A. [10, 20, 30]
B. [20, 30]
C. [30]
D. [10, 30]

Solution

  1. Step 1: Trace enqueue and dequeue operations

    Enqueue 10: rear=0, front=0, queue=[10,_,_] Enqueue 20: rear=1, queue=[10,20,_] Dequeue: val=queue[front]=10, front=1 Enqueue 30: rear=2, queue=[10,20,30]
  2. Step 2: Identify current queue elements

    Front=1, rear=2, so elements are queue[1]=20 and queue[2]=30
  3. Final Answer:

    [20, 30] -> Option B
  4. Quick Check:

    After dequeue front=1, queue elements = [20, 30] [OK]
Hint: Track front and rear indexes carefully [OK]
Common Mistakes:
  • Not updating front after dequeue
  • Including dequeued elements in output
  • Confusing front and rear positions
4. What is the error in this queue enqueue method using array?
void Enqueue(int[] queue, ref int rear, int value, int size) {
  if (rear == size) {
    Console.WriteLine("Queue is full");
    return;
  }
  rear++;
  queue[rear] = value;
}
medium
A. rear should be checked against size - 1, not size.
B. rear should be incremented after assigning value.
C. The method should check if rear is less than zero.
D. The queue array should be resized inside the method.

Solution

  1. Step 1: Analyze boundary check for full queue

    Array indices go from 0 to size-1, so rear == size means out of bounds.
  2. Step 2: Correct condition for full queue

    Check if rear == size - 1 before enqueue to avoid overflow.
  3. Final Answer:

    rear should be checked against size - 1, not size. -> Option A
  4. Quick Check:

    Array max index = size - 1 [OK]
Hint: Array max index = size - 1, check accordingly [OK]
Common Mistakes:
  • Checking rear == size causes index out of range
  • Incrementing rear before check
  • Ignoring array bounds in enqueue
5. You want to implement a circular queue using an array of size 4. Initially, front = -1 and rear = -1. After these operations:
Enqueue(5)
Enqueue(10)
Enqueue(15)
Dequeue()
Enqueue(20)
Enqueue(25)
What will be the state of the queue array and the values of front and rear?
hard
A. Queue: [25, 10, 15, 20], front=1, rear=0
B. Queue: [5, 10, 15, 20], front=0, rear=3
C. Queue: [20, 25, 15, 10], front=2, rear=1
D. Queue: [10, 15, 20, 25], front=0, rear=3

Solution

  1. Step 1: Perform each operation with circular logic

    Enqueue 5: front=0, rear=0, queue=[5,_,_,_] Enqueue 10: rear=1, queue=[5,10,_,_] Enqueue 15: rear=2, queue=[5,10,15,_] Dequeue: front=1 (removed 5) Enqueue 20: rear=3, queue=[5,10,15,20] Enqueue 25: rear wraps to 0, queue=[25,10,15,20]
  2. Step 2: Final front and rear positions

    front=1, rear=0, queue array = [25,10,15,20]
  3. Final Answer:

    Queue: [25, 10, 15, 20], front=1, rear=0 -> Option A
  4. Quick Check:

    Circular queue wraps rear index [OK]
Hint: Remember rear wraps to 0 in circular queue [OK]
Common Mistakes:
  • Not wrapping rear index after reaching end
  • Not updating front after dequeue
  • Assuming linear queue behavior
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard