Verknüpfte Liste>
— , , , , ( ) , , .
Nicht alle Industriesprachen bieten integrierte Unterstützung für verknüpfte Listen als Datenstrukturen. Es ist jedoch nicht schwierig, es selbst als Klasse oder Struktur zu implementieren. Für eine komfortable Arbeit mit den relevanten Algorithmen werden wir bereits in der Grunddefinition der Hi-Sprache integrierte bidirektionale verknüpfte Listen hinzufügen.
Lassen Sie uns zunächst eine Instanz unserer experimentellen Liste erstellen:
VAR list = <"I", "will", "be">
Im obigen Beispiel werden bidirektionale Links automatisch für drei Knoten erstellt.
Eine verknüpfte nicht leere Liste in Hi hat immer einen Knoten, der aktuell oder "aktiv" ist. Standardmäßig ist dies das zuletzt hinzugefügte Element, das jetzt "be" ist. Lassen Sie uns dies überprüfen:
PRINT list.current # "be"
Fügen wir unserer Liste zwei weitere Elemente hinzu:
list.insert "back", "!" # list : "I", "will", "be", "back", "!"
Die integrierte Einfügemethode fügt unmittelbar nach dem aktiven Knoten neue Elemente hinzu , erstellt automatisch neue Verknüpfungen und macht das zuletzt hinzugefügte Element aktuell (Sie können den ersten mit der Methode insertFirst hinzufügen und einen neuen Listenknoten erstellen).
Das Entfernen erfolgt für das aktuelle Element auf ähnliche Weise :
list.remove 1 # list : "I", "will", "be", "back"
Sie können jedoch mehrere Elemente gleichzeitig löschen. Dazu müssen Sie zunächst den Zeiger auf den ersten zu löschenden Knoten setzen:
VAR secList = list
secList.prev 2
secList.remove 2 # secList : "I", "back"
In diesem Fall wird der vorherige Knoten vor dem gelöschten zum aktuellen Knoten . Wenn das erste Element der Liste gelöscht wird, wird das neue erste Element zum aktuellen .
Sie können den aktuellen Knoten durch einen anderen ersetzen, indem Sie dem Element einfach einen neuen Wert zuweisen:
secList.urrent = "smile" # secList : "smile ", "back"
Sie können alle Knoten löschen, dh Sie können die Liste folgendermaßen leer machen:
secList = <>
Es ist bequem, zum ersten und letzten Knoten wie folgt zu gehen:
list.first
LET last = list.last #
Auf diese Weise können Sie mit der Liste problemlos verschiedene Vorgänge ausführen:
PRINT list # "I", "will", "be", "back"
list.first
list.next
list.insert "not"
LET be = list