c++ - 链表 (C/C++)。同时创建列表结构和节点结构的优点/缺点是什么?
问题描述
我在网上看到了各种实现,有些只为他们的链表创建一个节点结构,而另一些则同时创建一个列表结构和一个节点结构,因此我想知道什么是最佳实践。
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;
解决方案
我想知道什么是最佳实践。
用于 c++ 的常用习惯用法是在列表类中创建私有节点结构类型:
class list {
struct listnode {
listnode *next;
listnode *prev;
void *elem;
};
listnode *head;
listnode *tail;
int size;
public:
// Some public operations here.
// listnode instances must be referred by clients using the auto keyword
list::listnode* insert_after(list::listnode* prevnode, void* elem) {
list:listnode newNode = new list:listnode();
newNode->elem = elem;
newNode->prev = prevnode;
newNode->next = prevnode->next;
newNode->next->prev = newNode;
prevnode->next = newNode;
return newNode;
}
};
而C++ 中真正的最佳实践std::list<T>
就是简单地从标准库中使用。
推荐阅读
- google-bigquery - 气流 BigQueryInsertJobOperator 配置
- python - Python中嵌套循环的问题
- azure - 是否可以使用给定公共 IpPrefix 的静态 IP 修改 VMScaleset 实例的公共 IP?
- arrays - 如何在 Swift 中将 [String] 划分为指定数量的相等部分?
- json.net - 使用 AnyOf/OneOf/AllOf 生成 JSON 模式
- security - 如何修复 npm 漏洞?
- python - 如何使用嵌套字典进行长度检查
- azure - 尝试使用专用端点和专用链接运行用于存储帐户配置的 ARM 模板时出错
- flutter - 我想用未来的布尔值保存列表项是否可能?
- azure-active-directory - 使用代表流刷新令牌(使用 Teams 单点登录)