L'opération enqueue()
qui insère correctement un nœud dans la file d'attente contient la logique de base de mon programme. J'ai mis en place la même file d'attente prioritaire en utilisant la récursivité et je sais que le reste du programme fonctionne bien. Maintenant, je veux implémenter la file d'attente prioritaire en utilisant l'itération commune. L'opération enqueue()
devrait fonctionner selon mon projet de plan ci-dessous.Implémentation de la liste chaînée de la file d'attente prioritaire dans l'échec de l'opération C-enqueue()
Cependant quand je lance le programme échoue, sans aucune erreur du tout (testé dans VS et gcc). Je ne peux pas comprendre où ma logique dans celui-ci échoue et cela me rend fou. L'aide sera appréciée!
Le code suit.
// The PQ is sorted according to its value
// Descending order sorted insertion (bigger first -> smaller last)
void enqueue(pqType val, PriorityQueue *PQ)
{
if (!isFull(PQ)) {
PQ->count++;
Node *currentNode = PQ->headNode; // Iterate through PQ using currentNode
Node *prevNode = NULL; // the previous Node of our current iteration
Node *newNode = (Node*) malloc(sizeof(Node)); // The new Node that will be inserted into the Queue
int i = 0;
while (i < MAX_QUEUE_SIZE) {
// if PQ is empty, or if val is larger than the currentNode's value then insert the new Node before the currentNode
if ((currentNode == NULL) || (val >= currentNode->value)) {
newNode->value = val;
newNode->link = currentNode;
prevNode->link = newNode;
break;
}
else {
prevNode = currentNode;
currentNode = currentNode->link;
}
i++;
}
//free(currentNode);
//free(prevNode);
}
else
printf("Priority Queue is full.\n");
}
sur votre premier equeue (PQ est vide) cette ligne "prevNode-> link = newNode" devrait échouer –
Pourquoi une implémentation liste chaînée? Un tas est généralement un meilleur choix pour une file d'attente prioritaire. – pjs