#include "priority.h" PriorityQ::PriorityQ() //Default constructor { Queue(); } void PriorityQ::Insert(QElement El, int &Success) //Inserts El in a priority queue in its proper position. //Pre : The queue has been created. //Post: If the queue is not full, increments Rear and inserts El, // and adjusts position of El so that largest element is // always at the fron of the priority queue. Sets Success // to indicate success or failure. { int Pos; //index of current queue element int Next; //index of next queue element QElement Temp; //element to use in performing the exchange if (NumItems == MaxQueue) Success = False; //queue is full else { Rear = (Rear + 1) % MaxQueue; //increment rear Items[Rear] = El; NumItems = NumItems + 1; Success = True; //move last element to its proper position if (NumItems > 1) { Pos = Rear; Next = Pos - 1; //correct negative subscript if (Next < 0) Next = MaxQueue - 1; while ((Pos != Front) && (Items[Pos] > Items[Next])) { //swap out of place values with neighbors Temp = Items[Pos]; Items[Pos] = Items[Next]; Items[Next] = Temp; //advance subscripts to next pair of elements Pos = Next; Next = Pos - 1; //correct negative subscript if (Next < 0) Next = MaxQueue - 1; } } } }