Einzig verknüpfte Liste
Das folgende Diagramm zeigt eine einzig verknüpfte Liste von drei Elementen:
Jedes Element hat zwei Teile. Der erste Teil hat die Daten. Der zweite Teil hat einen Zeiger, der auf das nächste Element verweist. Die zweite und dritte Elemente ähneln dem ersten. Das letzte Element hat einen Nullzeiger. Mit der einzig verknüpften Liste kann das Durchlaufen nur in eine Richtung gehen: die Vorwärtsrichtung.
Die Elemente einer verknüpften Liste werden nicht mit Referenzen (Indexs in Quadratklammern) behandelt, was alles gleich ist. Sie werden von Iteratoren (Zeiger) zugegriffen. Im Falle einer einzig verknüpften Liste muss der Iterator von Anfang an beginnen und von Element-zu-Element von Element zu Element wechseln, um das beabsichtigte Element zu erreichen.
Doppelt verknüpfte Liste
Das folgende Diagramm zeigt eine doppelt verknüpfte Liste von drei Elementen:
Hier hat jedes Element drei Teile. Der erste Teil hat einen Zeiger, der auf das vorherige Element verweist. Der zweite Teil hat die Daten. Der dritte Teil hat einen Zeiger, der auf das nächste Element verweist. Der erste Teil des ersten Elements hat einen Zeiger, der auf NULL verweist. Der dritte Teil des letzten Elements hat einen Zeiger, der auf NULL verweist. Mit der doppelt verknüpften Liste kann das Durchlaufen in jede Richtung gehen: die Vorwärtsrichtung oder die umgekehrte Richtung.
Die Elemente einer verknüpften Liste werden nicht mit Referenzen (Indexs in quadratischen Klammern) behandelt. Sie werden von Iteratoren (Zeiger) zugegriffen. Bei einer doppelt verknüpften Liste kann sich der Iterator in beide Richtungen bewegen, muss jedoch an beiden Enden beginnen. Die Bewegung kann nicht offiziell innerhalb der Liste starten.
Ziel dieses Artikels ist es, zu bestimmen, was als Zeitkomplexität für die verknüpfte Liste bekannt ist.
Zeitkomplexität im Allgemeinen
Zeitkomplexität ist die relative Laufzeit eines Codes. Zeitkomplexität kann auch als die Anzahl der Hauptvorgänge des Codes angesehen werden.
Ständige Zeit
Eine Hauptoperation wie Einfügung oder Löschen soll eine zeitliche Komplexität der konstanten Zeit haben, da die Aktion einmal als einmal vorkommend angesehen werden kann. Es ist geschrieben als:
O (1)
wobei 1 eine konstante Zeit oder Aktion bedeutet, die einmal auftritt. Dies verwendet die Big-O-Notation, die mit O in Großbuchstaben beginnt, gefolgt von Klammern. Innerhalb der Klammern befindet sich die Anzahl der Hauptvorgänge für die Aufgabe.
Lineare Zeit
Das Lesen eines Arrays von Anfang an- Ein Element nach dem anderen, der nach einem bestimmten Element sucht- wird als lineare Suche bezeichnet.
Das gesuchte Element kann irgendwo in der Mitte gefunden werden und die Suche würde aufhören. Dies ist immer noch eine lineare Suche. Die zeitliche Komplexität für die lineare Suche wird geschrieben als:
An)
wobei n die maximal mögliche Anzahl von Operationen ist.
Linked List Hauptvorgänge
Suche
Für die einzig verknüpfte Liste muss der Code den Zeiger des aktuellen Elements von einem Element zum nächsten wechseln. Dies zeigt auf das nächste Element. Dies ist bei Arrays nicht der Fall. Für die doppelt verknüpfte Liste muss der Code den Zeiger des aktuellen Elements auf das nächste Element hinweisen, um von einem Element zum nächsten zu wechseln. Dies ist bei Arrays nicht der Fall. Für die doppelt verknüpfte Liste muss der Code den Zeiger des aktuellen Elements, der auf das vorherige Element hinweist. Dies ist bei Arrays nicht der Fall.
Streichung
Wenn ein aktuelles Element gelöscht wird, muss der Zeiger des vorherigen Elements, das darauf zeigte. Dann muss der Zeiger des nächsten Elements, auf das der Hinweis auf ihn zeigte, auf das vorherige Element verweisen.
Einfügen
Wenn das aktuelle Element eingefügt wird, muss der Zeiger des vorherigen Elements, das auf das nächste Element hinweist. Der Zeiger des nächsten Elements, das auf das vorherige Element hinwies.
Der vordere Zeiger des aktuellen Elements muss gemacht werden, um auf das neue nächste Element zu verweisen. Der hintere Zeiger des aktuellen Elements muss gemacht werden, um auf das neue vorherige Element zu verweisen.
Zeitkomplexität für verknüpfte Liste
Wenn Sie über die Zeitkomplexität für eine verknüpfte Liste sprechen, ist dies die Zeitkomplexität für die Suche, Einfügung und Löschen, über die gesprochen wird. Es ist nicht die Zeitkomplexität für den Aufbau der verlinkten Liste, über die gesprochen wird. Die Zeitkomplexität für den Aufbau einer verknüpften Liste ist ein anderes Problem.
Suche
Damit eine einzeln verknüpfte Liste nach einem bestimmten Element (Daten) suchen kann. Damit eine doppelt verknüpfte Liste nach einem bestimmten Element gesucht werden kann, muss der Suchcode das Listenelement nach Element- von Anfang an scannen. Oder scannen Sie die Liste, Element nach Element, vom Ende. Die Komplexität der Suchzeit für eine verknüpfte Liste (einzeln oder doppelt) lautet:
An)
wobei n die Anzahl der Elemente in der Liste ist. Es spielt keine Rolle, ob das Element gefunden wurde, irgendwo innerhalb der Liste.
Einfügen
Die Einfügung wird als eine Hauptoperation angesehen. Um ein Element in eine verknüpfte Liste einzufügen. Die zeitliche Komplexität für die Suche ist O (n). Die zeitliche Komplexität für das Einfügen ist o (1). Die zeitliche Komplexität für das Einfügen in eine verlinkte Liste ist also O (N + 1). Der Einfachheit halber wird die zeitliche Komplexität für die Einführung eines Elements in eine verknüpfte Liste geschrieben als:
An)
Streichung
Die Löschung wird als eine Hauptoperation angesehen. Um ein Element in einer verknüpften Liste zu löschen. Die zeitliche Komplexität für die Suche ist O (n). Die zeitliche Komplexität für die Löschung ist o (1). Die Zeitkomplexität für das Löschen in einer verlinkten Liste ist also O (N + 1). Der Einfachheit halber wird die zeitliche Komplexität für das Löschen eines Elements aus einer verlinkten Liste geschrieben als:
An)
Erstellen einer verknüpften Liste in C
Verwenden Sie das Strukturobjekt, um eine doppelt verknüpfte Liste in C zu erstellen. Das erste Datenmitglied sollte einen Zeiger haben, der auf die vorherige Struktur verweist. Das dritte Datenmitglied sollte einen Zeiger haben, der auf die nächste Struktur verweist. Das mittlere Datenmitglied sollte die Daten haben. Das erste Datenelement der ersten Struktur sollte auf NULL verweisen. Das dritte Datenelement der letzten Struktur sollte ebenfalls auf NULL verweisen.
Lassen Sie im Fall einer einzig verknüpften Liste das erste Datenmitglied aus.
Abschluss
Die Zeitkomplexität für die Suche nach einer verknüpften Liste ist:
An)
Der Einfachheit halber lautet die Zeitkomplexität für das Einfügen eines Elements in eine verlinkte Liste:
An)
und nicht o (1).
Der Einfachheit halber lautet die zeitliche Komplexität für das Löschen eines Elements aus einer verknüpften Liste:
An)
und nicht o (1).