Vorwort: Zum Speichern mehrerer Elemente sind Arrays die am häufigsten verwendete Datenstruktur. Allerdings haben Arrays auch viele Nachteile:
Um mehrere Elemente zu speichern, ist eine verknüpfte Liste eine weitere Option. Im Gegensatz zu einem Array müssen die Elemente in einer verknüpften Liste keinen zusammenhängenden Speicherplatz im Speicher bilden. Jedes Element einer verknüpften Liste hat einen Knoten, der das Element selbst und einen Verweis auf das nächste Element speichert.
Verkettete Listen haben gegenüber Arrays einige Nachteile:
1. Was ist eine einfach verknüpfte ListeWas genau ist also eine einfach verkettete Liste? Es ist wie bei einem Zug. Die Lokomotive ist mit einem Knoten verbunden, auf dem Knoten befinden sich Passagiere, und dieser Knoten ist mit dem nächsten Knoten verbunden usw., wie unten dargestellt: Unsere verknüpfte Listenstruktur ist: Nachdem wir nun die intuitiv verknüpfte Liste verstehen, kapseln wir den Code für die einfach verknüpfte Liste. 2. Kapselung einer einfach verknüpften Liste Zuerst kapseln wir eine Wie unten dargestellt: Funktion LinkedList(){ diese.Länge = 0; dieser.kopf = null; //Interne Klassenfunktion Node(data){ diese.daten = Daten; dies.nächstes = null; } } 3. Allgemeine Operationen einfach verknüpfter ListenFügen Sie dann die häufig verwendeten Operationen einfach verketteter Listen hinzu. Die wichtigsten sind:
Als nächstes werden wir sie nacheinander implementieren. 1. append(element)-Methode ----- fügt ein Element am Ende der Liste hinzuWeil es zwei mögliche Situationen gibt, Daten am Ende einer verknüpften Liste hinzuzufügen:
Wir müssen also eine Entscheidung treffen: Wenn die verknüpfte Liste leer ist, richten Sie den Zeiger des Kopfknotens direkt auf den neuen Knoten. LinkedList.prototype.append = Funktion(Daten){ var newNode = neuer Knoten (Daten); // Bestimmen Sie, ob die verknüpfte Liste leer ist // 1. Wenn sie leer ist if (this.length === 0) { dieser.kopf = neuer Knoten; }anders{ //Nicht leer var current = this.head; wenn(aktuell.nächste){ aktuell = aktuell.nächstes; } aktuell.nächster = neuer Knoten; } diese.Länge += 1; } 2. toString-Methode ----- gibt den Wert des Elements aus Das ist relativ einfach. Die Hauptsache ist, jedes Element abzurufen. Da das Abrufen eines beliebigen Elements der verknüpften Liste beim ersten Knoten beginnen muss, können wir beim Kopfknoten beginnen, jeden Knoten durchlaufen, LinkedList.prototype.toString = Funktion(){ var aktuell = dieser.kopf; var ListStr = ''; während(aktuell){ ListStr += aktuelle.Daten + ' '; aktuell = aktuell.nächstes; } gibt ListStr zurück; } Überprüfung: Mehrere neue Knoten erstellen und drucken var list = neue LinkedList(); Liste.anhängen('a'); list.append('b'); list.append('c'); Liste.anhängen('d'); Liste.anhängen('e'); Alarm (Liste); Das Druckergebnis ist: 3. Einfügemethode ----- Fügt ein Element an einer bestimmten Position in der Liste ein Um die Methode zum Einfügen von Daten an einer beliebigen Position zu implementieren, bestimmen Sie zunächst, ob die Einfügeposition außerhalb der Grenzen liegt, und teilen Sie sie dann in zwei Fälle auf, wenn sie nicht außerhalb der Grenzen liegt. Wenn es an der ersten Position eingefügt wird, bedeutet dies, dass der neu hinzugefügte Knoten der Kopf ist. Dann muss der ursprüngliche Kopfknoten als nächster des neuen Knotens verwendet werden, und dann muss der Kopf auf den neuen Knoten zeigen. Wenn Sie es an anderen Positionen einfügen, müssen Sie zuerst die Knotenposition durch eine Schleife finden und während der Schleife den vorherigen und den nächsten Knoten speichern. Nachdem Sie die richtige Position gefunden haben, richten Sie Der Code lautet wie folgt: LinkedList.prototype.insert = Funktion(Position,Daten){ wenn(Position<0 || Position >diese.Länge){ gibt false zurück; } var newNode = neuer Knoten (Daten); Var-Index = 0; wenn(Position == 0){ neuerKnoten.nächster = dieser.Kopf; dieser.kopf = neuer Knoten; }anders{ während(index++ < position){ var aktuell = dieser.kopf; var vorherige = null; vorherige = aktuelle; aktuell = aktuell.nächstes; } neuerNode.next = aktuell; vorheriger.nächster = neuer Knoten; } diese.Länge += 1; gibt true zurück; } Überprüfung: Tragen Sie an der ersten Stelle xl und an der zweiten Stelle wh ein. Liste.Einfügen(1,'xl') Liste.Einfügen(2,'wh') Alarm (Liste) 4. Get-Methode ----- Holen Sie sich das Element an der entsprechenden Position Diese Methode ist relativ einfach. Zuerst wird geprüft, ob LinkedList.prototype.get = Funktion(Position,Daten){ var aktuell = dieser.kopf; Var-Index = 0; wenn(Position < 0 || Position >= diese.Länge){ gibt null zurück; }anders{ während(Index<Position){ aktuell = aktuell.nächstes; Index++; } aktuelle Daten zurückgeben; } } Überprüfung: Holen Sie sich das Element an der dritten Position: alarm(Liste.get(3)); 5. indexOf()-Methode ----- gibt den Index eines Elements in einer Liste zurückStellen Sie zunächst fest, ob die Position des gesuchten Elements vorhanden ist. Wenn nicht, geben Sie -1 zurück. Wenn es vorhanden ist, gibt es zwei Fälle: Wenn das zurückgegebene Element an der ersten Position steht, wird direkt der Index der ersten Position zurückgegeben. Wenn sich das zurückgegebene Element an einer anderen Position befindet, müssen Sie zunächst die Knotenposition über eine Schleife finden. Während dieses Vorgangs muss der Index um die Anzahl der Durchläufe erhöht werden. Nachdem die Position des richtigen Elements gefunden wurde, ist der ausgegebene Index die Zielposition. LinkedList.prototype.indexOf = Funktion(Daten){ Var-Index = 0; var aktuell = dieser.kopf; während(aktuell){ wenn(aktuelle.Daten == Daten){ Rückgabeindex; } anders{ aktuell = aktuell.nächstes; Index++; } } Rückgabe -1; } } Überprüfung: Ermitteln Sie den Index von c: Alarm(Liste.Index von('c')); 6. Aktualisierungsmethode ----- Ändern Sie das Element an einer bestimmten Position Diese Methode ist der get-Methode sehr ähnlich. Sie durchläuft sie rückwärts. Wenn der Wert von LinkedList.prototype.update = Funktion(Position,Element){ wenn(Position<0 || Position>=diese.Länge){ gibt false zurück; }anders{ Var-Index = 0; var aktuell = dieser.kopf; während(index++ <position){ aktuell = aktuell.nächstes; } aktuelle.Daten = ele; gibt true zurück; } } Überprüfung: Ändern Sie das Element an Position 0 in: bear Liste.Update(0,'Bär') Alarm (Liste) 7. removeAt-Methode ----- Entfernt ein Element von der angegebenen Position der Liste Bestimmen Sie zunächst, ob die Position des gelöschten Elements außerhalb der Grenzen liegt. Wenn sie dann nicht außerhalb der Grenzen liegt, geben Sie zwei temporäre Knoten an, LinkedList.prototype.removeAt = Funktion (Position, Daten) { var aktuell = dieser.kopf; var vorherige = null; Var-Index = 0; wenn(Position<0 || Position>=diese.Länge){ gibt false zurück; }anders{ während(index++ <position){ vorherige = aktuell; aktuell = aktuell.nächstes; } vorheriges.nächstes = aktuelles.nächstes; diese.Länge -= 1; gibt true zurück; } } } Überprüfung: Entfernen Sie das Element an der dritten Position: Liste.entfernenAt(3) Alarm (Liste) 8. Remove-Methode - Entfernen Sie ein Element aus der Liste Bestimmen Sie zunächst, ob das zu löschende Element in der verknüpften Liste enthalten ist. Wenn nicht, geben Sie LinkedList.prototype.remove = Funktion(Element){ var aktuell = dieser.kopf; var vorherige = null; Var-Index = 0; während(aktuelle.Daten !== ele){ vorherige = aktuelle; aktuell = aktuell.nächstes; Index++; } vorheriges.nächstes = aktuelles.nächstes; } Überprüfung: Löschen Sie das Element mit dem Wert xl: Liste.entfernen('xl') Alarm (Liste) 9. isEmpty-Methode ----- Bestimmen Sie, ob die verknüpfte Liste leer ist Gemäß LinkedList.prototype.isEmpty = Funktion(){ gib diese Länge zurück == 0; } verifizieren: Alarm (Liste.istEmpty()) 9. Size-Methode ----- Gibt die Anzahl der in der verknüpften Liste enthaltenen Elemente zurück LinkedList.prototype.size = Funktion(){ gib diese Länge zurück; } verifizieren: Alarm (Liste.Größe ()) Dies ist das Ende dieses Artikels über JavaScript, das die Prozessanalyse von Single Linked Lists implementiert. Weitere relevante Inhalte zu JavaScript, das Single Linked Lists implementiert, finden Sie in den vorherigen Artikeln von 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird! Das könnte Sie auch interessieren:
|
<<: CSS3 verwendet Transform, um eine bewegliche 2D-Uhr zu erstellen
>>: So konfigurieren Sie den Runner-Container in Docker
In niedrigeren Versionen von Firefox können keine ...
Wenn Sie den Stil „table-layer:fixed“ für eine Ta...
Hinweis: Sie müssen dem übergeordneten Container ...
Wenn Sie ein Arbeitgeber fragt, ob in einer MySQL...
Einführung Mit EXISTS wird geprüft, ob eine Unter...
Ein Muss für Vorstellungsgespräche. Sie werden es...
Die Wirkung ist wie folgt:Referenzprogramm: <!...
Es gibt viele Gründe für den Export von MySQL-Dat...
Shtml und asp sind ähnlich. In Dateien mit dem Nam...
Ich habe den Computer neu installiert und die neu...
Vorwort Dockerfile ist ein vom Docker-Programm in...
MySQL-Server hat Problem in PHP behoben 1. Hinter...
Inhaltsverzeichnis Vorwort 1. Einführung in Axios...
In diesem Artikel werden die Installations- und K...
Inhaltsverzeichnis Vorwort Die Rolle des Renders ...