Implementierung einer einfach verknüpften Python-Liste
Erfahren Sie, wie Sie eine einfach verknüpfte Liste in Python implementieren. Entdecken Sie die dynamische Speicherzuweisung, Knotenoperationen, Einfügung, Durchquerung und Löschung.
Übersicht
Eine verknüpfte Liste ist eine lineare Datenstruktur, bei der Elemente nicht an zusammenhängenden Speicherorten gespeichert werden. Stattdessen ist jedes Element (Knoten genannt) ein separates Objekt, das einen Verweis auf den nächsten Knoten in der Sequenz enthält.
Der Hauptvorteil einer verknüpften Liste gegenüber einem herkömmlichen Array ist ihre dynamische Größenanpassung und die Möglichkeit, Elemente zu Beginn in konstanter O(1)-Zeit einzufügen oder zu löschen. Der Zugriff auf Elemente über den Index erfordert jedoch eine lineare Durchquerung, die O(n) Zeit benötigt.
In Python implementieren wir eine verknüpfte Liste, indem wir eine Node-Klasse zum Speichern der Daten und des Referenzzeigers sowie eine LinkedList-Klasse zum Verwalten des Kopfknotens, Einfügungen am Kopf oder Ende und Löschungen definieren.
Code- und Ausführungsausgabe
Implementierung einer einfach verknüpften Liste in Python, die die Knotenerstellung, das Anhängen und das Durchlaufen von Listen veranschaulicht.
class Node:
def __init__(self, data):
self.data = data
self.next = None
class LinkedList:
def __init__(self):
self.head = None
def append(self, data):
new_node = Node(data)
if not self.head:
self.head = new_node
return
last = self.head
while last.next:
last = last.next
last.next = new_node
def delete(self, key):
curr = self.head
if curr and curr.data == key:
self.head = curr.next
curr = None
return
prev = None
while curr and curr.data != key:
prev = curr
curr = curr.next
if not curr:
return
prev.next = curr.next
curr = None
def display(self):
elements = []
curr = self.head
while curr:
elements.append(str(curr.data))
curr = curr.next
print(" -> ".join(elements) + " -> None")
# Instantiate and build the linked list
llist = LinkedList()
llist.append("Node A")
llist.append("Node B")
llist.append("Node C")
print("Initial Linked List:")
llist.display()
print("Deleting 'Node B':")
llist.delete("Node B")
llist.display()Initial Linked List:
Node A -> Node B -> Node C -> None
Deleting 'Node B':
Node A -> Node C -> NoneSchrittweise Umsetzung
- Implementierung der Undo-Redo-Funktionalität in Texteditoren
- Aufbau komplexer Datenstrukturen wie Diagramme, Stapel und Warteschlangen
- Verwalten von Listen, bei denen die Einfügungs- und Löschhäufigkeit die Suchaktionen übersteigt
Häufig gestellte Fragen
Was ist der Unterschied zwischen einfach und doppelt verknüpften Listen?
In einer einfach verknüpften Liste zeigt jeder Knoten nur auf den nächsten Knoten. In einer doppelt verknüpften Liste enthält jeder Knoten Verweise sowohl auf den nächsten als auch auf den vorherigen Knoten, was eine bidirektionale Durchquerung auf Kosten von zusätzlichem Speicher ermöglicht.
Warum verfügt Python nicht über eine integrierte LinkedList-Klasse?
Python-Arrays (Listen) werden als dynamische Arrays implementiert. Aufgrund der Speicherverwaltung von Python und derCPython-Optimierungen sind Standardlisten für die meisten Aufgaben äußerst schnell und effizient, wodurch der praktische Bedarf an einer integrierten verknüpften Liste verringert wird.
Verwandte Themen
Implementieren Sie einen LIFO-Stack in Python. Führen Sie unser interaktives Stack-Codebeispiel aus, um Push-, Pop-, Peek- und Kapazitätsgrenzen zu meistern.
Tutorial zur Python-WarteschlangendatenstrukturMaster-FIFO-Warteschlangenoperationen in Python. Führen Sie unser interaktives Warteschlangenbeispiel aus, das die Enqueue- und Dequeue-Methoden zeigt.