Eine einfach verkettete Liste kann nur vom Anfang bis zum Ende oder vom Ende bis zum Anfang durchlaufen werden. Daher kann eine einfach verkettete Liste problemlos den nächsten Knoten erreichen, es ist jedoch schwierig, zum vorherigen Knoten zurückzukehren. Eine bidirektional verknüpfte Liste kann vom Anfang bis zum Ende und vom Ende bis zum Anfang durchlaufen werden. Die Verbindung der verknüpften Liste ist bidirektional. Ein Knoten hat sowohl vorwärts- als auch rückwärts verbundene Referenzen. Aus diesem Grund muss die doppelt verknüpfte Liste beim Einfügen oder Löschen eines Knotens die Referenzen von vier Knoten verarbeiten, und der belegte Speicherplatz ist auch größer. Implementierung einer doppelt verknüpften Liste JavaScript-Code zur Implementierung einer doppelt verketteten Liste //Erstelle eine doppelt verkettete Liste Konstruktorfunktion DoublyLinkedList() { //Erstelle eine Knotenkonstruktorfunktion Node(element) { dieses.element = element dies.nächstes = null this.prev = null // Neu hinzugefügt} // Definieren Sie die Eigenschaft this.length = 0 this.head = null this.tail = null // Neu hinzugefügt // Zugehörige Operationsmethoden definieren // Daten am Ende anhängen DoublyLinkedList.prototype.append = function (element) { // 1. Erstellen Sie einen Knoten basierend auf dem Element var newNode = new Node(element) // 2. Bestimmen Sie, ob die Liste eine leere Liste ist, wenn (this.head == null) { this.head = neuer Knoten this.tail = neuer Knoten } anders { this.tail.next = neuer Knoten neuerNode.prev = dieser.tail this.tail = neuer Knoten } // 3.Länge+1 diese.Länge++ } //Daten an beliebiger Position einfügen DoublyLinkedList.prototype.insert = function (position, element) { // 1. Bestimmen Sie das Problem außerhalb der Grenzen, wenn (Position < 0 || Position > this.length) false zurückgibt // 2. Einen neuen Knoten erstellen var newNode = new Node(element) // 3. Einfügeposition bestimmen if (position === 0) { // Daten an der ersten Position einfügen // Bestimmen, ob die verknüpfte Liste leer ist if (this.head == null) { this.head = neuer Knoten this.tail = neuer Knoten } anders { this.head.prev = neuer Knoten neuerNode.next = dieser.kopf this.head = neuer Knoten } } else if (position === this.length) { // Bis zum Ende einfügen // Überlegen: Müssen wir in diesem Fall prüfen, ob die verknüpfte Liste leer ist? Die Antwort lautet nein, warum? this.tail.next = neuer Knoten neuerNode.prev = dieser.tail this.tail = neuer Knoten } else { // Daten in der Mitte einfügen // Attribut definieren var index = 0 var aktuell = dieser.kopf var vorherige = null // Finde die richtige Position while (index++ < position) { vorherige = aktuelle aktuell = aktuell.nächstes } //Die Zeigerreihenfolge der Knoten austauschen newNode.next = current newNode.prev = vorherige current.prev = neuer Knoten vorheriger.nächster = neuer Knoten } // 4.Länge+1 diese.Länge++ returniere wahr } // Lösche das entsprechende Element entsprechend der Position DoublyLinkedList.prototype.removeAt = function (position) { // 1. Bestimmen Sie das Problem außerhalb der Grenzen, wenn (Position < 0 || Position >= this.length) null zurückgibt // 2. Bestimmen Sie den zu entfernenden Ort var current = this.head wenn (Position === 0) { wenn (diese.Länge == 1) { this.head = null this.tail = null } anders { dieser.Kopf = dieser.Kopf.Nächster this.head.prev = null } } sonst wenn (Position === diese.Länge -1) { aktuell = dies.tail dies.tail = dies.tail.prev dies.tail.next = null } anders { Variablenindex = 0 var vorherige = null während (Index++ < Position) { vorherige = aktuelle aktuell = aktuell.nächstes } vorheriges.nächstes = aktuelles.nächstes aktuell.nächstes.vorheriges = vorheriges } // 3.Länge-1 diese.Länge-- aktuelles Element zurückgeben } // Position des Elements in der verknüpften Liste abrufen DoublyLinkedList.prototype.indexOf = function (element) { // 1. Definieren Sie Variablen zum Speichern von Informationen var current = this.head Variablenindex = 0 // 2. Finden Sie die richtigen Informationen, während (aktuell) { wenn (aktuelles.Element === Element) { Rückgabeindex } Index++ aktuell = aktuell.nächstes } // 3. Wenn es an dieser Position nicht gefunden wird, geben Sie -1 zurück Rückgabe -1 } // Löschen entsprechend dem Element DoublyLinkedList.prototype.remove = function (element) { var index = this.indexOf(element) gib dies zurück.removeAt(index) } // Prüfen, ob es leer ist DoublyLinkedList.prototype.isEmpty = function () { gib diese Länge zurück === 0 } //Länge der verknüpften Liste abrufen DoublyLinkedList.prototype.size = function () { gib diese Länge zurück } // Holen Sie das erste Element DoublyLinkedList.prototype.getHead = function () { gib dieses.Kopfelement zurück } // Das letzte Element abrufen DoublyLinkedList.prototype.getTail = function () { gib dieses.tail.element zurück } // Implementierung der Traversierungsmethode // Vorwärts-Traversierungsmethode DoublyLinkedList.prototype.forwardString = function () { var aktuell = dieser.kopf var forwardStr = "" während (aktuell) { forwardStr += "," + aktuelles.element aktuell = aktuell.nächstes } returniere forwardStr.slice(1) } // Umgekehrte Durchquerungsmethode DoublyLinkedList.prototype.reverseString = function () { var aktuell = dies.tail var reverseStr = "" während (aktuell) { reverseStr += "," + aktuelles.element aktuell = aktuell.vorherige } returniere reverseStr.slice(1) } // Implementiere die toString-Methode DoublyLinkedList.prototype.toString = function () { gib dies zurück.forwardString() } } Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird. Das könnte Sie auch interessieren:
|
<<: Lösung zur Deinstallation von Python und Yum im CentOs-System
>>: Prinzip der MySQL-Paging-Analyse und Effizienzverbesserung
Sperren in MySQL Sperren sind ein Mittel, um Ress...
Methode 1: Pycharm herunterladen und installieren...
In diesem Artikel erfahren Sie, wie Sie den Start...
Dieser Artikel beschreibt anhand von Beispielen, ...
Kollegen fragen oft, ob beim Löschen von Dateien/...
In diesem Artikelbeispiel wird der spezifische Co...
Code kopieren Der Code lautet wie folgt: <form...
Vorwort Ein Docker-Image besteht aus einer Docker...
In diesem Artikel wird der spezifische Code von J...
1. Es gibt derzeit viele Tools zur Python-Version...
1. Wichtige Punkte für die frühzeitige Planung de...
Die MySQL-ID beginnt bei 1 und erhöht sich automa...
In diesem Artikel werden die spezifischen Schritt...
1. Beispiel einer Dropdown-Liste Der Code lautet ...
Es gibt drei Möglichkeiten, CSS einzuführen: Inli...