首页 > 解决方案 > 链表 (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++clistlinked-list

解决方案


我想知道什么是最佳实践。

用于 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>就是简单地从标准库中使用。


推荐阅读