Queue

First in, first out.

const int MAX = 999999;

template <typename eType>
struct Queue {
  eType array[MAX];
  int front, back, n;
  
  Queue() {
    front = 0;
    back = MAX - 1;
    n = 0;
  }
  
  void enqueue(eType x) {
    if (isFull()) throw "Queue is full";
    back = (back + 1) % MAX;
    array[back] = x;
    n += 1;
  }
  
  eType dequeue() {
    if (isEmpty()) throw "Queue is empty";
    eType x = array[front];
    front = (front + 1) % MAX;
    n -= 1;
    return x;
  }
  
  eType peek() {
    if (isEmpty()) throw "Queue is empty";
    return array[front];
  }
  
  boolean isEmpty() { return n == 0; }
  boolean isFull() { return n == MAX; }
  int size() { return n; }
};

Last updated

Was this helpful?