我正在阅读有关展开链表的信息,并找到了两种不同的制作方法。我拥有的这本书实现了这样的一个:
// 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
没有指向 a 的指针Node
,而是有一个数组。我认为这可能是因为内存是连续的并且与缓存效率有关?这样做还有其他好处吗?我的书实现它的方式是否优化/更差?是否有一种常见或首选的方式?
我正在尝试实现一个展开的链表,这样我就可以了解它们是如何工作的,而且如果我将来需要使用它(奇怪的是,我在 GitHub 或其他地方找不到任何 C 实现)。基本上我想知道这两种方式中哪一种更有可能在实际应用中使用。这也是我不应该浪费太多时间学习的数据结构吗?因为在我的其他算法书(CLRS)中我什至没有看到它提到过。