JavaScript-Datenstruktur--Warteschlangen

Quelle: Internet
Autor: Benutzer

Tags:. Daten Warteschlange Konsole Funktion Bild der Umsetzung der http-Warteschlange erfordert auch eine Methode

Eine Warteschlange ist eine erweiterte, First-out-Daten-Knoten. Warteschlangen können nur Elemente am Ende das Team einfügen und löschen Sie Elemente an der Spitze des Teams, das ist nicht dasselbe wie im Stapel. Es wird verwendet, um die bestellten Daten speichern. Warteschlangen, wie unsere täglichen Warteschlangen sind an der Spitze des ersten Geschäfts und Neuankömmlinge können nur auf der Rückseite ausrichten. Warteschlangen, die solche Datenstrukturen an vielen Orten in der Programmierung verwendet werden.

Definieren Sie den Vorgang einer Warteschlange

 

Zeigt zwei Operationen der Warteschlange, dem Team und aus dem Kader. Die ausgehende Aktion soll das gegenüberliegende Element zu löschen, und der Warteschlange Betrieb ist das Hinzufügen von Elementen am Ende des Teams. Darüber hinaus müssen wir in der Lage, die Elemente der ersten und das Ende des Teams oder der Elemente des Teams sowie die Länge der Warteschlange, und ein Weg, um die Warteschlange leer zu bekommen, so dass wir die Methode der Warteschlange definieren.

  • Enqueue (Join der Warteschlange)
  • () Aus dem Team entfernen
  • (Vorderen) kehrt zurück zum Teamleader
  • Zurück () Rückkehr ins Team Heck
  • ToString () gibt alle Elemente in allen Warteschlangen zurück
  • Länge () gibt die Länge der Warteschlange zurück.
  • Leere Warteschlange (klar)

Umsetzung von Warteschlangen

Arrays in JavaScript haben Nachteile, die nicht verfügbar in Arrays von anderen Programmiersprachen sind Elemente können direkt an das Ende des Arrays nach nur der Push ()-Methode des Arrays hinzugefügt werden und die Verschiebung () Methode kann verwendet werden, um das erste Element des Arrays zu löschen. Verwendung von Arrays um Warteschlangen zu implementieren ist logisch.

Bereiten Sie zu Beginn der Umsetzung der Queue-Klasse für Spalten, beginnend mit dem Konstruktor;

function Queue() {    this.dataStore = [];    this.enqueue = enqueue;    this.dequeue = dequeue;    this.front = front;    this.back = back;    this.toString = toString;    this.length = length;}

Als nächstes beginnen Sie, die verschiedenen Methoden für die Spalte zu implementieren.

Enqueue ()-Methode fügt ein Element am Ende des Teams, Dequeue ()-Methode löscht das Element an der Spitze des Teams:

Enqueue Funktion (Element) {this.dataStore.push (Element);    Das neue Element am Ende des Teams} Funktion entfernen () {return this.dataStore.shift (); Die Team-Header-Element löschen und zurück auf dieses Elements}

(Vorne) und zurück () Methoden sind die Elemente, die der Warteschlange Teamleiter und Team Schweif, bzw. zurückgeben:

Function Front () {return this.dataStore[0];  Liefert das Team erste Element} Funktion zurück () {return This.datastore [this.datastore.length-1]; Zurück zur Team-Endeelements}

Die ToString ()-Methode zeigt alle Elemente in der Warteschlange:

Funktion ToString () {Var RetStr = ';    This.dataStore.forEach (Val = > {//traverse der Warteschlange zurück RetStr += Val + '\n' von Rechtschreibung alle Elemente in der Warteschlange in Strings;    }); Return RetStr;}

Die Länge ()-Methode gibt die Länge der Warteschlange und die klare ()-Methode leert die Warteschlange:

Function Länge () {return this.dataStore.length;}  Funktion (klar) {this.dataStore.length = 0; Leeren Sie die Warteschlange, indem man die lange 0来 der Warteschlange}

Auf diese Weise wurde die Datenstruktur der Warteschlange mit JavaScript umgesetzt. Als Nächstes testen.

Der Test der Warteschlange

Testcode:

CONST Q = neue Warteschlange (), Q.enqueue ("Java"); Q.enqueue ('Php'); Q.enqueue ('Python'); console.log ("alle Elemente in der Warteschlange:"); console.log () (Q.toString), Q.dequeue () console.log (alle Elemente nach "aus der Mannschaft:"); console.log (q.toString ()); console.log (' Team Head-Elements: "+ Q.front ()); Console.log (' Team Endeelements: "+ q.back ()); console.log (' Warteschlangenlänge:" + q.length ()); Q.clear (); console.log (' Länge nach der Entleerung Warteschlange: "+ q.length ());

Ergebnis:

Die Output-Struktur erfüllt die Erwartungen.

Prioritätswarteschlangen

Im Allgemeinen müssen die Elemente, die aus der Warteschlange entfernt werden die ersten Elemente der Squad beitreten werden. Allerdings gibt es besondere Umstände müssen nicht mit der First-in-Place-Vereinbarung zu erfüllen. Beispielsweise wird der Arzt in der Notaufnahme-Warteschlange, die Priorität des Dienstes nach der Schwere des Zustands des Patienten bestimmen. In solchen Warteschlangen ist es möglich, dass Elemente aus der Warteschlange entfernt nicht die ersten Elemente verbunden werden. In diesem Fall müssen Sie es mit einer Datenstruktur namens eine Prioritätswarteschlange simulieren.

Als nächstes nehmen wir die Notaufnahme Schlange als Vorbild für die folgenden Prioritätswarteschlangen zu erreichen.

Im Wartezimmer der Notaufnahme die behandelnden Krankenschwester wertet die Schwere des Zustands des Patienten, dann gibt einen Priority-Code und der vorrangigen Patient wird bei einem Patienten niedriger Priorität behandelt und die gleiche Priorität Patienten einen Arzt aufsuchen, in der Reihenfolge, in der sie zuerst dienen.

Zuerst definieren Sie die Objekte, die die Warteschlange Elemente zu speichern, und dann bauen Sie unsere Priorität Warteschlangensystem:

Funktion des Patienten (Name, Code) {this.name = Name;    This.Code = Code; Prioritätscode, Integer, im Auftrag von Patienten Priorität}

Nun müssen Sie die Dequeue-Methode () neu zu definieren, so dass es die Elemente in der Warteschlange löscht, die höchste Priorität haben. Wir haben die höchste Priorität für die Elemente, die den minimalen Wert des Priority-Code angeben. Die neue Dequeue ()-Methode durchläuft das zugrunde liegenden Storage-Array der Warteschlange, aus denen das Element mit der kleinsten Prioritätscode gefunden, und dann wird das Element gelöscht. Die neue Dequeque ()-Methode wird wie folgt definiert:

Funktion (Dequeue) {lassen Sie Priorität = this.dataStore[0].code;    Lassen Sie pos = 0;  Verwenden Sie eine einfache sequentielle Suche Methode um zu finden, die höchste Priorität Element this.dataStore.forEach ((p, i) = > {Wenn (P.code) {Priorität) {Priorität =            P.Code;        Pos = i;    }    }); Gibt das Element aus der Warteschlange entfernt zurück this.dataStore.splice (POS 1);}

Schließlich ist die ToString ()-Methode neu implementierte das Patienten-Objekt angezeigt.

Funktion ToString () {Var RetStr = "";    This.dataStore.forEach (P = > {RetStr += "${p.name} Priorität: ${p.code}\n ';    }); Return RetStr;}

Die simulierten Notfall Prioritätswarteschlange abgeschlossen wurde und wir haben es getestet.

Var p = neuen Patient ("kleine One", 5); const ED = neue Warteschlange (), Ed.enqueue (p); p = neuer Patient ("kleine Two", 4), Ed.enqueue (p); p = neuen Patient (" Ed.enqueue (p), Junior ", 6); p = neuer Patient ("kleine Four", 1), Ed.enqueue (p), p = neuen Patient ("Small Five", 1); Console.log (' Leute in der Schlange:"); Console.log (ed.toString ()); //first ed.enqueue (p); Runde Var gesehen = Ed.dequeue (); console.log (' Patienten gerade besucht wird: "+ seen[0].name); Console.log (' warten Person: ") console.log (ed.toString ()); //next Runde des Var gesehen = Ed.dequeue (); console.log (' Patienten abgeholt:" + seen[0].name) Console.log (' warten Person: ") console.log (ed.toString ()); //next Runde des Var gesehen = Ed.dequeue (); console.log (' Patienten abgeholt:" + [0] .name gesehen ); Console.log (' warten Person: ") console.log (ed.toString ());

Geben Sie die Ergebnisse:

Wie Sie sehen können, werden die Diagnose aus der Warteschlange nach Priorität, eins nach dem anderen abgeholt werden.

JavaScript-Datenstruktur--Warteschlangen

Kontaktiere uns

Die Inhaltsquelle dieser Seite ist aus dem Internet, und vertritt nicht die Meinung von Alibaba Cloud; auf dieser Seite erwähnte Produkte und Dienstleistungen haben keine Beziehung zu Alibaba Cloud. Wenn der Inhalt der Seite Ihrer Meinung nach verwirrend ist, schreiben sie uns bitte eine E-Mail. Wir werden das Problem innerhalb von 5 Tagen nach Erhalt Ihrer E-Mail bearbeiten.

Wenn Sie Fälle von Plagiaten aus der Community feststellen, senden Sie bitte eine E-Mail an info-contact@alibabacloud.com und legen Sie entsprechende Beweise vor. Ein Mitarbeiter wird Sie innerhalb von 5 Werktagen kontaktieren.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.