2010-12-11 7 views
-1

Es sollte bevorzugt werden, Elementwerte in der Warteschlange mit der höchsten Priorität zu erhalten.Wie prioriere ich die Queue-Implementierung mithilfe der zirkulären Warteschlange in C++?

+2

ist es per Definition keine Warteschlange. Verwenden Sie stattdessen Heap. – Drakosha

+0

Es gibt eine std :: priority_queue. – Puppy

+0

Scheint etwas Reibung erzeugt zu haben. Vielleicht könnten Sie einen Kontext hinzufügen - wie viele Prioritätsstufen haben Sie? Was ist das weitere Ziel oder ist das eine abstrakte Frage? Ich nehme an, dass Sie eine Prioritätswarteschlange bestimmter Größe wünschen? Das könnte einigen Kommentatoren helfen, direkt zu antworten ... –

Antwort

0

Benötigen Sie stattdessen mehrere Warteschlangen mit unterschiedlichen Prioritäten? Was ist das Problem, das du eigentlich lösen willst?

Die Idee einer Warteschlange ist - dass es eine Warteschlange ist, und was als nächstes in der Warteschlange ist, hat Priorität, und Sie sollten nur durch die Warteschlange gehen, indem Sie Material aus ihm entfernen. Das Implementieren einer Prioritätswarteschlange mit einer anderen Warteschlange - ob zirkulär oder nicht - ist nicht die effizienteste Vorgehensweise. Sie können es stattdessen als Heap oder Tree implementieren - es gibt eine Reihe von Artikeln, einschließlich einer auf Wikipedia on priority queues.

+1

Ja, und eine Prioritätswarteschlange ist anders http://en.wikipedia.org/wiki/Priority_queue – Falmarri

+0

Wenn wir über viele Ebenen der Priorität (1000 zum Beispiel) dann sprechen Mehrere Warteschlangen sind nicht die beste Lösung. – Dialecticus

+0

@Falmarri - nicht sicher, ob Sie meine Antwort richtig gelesen oder interpretiert haben. Eine Prioritätswarteschlange mit einer anderen Warteschlange zu erstellen, macht keinen Sinn - denke, dass du den Punkt verpasst hast. –

0

Sie können eine Prioritätswarteschlange als binären Min-Heap implementieren. Die Schlüssel jedes Eintrags könnten seine "Priorität" darstellen und je niedriger der Schlüssel, desto mehr Priorität hat er. Wenn Sie also den Root-Eintrag entfernen, wird der Eintrag mit der höchsten Priorität zurückgegeben.

Verwandte Themen