Zitat von
tigerman33:
Das ist
IMHO keine so gute Idee.
Wie willst Du dann in eine leere Liste das erste Element einfügen?
Zitat von
tigerman33:
So muss zum Beispiel ein Element des Datentyps existieren, dass garantiert niemals angenommen wird (denn das benutzt du ja als Datum der Wurzel). Wenn du aber beispielsweise eine Liste von ganzen Zahlen verwalten willst, wird dieses Kriterium Probleme bereiten.
Die Prämisse, ein 'Alpha', also ein kleinstes Element zu verwenden, erhöht die Performance "beträchtlich", da eine Abfrage in der zentralen Routine (Suchen) entfällt. Der Code wird einfacher, weil es eben immer einen Anfang gibt. Zur Not kann man aber auch auf
Result^.Element := EinWertDerGarantiertKleinerAlsAlleJemalsEinzufuegendenElementeIst;
verzichten. Dann kommt eben wieder eine kleine Abfrage hinzu (If Walker<>Root Then ...)
Zitat von
tigerman33:
Zum anderen wird es schwieriger, gesicherte Aussagen über die einzelnen Listenelemente zu treffen, da als zusätzlicher Fall immer die Wurzel hinzukommt, die man beachten muss.
Nee, genau anders herum. Ich muss doch nie(!) die Wurzel beachten. Wie funktioniert denn der Code, wenn die leere Liste als 'Nil' deklariert ist?
Zitat von
tigerman33:
Außerdem ist es doch nicht so das Problem, die leere Liste auch als solche zu implementieren (sprich Wurzelknoten = nil <=> Liste leer).
Zeig mal am Beispiel vom Verketten. Und zähle anschließend die Anzahl der Zeilen und die Performance.
Zitat von
tigerman33:
Erst recht, wenn man das ganze in einer anständige Klasse kapselt.
Wie gesagt: Zeig mal.