Oliver S. schrieb:
Mit realloc hat das nichts zu tun
Doch, natürlich kann man das auch damit machen. Hat halt neben dem Nachteil, dass ReAllocs Zeit kosten und den Speicher in großen Blöcken fragmentieren, den Vorteil, dass alle Operationen, die keine Erweiterung des Arrays erfordern, eben auf ein Array angewendet werden können, was fast immer viel effizienter ist als dieselben Operationen auf eine (auch: Double-)LinkedList anzuwenden.
Der Overhead sowohl beim Speicherbedarf (zusätzlich: die Node) als auch beim Rechenzeitaufwand für's Iterieren mit einem Haufen Indirektionen fällt einfach weg.
Und das Problem bei der Erweiterung kann man mit "Exp2-Erweiterung" und vernünftigen Startwerten bezüglich der erforderlichen Kapazität recht gut in den Griff bekommen. Die Libs aller höheren Programmiersprachen machen das genau so.
Oder, je nach konkreter Ausprägung, auch mal als "Chimäre". Das hängt dann primär davon ab, wie groß der Payload ist, aber auch von den anzuwendenden Operationen. Dann gibt es u.U. einen Speicherbereich, der als Array nach den o.g. Prinzipien verwaltet wird und die eigentlichen Nutzdaten beinhaltet, und einen zusätzlichen Speicherbereich, der die Nodes einer LL aufnimmt, aber auch nach den o.g. Prinzipien verwaltet wird. Sowas trifft man vor allem bei Sachen, die einerseits viel Payload haben, abdererseits aber auch schnell nach vielen verschiedenen Kriterien sortiert werden sollen. Sprich: z.B. bei Datenbanken.
Letzlich kochen halt alle mit Wasser. Unbegrenzte Resourcen gibt es nicht. Und deswegen auch keine für alle Anwendungsfälle optimale Lösung.