Informatik "Rätsel"?
Programmiersprache: JavaWie stellt man bei der Datenstruktur Queue Objekte nicht hinten sondern vorne an? Also vom Code her.Kontext/Hintergrund von dieser Frage: Ich habe eine PriorityQueue. Doch dann soll plötzlich ein neues Objekt hinzugefügt werden, welches eine höhere Priorität als alle bereits in der PriorityQueue vorhandenen Objekte hat. (Da das hinzuzufügende Objekt ja die höchste Priorität hätte, müsste es ganz vorne in der PriorityQueue stehen).
Natürlich habe ich mir, bevor ich die Frage hier auf GF stelle, selbst nachgedacht, wie man das Problem lösen könnte. Bis jetzt ist mir aber nur
first = new QueueInhalt(pObject, pPriority);
eingefallen. Ich komme beim setNext(), also wenn der neue, eingefügte, Knoten QueueInhalt seinen Next - Link auf den ursprünglich an derselben Stelle (ganz vorne) gewesenen Knoten QueueInhalt setzt. (Wenn man ein Objekt hinten anstellt, schön nach FIFO halt, hätte ich kein Problem mit dem Setzen der next - links und first - links. Aber vorne anstellen? Keine Ahnung, wie das gehen soll.)
Danke und ein "Hilfreich" schonmal für eure Antworten😀
public void add(ContentTypePerson pObject, int pPriority) {
QueueInhalt inhaltsobjekt = new QueueInhalt(pObject, pPriority);
if (first == null) { //Wenn kein Objekt in der Queue vorhanden ist
first = new QueueInhalt(pObject, pPriority);
} else if (pPriority > first.getPriority()) {
first = new QueueInhalt(pObject, pPriority);
//...?
}
}
2 Antworten
Du erstellst das neue Element, trägst als "next" den derzeit ersten konten der Queue ein und setzt dann den derzeit ersten Knoten der Queue auf das neue Element:
newElem.next = queue.head;
queue.head = newElem;
Wohlgemerkt: Wenn du Elemente verschiedenster Priorität in der Queue hast und das neue Element an der genau passenden Stelle einfügen möchtest, wird es komplizierter, da du dann erst die passende Stelle finden müsstest.
Mit einer reinen Queue geht das nur über Umwege, über eine weitere Queue.
Um an beiden Seiten einzufügen, benötigt man wenigstens eine Deque (Erweiterung von Stack und Queue, lässt an beiden Enden Anfügen und Entnehmen zu).
-----
Für diese Art von Aufgabe würde ich eine Klasse PrioritizingQueue definieren, die Einsortierungen automatisch vornimmt. (Vermutlich als eine Art verkettete Liste.)