我还有另一个关于链接列表的项目。 我想知道是否可以用两个struct nodetype代码编写来创建两个节点。 如果是这样我应该如何以及在哪里放置它们? 我的代码将包含一个节点类型,列表中包含“视频”。 另一个节点类型在列表中包含“客户”详细信息。
我计划将函数用于我将为程序启用的每个其他操作。我想知道制作两个节点的代码,以及当我专门为它们制作函数时应该如何以及在哪里指定这些节点?(例如为视频节点插入新视频并为客户节点插入视频(显示它们已租用)视频)等等)...
有人可以解释代码的详细信息,以便我能理解吗?
答案 0 :(得分:3)
使用templates。
template <typename T>
struct Node {
T *data;
Node<T> *next;
};
然后,您的列表头部将如下所示:
Node<Videos> *videos;
Node<Customer> *customers;
替代方法是使用不透明指针(void*
)作为列表数据(然后转换为正确的类型),但这不是类型安全的,应该避免使用。
答案 1 :(得分:0)
因为类模板的实例化会产生新类型,所以可以使列表节点成为模板:
template<class Tag>
struct ListNode
{
ListNode *prev, *next;
};
然后从同一模板中多次派生,并使用不同的标签类型对其进行实例化:
struct VideoTag;
struct CustomerTag;
struct Item
: ListNode<VideoTag>
, ListNode<CustomerTag>
{};
答案 2 :(得分:0)
是的,这是可能的。每个节点类型结构都需要一个不同的名称,每个节点类型结构中的下一个指针都是它自己的类型。名称“node”或“nodetype”没有什么神奇之处,你可以使用“videonode”轻松制作一个链表。
此外,您需要更加谨慎地区分“节点”和“列表”。你说“我想知道制作两个节点的代码”,但这没有任何意义。即使一个列表已经有两个或更多节点,它们也会链接在一起。每个列表都由指向第一个节点的指针表示,但列表在概念上不仅仅是一个节点。
你想要的是两个包含不同类型的列表。所需要的只是为每个列表选择节点类型结构和头指针的唯一名称。