【发布时间】:2011-10-02 14:58:14
【问题描述】:
目前,我已经实现了一个单链表,如下所示:
struct PeerNode {
struct Peer* cargo;
struct PeerNode* next;
};
...我有一个包含几个这样的链表的结构,如下所示:
struct Torrent {
...
struct PeerNode* peer_list;
struct PeerNode* unchoked_peers;
...
}
我想使用sys/queue.h 提供的宏来替换它。我收集到我可以用这样的东西替换我的代码:
struct Torrent {
...
LIST_ENTRY(PeerNode, Peer) peer_list;
struct PeerNode* unchoked_peers;
...
}
然后,通过查看man queue,我相信我会通过执行以下操作来初始化列表:
LIST_INIT(&peer_list);
LIST_INIT(unchoked_peers);
但是,我不明白LIST_ENTRY 如何影响列表的使用。在man 页面上,它说:“宏LIST_ENTRY 声明了一个连接列表中元素的结构”,但我真的不明白这是什么意思。
为什么要声明一个结构来连接列表中的元素?每个节点不应该像我最初的链表实现那样通过指针连接到下一个节点吗?如何用sys/queue.h 提供的实现替换我的链接列表?如何在列表中插入元素?
【问题讨论】: