在此问题中,静态链表定义如下:(c ++代码)
template<typename T> struct Node{
T elem;
int next;//yes, int, which points to the index of the next element in the array.
};
Node static_linked_list [SOME_SIZE];
//some initialization code omitted.
因此在这种链表中,它是静态的,因为它的大小是在数组初始化期间分配的。该链接是通过字段int next
实现的,该字段指向下一个元素的索引。
与基于指针(或引用)的链表相比,此数据结构的优点是什么?它的用途是什么?据我所知,静态范围的生存期是有限的,可以在实现malloc
时使用。但是它的int next
似乎没有比指针少的内存开销。
答案 0 :(得分:1)
我不确定该特定结构的用途,但是这种不寻常的技术确实提供了在使用加盖并固定且预先分配的内存块时表现得像链表一样的功能。除了根据需要更新元素中的索引之外,不需要进行任何管理。 (请注意,当然,索引字段并没有必须“指向” next 数字索引,它可以指向任何索引,因此“列表”没有需要按语义顺序存储。)
“删除”项目要比简单数组(这需要移动后面的元素)要快。添加项目比较麻烦,并且显然受到整个元素数组大小的限制,但是可以通过一些后备簿记来加快速度。我不确定在什么确切情况下您会决定需要在另一类列表上使用此特定数据结构。我的猜测是,在可预测性为王的情况下,您将处于非常谨慎的内存约束下:请考虑游戏机,嵌入式设备,驱动程序/操作系统层等。