【发布时间】:2011-10-30 04:11:18
【问题描述】:
我在 C 中使用单链表,没有指向节点值的指针。所以,而不是:
struct _node
{
struct _node * next;
void* value;
} node;
我有
struct _node
{
struct _node * next;
} node;
这样的列表有特殊名称吗?
编辑:
只是为了解释为什么这些列表很有用(我真的不明白为什么反对票):
struct
{
node node;
int i;
} s;
当我这样做时,我强制 struct s 有一个节点,但不必设置 void* 值。
我正在使用这个方案来保存我的任务信息,这些信息将在 FIFO 列表中。
【问题讨论】:
-
是的,这将是一个“毫无意义的列表”,如前所述。是的,我有一个连接的列表......什么都没有。多么有用...
-
它们的主要优点是在任何位置插入任何内容的复杂度都是 O(1)。另一方面,零长度数组仍然更好,因为它们需要零时间来插入任何内容。
-
您的意思是 _node 实际保存其他数据的位置,而不是指向该数据的指针?
-
@Matteo:不正确,如果您必须搜索节点,则不是 O(1)。如果您不必搜索,那么对于普通链表来说也是 O(1)。顺便说一句,节点实际上是有身份的,所以例如对于任何节点,都有一个隐含的属性:有多少个节点直到尾部。
-
这样的数据结构的要点是,实际数据存储在距节点结构的固定偏移处(例如,作为
malloc获得的同一块的一部分),而不是指向由节点。 Linux 在内核空间中到处都使用这个原则,甚至有很好的宏来处理这些列表。
标签: c list pointers nomenclature