title: Implementing priority queue in C++
body: <p>I am trying to implement a queue using a circular array.  My code is supposed to be able to remove the lowest number from the queue.  I created test code that should output 1 2 3 4 5 as the lowest values being removed but my actual output is 3 2 1 8 7.  I am not sure if my problem is that my code for finding the lowest value is incorrect or there is a problem with how i am coding the actual queue.  I suspect both but I'd appreciate any suggestions or tips to finding the problems in my code.</p>
  
  <pre><code>#include &lt;iostream&gt;
  using namespace std;
  
  class priorityQueue
  {
  private:
      int front;
      int rear;
      int size;
      int *array;
  
  public:
      priorityQueue();
      ~priorityQueue();
      void insert(int x);
      //remove and return the smallest item currently in the priority queue
      int extractMin();
      bool empty();
  };
  
  priorityQueue::priorityQueue()
  {
      front = rear = -1;
      size = 10;
      array = new int[size];
  }
  
  priorityQueue::~priorityQueue()
  {
      delete[] array;
  }
  
  void priorityQueue::insert(int x)
  {
      //if queue is full
      if ( (rear + 1)% size == front ){
          return;
      }
  
      //else if queue is empty
      else if ( empty() ){
          rear = front = 0;
      }
  
      else
      {
          rear = (rear + 1) % size;
      }
  
      array[rear] = x;
  }
  
  //extract and return smallest value in queue
  int priorityQueue::extractMin()
  {
      int minValue = array[front];
  
      if ( empty() ){
          return -1;
      }
  
      else if (front == rear){
          front = rear = -1;
          }
  
      else
      {
          front = (front + 1) % size;
      }
  
      //find smallest value
      for (int i = front; i &lt;= rear; i++){
          if (array[i] &lt; minValue)
              minValue = array[i];
      }
  
      //return smallest value
      return array[front];
  }
  
  bool priorityQueue::empty()
  {
      if ( (front == -1) &amp;&amp; (rear == -1) )
          return true;
      else
          return false;
  }
  
  int main()
  {
      priorityQueue myqueue;
  
      myqueue.insert(4);
      myqueue.insert(3);
      myqueue.insert(2);
      myqueue.insert(1);
  
      cout &lt;&lt; myqueue.extractMin() &lt;&lt; endl;
      cout &lt;&lt; myqueue.extractMin() &lt;&lt; endl;
  
      myqueue.insert(8);
      myqueue.insert(7);
      myqueue.insert(6);
      myqueue.insert(5);
  
      cout &lt;&lt; myqueue.extractMin() &lt;&lt; endl;
      cout &lt;&lt; myqueue.extractMin() &lt;&lt; endl;
      cout &lt;&lt; myqueue.extractMin() &lt;&lt; endl;
  
      system("pause");
      return 0;
  }
  </code></pre>