1. Schreiben Sie es vor
Die Warteschlangen in der Datenstruktur sollten vertrauter sein, was erstmals zuerst ausgeht. Aufgrund der Ordnung werden sie als Warteschlangen bezeichnet. Es ist wie Warteschlangen. Einfügen eines neuen Knotens am Ende der Vorderseite und löscht den Knoten am ersten.jdk -Sammlungsframework auch eine Warteschlangenschnittstelle. Diese Schnittstelle repräsentiert eine Warteschlange. Sequentielle Warteschlangen: ArrayBlockingQueue, LinkedBlockingQueue. (Die oben genannten zwei sind farbige Warteschlangen) und der andere ist übereinstimmend.
Die zugrunde liegende Implementierung besteht aus zwei Arten von kombinierten Listen. Die Implementierung von Arrays hat Nachteile, die eine falsche Fülle verursachen. Wenn die Warteschlange leer ist, sind die Referenzvariablen der ersten Referenzvariablen zum Schwanz null. Wenn die Warteschlangenelemente gelöscht werden, treten vorne+1 auf und das Heck entspricht der Kapazität des zugrunde liegenden Arrays. In der sequentiellen Speicherstruktur speichert die Front immer den Index der Elemente, die in der Warteschlange aus der Warteschlange stehen, und das Heck spart immer den Index der Elemente, die in die Warteschlange eingegeben werden sollen. Die Anzahl der Elemente in der Warteschlange ist hinten. In der sequentiellen Warteschlange ist die zugrunde liegende Schicht ein Array, sodass sich die gespeicherten Datenelemente nicht ändern, und nur die beiden Referenzvariablen hinten und vorne werden geändert.
Was verwendet werden kann, um den Platz mithilfe von Kettenspeichern effektiv zu nutzen, ist, dass die Referenzvariablen zusätzlichen Platz einnehmen.
Gemeinsame Operationen für Warteschlangen:
1: Initialisierung
2: Geben Sie die Länge der Warteschlange zurück
3: Elemente hinzufügen
4: Elemente löschen
5: Greifen Sie auf das Header -Element zu
6: Greifen Sie auf die Paar-Tail-Elemente der Warteschlange zu
7: Bestimmen Sie, ob die Warteschlange leer ist
8: Löschen Sie die Warteschlange
2. Custom Implementierung
Die Quellcode -Anzeige ist klar, daher müssen sie nicht eingeführt werden
öffentliche Klasse LinkedQueue <T> {// benutzerdefinierte Kettenwarteschlange-Use Nicht-statische interne Klassen, um den Datenknoten der Kettenwarteschlange private Klasse zu darzustellen {// Bezeichnung des Datenknotens der Kettenwarteschlange private T-Daten; // Verweis auf den nächsten Knoten als nächstes; @SuppressWarnings ("unbenutzt") public node () {} public node (t data, node als nächstes) {thata.data = data; this.Next = Weiter; }} // Definieren Sie die Referenz auf den Kopf und den Schwanz der Kettenwarteschlange Private Node Front; privater Knoten hinten; // die Größe des Kettenstapels Private int -Größe definieren; // Erstellen Sie eine leere öffentliche LinkedQueue () {Front = null; rücken = null;} // Erstellen Sie eine Kettenpaarspalte mit einem bestimmten Element und nur ein Knoten public LinkedQueue (telement) {vorne = neuer Knoten (Element, null); // Zeigen Sie auf das gleiche Element hinten. elementfront () {if (! leer ()) {return vorne.data;} else {return null; }} // Zugriff auf das letzte Element der Warteschlange public telementrear () {if (! Leer ()) {return ard.data; } else {return null; }} // zurückgeben, ob die aktuelle Warteschlange des Kettenpaars leer ist, öffentlich boolean leer () {return size == 0; } // eine Kettenwarteschlange public void clear () {vorne = null; hinten = null; size = 0;} // Einen Knoten in die Kettenwarteschlange einfügen-pair public void add (telement) {// Wenn die Spalte des Kettenpaares leer ist, erstellen Sie einen neuen Knoten, wenn (vorne == null) {rard = neuer Knoten (Element, Null); vorne = hinten; } else {// dynamisch einen neuen Knotenknoten newrear = neuer Knoten (Element, null); rad.Next = newrear; rücken = newrear; } size ++;} // einen Knoten in der Kettenwarteschlange löschen und den gelöschten Knoten public t REMET () {Knoten oldfront = vorne; vorne = vorne.Next; oldfront.next = null; Größe--; return oldfront.data;} // Rückgabe der Warteschlange öffentliche String toString () {// Wenn die Kettenwarteschlange ist, ist die Leer -Kettenwarteschlange if (leer ()) {return "[]"; } else {stringBuilder sbuilder = new StringBuilder ("["); für (Knoten current = vorne; current! return sbuilder.delete (len-1, len) .Append ("]"). toString ();}} public static void main (string [] args) {linkedQueue <string> lqueue = new linkedQueue <string> (); lqueue.add ("aaa"); lqueue.add ("BBB"); lqueue.add ("CCC"); lqueue.add ("ddd"); Warteschlange: "+lqueue.elementRear ()); System.out.println (lqueue.length ());Auslaufergebnisse:
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.