La mise en œuvre de la priorité de la file d'attente en C++

Je suis en train de mettre en œuvre une file d'attente à l'aide d'un tableau circulaire. Mon code est censé être en mesure de retirer le nombre le plus bas de la file d'attente. J'ai créé test de code de sortie 1 2 3 4 5 les valeurs les plus faibles étant enlevé, mais mon réel de production est de 3 2 1 8 7. Je ne sais pas si mon problème est que mon code pour trouver la valeur la plus faible est incorrect ou il y a un problème avec la façon dont je suis le codage de l'effectif de la file d'attente. Je soupçonne les deux, mais j'apprécierais des suggestions ou des conseils pour trouver le problème dans mon code.

#include <iostream>
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 <= rear; i++){
if (array[i] < minValue)
minValue = array[i];
}
//return smallest value
return array[front];
}
bool priorityQueue::empty()
{
if ( (front == -1) && (rear == -1) )
return true;
else
return false;
}
int main()
{
priorityQueue myqueue;
myqueue.insert(4);
myqueue.insert(3);
myqueue.insert(2);
myqueue.insert(1);
cout << myqueue.extractMin() << endl;
cout << myqueue.extractMin() << endl;
myqueue.insert(8);
myqueue.insert(7);
myqueue.insert(6);
myqueue.insert(5);
cout << myqueue.extractMin() << endl;
cout << myqueue.extractMin() << endl;
cout << myqueue.extractMin() << endl;
system("pause");
return 0;
}
est-ce correct que vous return tableau[avant] pas minValue de extractMin()?
oubliée. merci pour l'attraper.
Remarque: votre file d'attente est cassé, si vous essayez de le copier, vous aurez probablement l'expérience d'un crash. Au lieu d'utiliser new, essayez d'utiliser std::vector<int>; vous pouvez alors retirer le destructeur, vous a écrit que ce sera inutile. En général, je vous conseille de ne pas mélanger les responsabilités: une classe pour gérer la mémoire, une classe permettant de gérer la logique, de cette façon, les deux sont simples (et peut être testé de façon indépendante).

OriginalL'auteur JosephK | 2014-02-10