What is the printed state of the circular queue after the following operations?
Initialize queue with size 5.
Enqueue 10, 20, 30.
Dequeue one element.
Enqueue 40, 50.
Dequeue two elements.
Enqueue 60, 70.
class CircularQueue { int *arr; int front, rear, size; public: CircularQueue(int s) { size = s; arr = new int[size]; front = -1; rear = -1; } bool isFull() { return ((rear + 1) % size == front); } bool isEmpty() { return (front == -1); } void enqueue(int val) { if (isFull()) return; if (isEmpty()) front = 0; rear = (rear + 1) % size; arr[rear] = val; } void dequeue() { if (isEmpty()) return; if (front == rear) { front = -1; rear = -1; } else { front = (front + 1) % size; } } void printQueue() { if (isEmpty()) { std::cout << "Queue is empty" << std::endl; return; } int i = front; while (true) { std::cout << arr[i] << " "; if (i == rear) break; i = (i + 1) % size; } std::cout << std::endl; } }; int main() { CircularQueue q(5); q.enqueue(10); q.enqueue(20); q.enqueue(30); q.dequeue(); q.enqueue(40); q.enqueue(50); q.dequeue(); q.dequeue(); q.enqueue(60); q.enqueue(70); q.printQueue(); return 0; }
Track front and rear positions carefully after each enqueue and dequeue.
After the operations, the queue contains 40, 50, 60, 70 in order.
What will be the output of the following code snippet?
int main() {
CircularQueue q(3);
q.enqueue(1);
q.enqueue(2);
q.enqueue(3);
if (q.isFull()) std::cout << "Full" << std::endl;
else std::cout << "Not Full" << std::endl;
q.dequeue();
q.enqueue(4);
if (q.isFull()) std::cout << "Full" << std::endl;
else std::cout << "Not Full" << std::endl;
return 0;
}class CircularQueue { int *arr; int front, rear, size; public: CircularQueue(int s) { size = s; arr = new int[size]; front = -1; rear = -1; } bool isFull() { return ((rear + 1) % size == front); } bool isEmpty() { return (front == -1); } void enqueue(int val) { if (isFull()) return; if (isEmpty()) front = 0; rear = (rear + 1) % size; arr[rear] = val; } void dequeue() { if (isEmpty()) return; if (front == rear) { front = -1; rear = -1; } else { front = (front + 1) % size; } } };
Remember that after dequeue, space frees up and queue may not be full.
Initially queue is full after 3 enqueues. After one dequeue and enqueue, queue is not full.
What error will occur when running this code snippet that uses the dequeue method?
void dequeue() {
if (isEmpty()) return;
if (front == rear) {
front = -1;
rear = -1;
} else {
front = (front - 1) % size;
}
}class CircularQueue { int *arr; int front, rear, size; public: CircularQueue(int s) { size = s; arr = new int[size]; front = -1; rear = -1; } bool isEmpty() { return (front == -1); } void dequeue() { if (isEmpty()) return; if (front == rear) { front = -1; rear = -1; } else { front = (front - 1) % size; } } };
Check how front index is updated in dequeue.
Dequeue should move front forward, not backward. Using (front - 1) % size causes incorrect behavior.
Which of the following is the main advantage of using a circular queue over a linear queue implemented with an array?
Think about what happens when elements are dequeued in a linear queue.
Circular queue reuses empty spaces created by dequeues, avoiding wasted space unlike linear queue.
Given a circular queue of size 4, what is the printed output after these operations?
Enqueue 5, 10, 15.
Dequeue one element.
Enqueue 20.
Dequeue two elements.
Enqueue 25, 30.
Print queue.
class CircularQueue { int *arr; int front, rear, size; public: CircularQueue(int s) { size = s; arr = new int[size]; front = -1; rear = -1; } bool isFull() { return ((rear + 1) % size == front); } bool isEmpty() { return (front == -1); } void enqueue(int val) { if (isFull()) return; if (isEmpty()) front = 0; rear = (rear + 1) % size; arr[rear] = val; } void dequeue() { if (isEmpty()) return; if (front == rear) { front = -1; rear = -1; } else { front = (front + 1) % size; } } void printQueue() { if (isEmpty()) { std::cout << "Queue is empty" << std::endl; return; } int i = front; while (true) { std::cout << arr[i] << " "; if (i == rear) break; i = (i + 1) % size; } std::cout << std::endl; } }; int main() { CircularQueue q(4); q.enqueue(5); q.enqueue(10); q.enqueue(15); q.dequeue(); q.enqueue(20); q.dequeue(); q.dequeue(); q.enqueue(25); q.enqueue(30); q.printQueue(); return 0; }
Track front and rear carefully after each operation, especially after multiple dequeues.
After all operations, queue contains 25 and 30 only.
