Eine Schlange durchlaufen
Auch eine Schlange hat keinen Index. Man kommt nur vorn an die Elemente — und kann sie hinten wieder anstellen.
- Rotieren:
x = q.dequeue()und danachq.enqueue(x)— das vorderste Element wandert nach hinten. - Ganze Runde:nach n Rotationen steht jedes Element wieder an seinem alten Platz.
- Anzahl:Man kennt n nicht von vornherein — umladen in eine Hilfsschlange und dabei zählen.
- Filtern:n-mal entnehmen und nur die Elemente wieder anstellen, die bleiben sollen; die Reihenfolge bleibt erhalten.
public void entferneNegative(Queue<Integer> q) {
int n = anzahl(q); // Hilfsmethode wie beim Stapel
for (int i = 0; i < n; i++) {
int x = q.dequeue();
if (x >= 0) {
q.enqueue(x); // behalten: hinten wieder anstellen
}
}
}
Schlange durchlaufen: Man kommt nur vorn an die Elemente und kann sie hinten wieder anstellen.
Rotieren: x = q.dequeue(), dann q.enqueue(x); nach \(n\) Rotationen steht jedes Element wieder an seinem Platz.
Anzahl: in eine Hilfsschlange umladen und dabei zählen.
Filtern: \(n\)-mal entnehmen und nur die bleibenden Elemente wieder anstellen; die Reihenfolge bleibt erhalten.
Rechenzeit im Rundlauf verteilen
Ein Prozessor kann immer nur ein Programm gleichzeitig ausführen. Damit trotzdem alle vorankommen, wechselt das Betriebssystem reihum — das Rundlauf-Verfahren (Round Robin).
- Warteschlange:alle rechenbereiten Programme stehen in einer Schlange.
- Zeitscheibe q:das vorderste Programm darf höchstens q Takte rechnen.
- Nicht fertig:es wird mit seiner Restzeit hinten wieder angestellt.
- Fertig:es verlässt die Schlange; seine Fertigstellungszeit wird notiert.
Verändere die Zeitscheibe q und die Rechenzeit von Programm A. Mit ▶ läuft die Zeit Takt für Takt — oben siehst du die Schlange, darunter den Zeitstrahl.
Halte fest: Eine kleine Zeitscheibe verteilt die Rechenzeit gerecht, erzeugt aber viele Wechsel. Eine sehr große Zeitscheibe macht aus dem Rundlauf eine einfache Warteschlange ohne Wechsel.
Rundlauf: x = q.dequeue() → x bis zu \(q\) Takte rechnen lassen → nicht fertig: q.enqueue(x)
Zeitscheibe: Das vorderste Programm darf höchstens \(q\) Takte rechnen; ist es fertig, verlässt es die Schlange und seine Fertigstellungszeit wird notiert.
Wirkung: Eine kleine Zeitscheibe verteilt gerecht, erzeugt aber viele Wechsel; eine sehr große macht den Rundlauf zur einfachen Warteschlange.
Allgemeine Hinweise
Schleife über n, nicht über isEmpty
Wer beim Rotieren while (!q.isEmpty()) schreibt und wieder anstellt, erzeugt eine Endlosschleife — die Schlange wird nie leer.
Anzahl vorher bestimmen
Beim Filtern ändert sich die Länge. Die Zahl der Durchläufe muss vor der Schleife feststehen.
Tabelle führen
Für Rundlauf-Aufgaben eine Zeile je Zeitscheibe: Zeit, Programm, Restzeit, Schlange danach. So bleibt die Reihenfolge nachvollziehbar.
