【发布时间】:2021-01-18 22:45:48
【问题描述】:
我在网上看到了各种实现,有些只为其链表创建一个节点结构,而另一些则同时创建一个列表结构和一个节点结构,因此我想知道什么是最佳实践。
list 和 node_struct 实现示例:
typedef struct listnode listnode_t;
struct listnode {
listnode_t *next;
listnode_t *prev;
void *elem;
};
struct list {
listnode_t *head;
listnode_t *tail;
int size;
};
仅节点结构实现示例:
typedef struct node node_t;
struct node {
int data;
node_t *next;
};
node_t *head;
node_t *tail;
【问题讨论】:
-
这不是很明显吗?如果使用第二种方法,则很难在列表 API 中隐藏
head、tail和size之类的内容。 -
好的。有两个结构有什么缺点吗?喜欢更多的内存或开销?
-
@DoeJ 不,使用 2 个结构没有内存开销。同样在这里选择一种语言,c 或 c++ 的答案可能会非常不同,因为它们是完全不同的语言。
-
两个
structs 本身并不多于或少于一个编译时效果——通常不太需要关心。如果您创建struct然后 的实例(变量),它将成为运行时效果(可能)。因此,如果您不需要列表管理,请不要为列表创建变量。但是,您的应用程序中没有列表管理... ;-) -
为了公平比较,您应该展示具有相同功能的示例。您的带有列表结构的示例有一个头指针、一个尾指针和一个大小。这三件事在仅节点实现中是如何实现的? (如果在后一种实现中只实现了一个头指针,那么你已经有了答案。)
标签: c++ c list linked-list