仅使用“*head”更常用还是在 C 中使用“*tail”和“size”更具体?
Is using only `*head` more used or would it be more specific using `*tail` and `size` in C?
在学习数据结构的过程中,我想到了 Linked List 部分,特别是头节点和尾节点部分。
根据我的阅读和教学,许多 C 用户倾向于只使用 Node *head;
。
但是有一部分推荐使用下面的代码:
typedef structure _node node;
struct _node{
int data;
Node *next;
}
typedef structure list {
Node *head;
Node *tail;
int size;
} List;
作为一个刚开始学习C和数据结构的人,我觉得这样写比较好理解,但是因为老师告诉我们一般人不会这样写而是直接用Node *head
,我很好奇知道其他人在现实中实际使用了什么。
开发者和C用户真的只用一行,还是像上面写的代码那样用?
数据结构取决于您是否要针对特定用例进行优化。例如,如果你有一个链表,其中的元素大部分应该插入到第一个元素之前,那么维护一个 tail
可能是多余的。然而,如果元素应该大部分插入到末尾,那么每当插入元素时,维护一个指向尾部的指针而不是 运行 遍历整个列表是有意义的。如果您想将列表用于先进先出 (FIFO) 用例,那么直接使用头部和尾部也是有益的。
同样,是否(冗余地)存储列表的大小可能取决于您想要访问该值的频率。由于可以计算,因此您可以根据需要推导出大小。如果您经常访问它,或者如果您有很长的列表,那么单独存储值是有意义的。
这要看情况,可能还需要考虑其他因素。
在学习数据结构的过程中,我想到了 Linked List 部分,特别是头节点和尾节点部分。
根据我的阅读和教学,许多 C 用户倾向于只使用 Node *head;
。
但是有一部分推荐使用下面的代码:
typedef structure _node node;
struct _node{
int data;
Node *next;
}
typedef structure list {
Node *head;
Node *tail;
int size;
} List;
作为一个刚开始学习C和数据结构的人,我觉得这样写比较好理解,但是因为老师告诉我们一般人不会这样写而是直接用Node *head
,我很好奇知道其他人在现实中实际使用了什么。
开发者和C用户真的只用一行,还是像上面写的代码那样用?
数据结构取决于您是否要针对特定用例进行优化。例如,如果你有一个链表,其中的元素大部分应该插入到第一个元素之前,那么维护一个 tail
可能是多余的。然而,如果元素应该大部分插入到末尾,那么每当插入元素时,维护一个指向尾部的指针而不是 运行 遍历整个列表是有意义的。如果您想将列表用于先进先出 (FIFO) 用例,那么直接使用头部和尾部也是有益的。
同样,是否(冗余地)存储列表的大小可能取决于您想要访问该值的频率。由于可以计算,因此您可以根据需要推导出大小。如果您经常访问它,或者如果您有很长的列表,那么单独存储值是有意义的。
这要看情况,可能还需要考虑其他因素。