【问题标题】:How Would I Go About Creating This Doubly Linked List?我将如何创建这个双向链表?
【发布时间】:2014-04-14 05:31:30
【问题描述】:

我目前正在学习数据结构和链表。我正在尝试创建一个双向链表,但我不确定如何去做。 “节点”的数据我想成为我已经创建的类。我可以在网上找到有关链表的所有信息,它们只使用整数值,我不确定如何最好地合并其他类。

我想我会做的是……

我有一个抽象类“帐户”。然后类'Savings'和'Checking'派生自Account。我想让“节点”的数据成为帐户类型,可能是基类指针,这样“储蓄”和“检查”都可以使用。

我不确定的是,假设在我的“节点”类中,我的私有数据成员是指向帐户本身的基类“帐户”指针、nextPointer 和previousPointer。 “List”类将管理链表,并创建新节点。但是,我将如何访问该帐户的成员功能?

我想知道解决这个问题的最佳方法是什么?我应该将 getter 添加到调用 Accounts getter 函数以检索有关帐户的数据的类“节点”中吗?还是只做“节省”和“检查”节点本身,然后添加一个指向私有数据成员的下一个指针和上一个指针会更好吗?

【问题讨论】:

  • 坚持 OOP 概念,List 应该返回一个列表对象并对列表执行操作,而不管它实际上可以引用什么类型的数据。理想情况下,要访问 Account,您应该使用 account 对象并调用其公共函数,而不是考虑从列表中访问这些函数,反之亦然。在某些特殊情况下,您可以使用诸如 Friend 类/函数之类的东西,这比添加公共 setter 更好
  • 你能用std::list吗?
  • 那么在 Account 类中,我应该添加一个 next 和 previous 指针,然后 'List' 类管理帐户列表吗?
  • 这只是为了练习。我只想知道如何创建自己的链表并管理它们。
  • 我想我明白你的意思了。那么你如何从列表中访问这些对象呢?

标签: c++ doubly-linked-list


【解决方案1】:

你应该创建一个通用的双重列表

template <class T> class List{
    T value;
    Node& next; //Or Node* whatever you choose
    Node& prev;
    public:
     ...
 };

这样,您的列表将发挥应有的作用 - 作为列表。 现在,如果您需要一个帐户列表,只需声明一个

List<Account> allAccounts = new List<Account>(); //assuming there's a default c'tor

如果您需要在 Account 和其余部分之间建立一些关系,您可以使用继承。

使列表通用且不受任何类型限制的事实将使您的代码看起来更优雅、更干净、更有意义。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-27
    • 2016-07-18
    • 1970-01-01
    • 2011-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多