【发布时间】:2016-11-19 18:17:09
【问题描述】:
我正在阅读有关展开链表的信息,并找到了两种不同的制作方法。我拥有的这本书实现了这样的一个:
// Node
typedef struct node {
int data;
struct node *next;
} Node;
// Block of nodes
typedef struct linkedblock {
struct linkedblock *next;
Node *head;
int nodeCount;
} LinkedBlock;
然而 Wikipedia 显示 LinkedBlock 没有指向 Node 的指针,而是有一个数组。我认为这可能是因为内存是连续的并且与缓存效率有关?这样做还有其他好处吗?我的书实现它的方式是否优化/更差?是否有一种常见或首选的方式?
我正在尝试实现一个展开的链表,这样我就可以了解它们的工作原理,但也以防我将来需要使用它(奇怪的是,我在 GitHub 或其他地方找不到任何 C 实现)。基本上我想知道这两种方式中哪一种更有可能在实际应用中使用。这也是我不应该浪费太多时间学习的数据结构吗?因为在我的其他算法书籍 (CLRS) 中,我什至没有看到它提到过。
【问题讨论】:
-
似乎是其中一个在理论上看起来不错的想法,但在实践中却是一个痛苦的......您找不到任何实现这一事实很好地表明展开列表没有实际价值。
-
“展开链表”是指“侵入式链表”吗?因为如果是这样,这样的列表肯定确实具有实用价值。
-
我没听说过“插入式链表”,我的书叫它“展开链表”。不知道这些是否相同。在我的书中,它看起来像是一个大块的链接列表,每个块中都有较小的节点。我想如果它不是我将来最终会使用的东西,我会略过它并继续前进,而不是花一天的剩余时间来尝试实现它。
标签: c data-structures linked-list unroll