C++ Queues

A queue is a container that follows the First In, First Out (FIFO) principle. In C++, queues are part of the Standard Template Library (STL) and can be implemented using the queue class. Queues are useful for managing data in scenarios where you need to access the oldest added element first.

Key Topics

Overview of Queues

Queues provide several advantages:

  • Efficient access to the oldest added element.
  • Simple interface for adding and removing elements.
  • Commonly used in scheduling and resource management.

Declaring Queues

To declare a queue, include the queue header and use the following syntax:

#include 
queue myQueue;

Common Queue Operations

Here are some common operations you can perform on queues:

  • push(): Adds an element to the back of the queue.
  • pop(): Removes the front element from the queue.
  • front(): Returns the front element of the queue without removing it.
  • back(): Returns the last element of the queue without removing it.
  • empty(): Checks if the queue is empty.
  • size(): Returns the number of elements in the queue.

Example: Basic Queue Operations

#include 
#include 
using namespace std;

int main() {
    queue myQueue;
    myQueue.push(10);
    myQueue.push(20);
    myQueue.push(30);
    cout << "Front element: " << myQueue.front() << endl;
    myQueue.pop();
    cout << "Front element after pop: " << myQueue.front() << endl;
    cout << "Queue size: " << myQueue.size() << endl;
    return 0;
}

Output:

Front element: 10 Front element after pop: 20 Queue size: 2

Iterating Over Queues

Queues do not provide direct iteration methods like vectors or lists. However, you can access elements by popping them off the queue, but this changes the queue

state. Therefore, it's common to use a temporary queue to preserve the original queue while iterating.

Example: Iterating Using a Temporary Queue

#include 
#include 
using namespace std;

int main() {
    queue myQueue;
    myQueue.push(10);
    myQueue.push(20);
    myQueue.push(30);

    queue tempQueue;
    cout << "Queue elements: ";
    while (!myQueue.empty()) {
        cout << myQueue.front() << " ";
        tempQueue.push(myQueue.front());
        myQueue.pop();
    }

    // Restore the original queue
    while (!tempQueue.empty()) {
        myQueue.push(tempQueue.front());
        tempQueue.pop();
    }
    return 0;
}

Output:

Queue elements: 10 20 30

Exercises with Queues

Here are some exercises to practice your understanding of queues:

  • Implement a program that simulates a ticketing system using a queue.
  • Write a function that reverses a queue using recursion.
  • Simulate a queue of customers being served at a restaurant, where customers are added and served in order.

Key Takeaways

  • Queues are FIFO data structures that allow efficient access to the oldest added element.
  • Common operations include pushing, popping, and accessing the front and back elements.
  • Queues are useful in various applications such as scheduling, resource management, and breadth-first search algorithms.
  • Iterating over queues requires careful handling to preserve the original queue state.