Ich lese über abgerollte verknüpfte Listen und habe zwei verschiedene Möglichkeiten gefunden, um eine zu erstellen. Das Buch, das ich habe implementiert eine so:Abgerollte Linked-List-Arrays vs. Knoten
// Node
typedef struct node {
int data;
struct node *next;
} Node;
// Block of nodes
typedef struct linkedblock {
struct linkedblock *next;
Node *head;
int nodeCount;
} LinkedBlock;
jedoch Wikipedia zeigt, dass anstelle von LinkedBlock
zu einem Node
mit einem Zeiger, hat es ein Array. Ich denke, das könnte so sein, dass der Speicher zusammenhängend ist und etwas über Cache-Effizienz? Gibt es andere Vorteile, es auf diese Weise zu tun? Ist die Art, wie mein Buch es implementiert, weniger optimiert/schlechter? Gibt es einen gemeinsamen oder bevorzugten Weg?
Ich versuche, eine aufgerollte verkettete Liste zu implementieren, damit ich lernen kann, wie sie funktionieren, aber auch für den Fall, dass ich eine in der Zukunft verwenden muss (ich finde seltsamerweise keine C-Implementierungen auf GitHub oder anderswo). Grundsätzlich würde ich gerne wissen, welche der beiden Möglichkeiten in realen Anwendungen wahrscheinlicher ist. Ist das auch eine Datenstruktur, die ich nicht zu viel Zeit mit dem Lernen verschwenden sollte? Denn in meinem anderen Algorithmenbuch (CLRS) sehe ich es nicht einmal erwähnt.
Scheint wie eine dieser Ideen, die in der Theorie gut aussieht, aber ein Schmerz-in-the -... in der Praxis ist. Die Tatsache, dass Sie keine Implementierungen finden konnten, ist ein guter Hinweis darauf, dass entrollte Listen keinen praktischen Wert haben. – user3386109
Mit "abgerollte verknüpfte Listen" meinen Sie "intrusive verknüpfte Listen"? Denn wenn solche Listen wirklich * DO * haben praktischen Wert. –
Ich habe nicht von "intrusive verknüpfte Liste" gehört, mein Buch nennt es "entrollte verknüpfte Liste". keine Ahnung, ob diese gleich sind. In meinem Buch sieht es aus wie eine verkettete Liste von großen Blöcken mit kleineren Knoten in jedem. Ich nehme an, wenn es nicht etwas ist, das ich in der Zukunft verwenden würde, werde ich es einfach überfliegen und dann weitermachen, anstatt den Rest des Tages damit zu verbringen es zu implementieren. – Austin