Methoden zum Implementieren von Schleifenwarteschlangen mit Java:
1. Fügen Sie eine Attributgröße hinzu, um die derzeitige Anzahl der Elemente aufzuzeichnen.
Der Zweck ist, wenn Kopf = hinten. Nach Größe = 0 oder Größe = Arraylänge. Die Warteschlange als leer zu unterscheiden, oder die Warteschlange ist voll.
2. Nur das Arraygröße -1 -Element wird im Array gespeichert, um sicherzustellen, dass das Heck nach dem Umdrehen nicht dem Kopf entspricht. Dann ist die Warteschlange voll. Heck+1 = Kopf, es gibt nur ein Element in der Mitte.
Wenn hinten = Kopf. Die Warteschlange muss leer sein.
Die Arten von vereinbarten Operationen an beiden Enden der Warteschlange sind unterschiedlich:
Das Ende, das gelöscht werden kann, wird als Leiter des Teams bezeichnet, und eine solche Operation wird auch als DEQUEUE genannt.
Das Ende, das eingefügt werden kann, wird als Schwanz des Teams bezeichnet, und eine solche Operation wird auch als Enqueue bezeichnet.
Schematisches Diagramm der Warteschlange
Bei der Implementierung einer Warteschlange sollten Sie auf das Phänomen des falschen Überlaufs achten. Wie im letzten Bild oben gezeigt.
Falsches Überlauf, wie in der Figur zu sehen ist
Lösung: Verwenden Sie Kettenspeicher, was offensichtlich kann. Bei sequentiell gespeichert. Unsere gemeinsame Lösung besteht darin, sie mit dem Ende zu verbinden und eine kreisförmige Warteschlange zu bilden. Dies nutzt den Speicherplatz der Warteschlange vollständig.
Schleifenwarteschlangendiagramm:
Im Bild oben. Front zeigt das erste Element in der Warteschlange. Heck zeigt auf die nächste Position am Ende der Warteschlange.
Aber es gibt immer noch ein Problem: Bedeutet dies, dass das Team leer oder voll ist? Sie können sich eine solche Situation vorstellen.
Häufige Praktiken zur Lösung dieses Problems sind Folgendes:
Eine Marke wird verwendet, um solche verwirrenden Situationen zu unterscheiden.
Opfern einen elementaren Raum. Wenn vorne und hinten gleich sind, sind sie leer. Wenn die nächste Position des Hecks vorne ist. Es ist voll.
Zum Beispiel die folgende Abbildung:
Im Folgenden geben wir der Schleifenwarteschlange und verwenden einen anderen Weg, dh einen Elementraum zu opfern, um zwischen leeren und vollständigen Teams zu unterscheiden.
Mehrere wichtige Punkte:
1. Frontpunkte zum Chef des Teams. Heck zeigt auf die nächste Position am Ende des Teams.
2. Schluss, dass das Team leer ist: vorne == hinten; Schlussfolgerung, dass das Team voll ist: (hinten+1)%Maxsize == vorne.
import Java.io.*; public class queuearray {Object [] a; // Objektarray speichert die Warteschlange bis zu A.Length-1-Objekt-Int-Front; // aus dem ersten Index in Heck; // aus dem Ende des Endscript Public Queuarray () {this (10); // andere Konstruktoren aufrufen} public Queuearray (int size) {a = neues Objekt [Größe]; vorne = 0; hinten = 0; } / *** Ein Objekt an das Ende der Warteschlange anhängen* @param obj -Objekt* @return return falsch, wenn die Warteschlange voll ist, ansonsten wahr* / public boolean Enqueue (Objekt obj) {if ((hinterher+1)%A.Length == Vorne) {return false; } a [hinten] = obj; hinten = (hinten+1)%a.länge; zurückkehren; } / *** Das erste Objekt im Kopf der Warteschlange ist dequed* @return das Objekt dequed, wenn die Warteschlange leer ist. } Objekt obj = a [vorne]; vorne = (vorne+1)%a.länge; Rückkehr obj; } public static void main (String [] args) {Queuarray q = new Queuearray (4); System.out.println (q.enqueue ("Zhang san"); System.out.println (q.enqueue ("li si")); System.out.println (q.enqueue ("Zhao Wu")); System.out.println (q.enqueue ("Wang yi"); // Die Warteschlange kann nicht eingeben, die Warteschlange ist voll für (int i = 0; i <4; i ++) {System.out.println (q.dequeue ()); }}}Die obige Zusammenfassung der beiden Methoden zur Implementierung von kreisförmigen Warteschlangen basierend auf Java -Arrays ist der gesamte Inhalt, den ich mit Ihnen teile. Ich hoffe, Sie können Ihnen eine Referenz geben und ich hoffe, Sie können wulin.com mehr unterstützen.