Dipl. User mit summa cum laude
Listen lassen sich sogar verhaeltnismaessig gut sortieren. Kommt natuerlich auch auf den Algorithmus an.
Ansonsten koenntest du natuerlich auch mit einem Array von Pointern arbeiten. Du alloziierst genug Speicher um alle Pointer zu halten, die du jemals brauchen wirst und initialisierst das Array dann mit NULL.
Damit hast du Zugriff auf einen Index in O(1) (Constant Time), Anfuegen ans Ende in O(1), falls du die Anzahl belegter Indizes speicherst, sowie Vertauschen von zwei Indizes in O(1).
Sogar das Loeschen eines Index kannst du in O(1) hinkriegen, wenn du den Pointer des Index auf NULL setzt und den Index selbst in einer Queue oder einem Stack zwischenspeicherst, damit du in O(1) Elemente hinzufuegen kannst, falls dir der konkrete Index dabei egal ist. Allerdings frisst diese Methode relativ viel Speicher (du hast ein Array aller maximal moeglichen Eintraege und noch eine Liste mit vakanten Eintraegen), den du allerdings ggf durch Anwenden getimeter Blockinkement/-dekrement Alloziierungen/Freigaben etwas reduzieren kannst.
Der ganze Aufwand lohnt allerdings wohl nur dann, wenn der Zugriff auf deine "Liste" wirklich DER Zeitkritische Faktor ist und du wirklich ALLE obigen Operationen in moeglichst O(1) haben musst. Wahrscheinlicher ist es wohl, dass dein Algorithmus suboptimal ist. Was nuetzt dir ein Zugriff in O(1) statt O(n) auf deine Liste, wenn du (z.B. zum Sortieren) einen Algorithmus verwendest, der mit O(n^2) (z.B. Bubblesort) statt O(n log(n)) (Quicksort) bei sehr grossem n arbeitet ... richtig: gar nichts.
Geändert von Ineluki (01.02.2012 um 21:27 Uhr)