DIGITAL
Die Datenstrukur doppelt verkettete Liste ist eine situationsabhängige Alternative zu Arrays. Die Datenstruktur besteht aus Elementen, die neben ihren eigentlichen Werten zusätzlich ein Vorgänger- und ein Nachfolgerelement kennen. Hier ein Beispiel für zwei Einträge einer doppelt verketteten Liste:
Die Datenstruktur selbst enthält zwei Zeiger, die auf das erste und letzte Element zeigen. In einer leeren Liste sind beide mit dem nullptr
belegt. Im folgenden Beispiel wurde der Wert 8 an Position 1 in die verkettete Liste eingefügt:
Wir werden die Funktionalität unserer doubly_linked_list
so implementieren, dass der Nutzer der Datenstruktur nie mit Objekten vom Typ element
interagieren muss. Das reduziert die Fehleranfälligkeit des Programms.
struct element
und struct doubly_linked_list
mit den nötigen Membervariablen. Die Datenstruktur und deren Methoden sollen in einer Headerdatei doubly_linked_list.h
definiert und in einer Datei doubly_linked_list.cpp
implementiert werden. doubly_linked_list
) müssen sie den Destruktor (~doubly_linked_list()
), den Copy-Konstruktor (doubly_linked_list(const doubly_linked_list&)
) und den Copy-Assignment-Operator (doubly_linked_list& operator=(const doubly_linked_list&)
) explizit überschreiben. Das gilt nicht für element
, da die doubly_linked_list
für deren Management zuständig ist.element
-Structs: void insert_after(uint64_t value);
void insert_before(uint64_t value);
element* remove();
doubly_linked_list
. Versuchen Sie dabei die Zugriffe auf die Knoten minimal zu halten. void append(uint64_t val)
und void prepend(uint64_t val);
bool insert_at(uint64_t val, size_t position);
size_t size();
bool remove(size_t position);
delete
löschen müssen.uint32_t operator[](size_t position)
oder uint32_t get(size_t position);
get
, ob der angefragte Index gültig ist und werfen wenn nötig eine Exception, die operator[]
-Implementierungen hingegen nicht.void print();
void append_merge(doubly_linked_list &b)
und void prepend_merge(doubly_linked_list &b);
void sort();
main
-Methode.doubly_linked_list
sind unabhängig von der Listenlänge schnell, welche langsam? Begründen Sie Ihre Antwort kurz.