【问题标题】:How to Implement stack data type inside a structure for a linked list in C++?如何在 C++ 中的链表结构内实现堆栈数据类型?
【发布时间】:2021-09-15 11:19:49
【问题描述】:

我们要制作一个视频商店程序,但我一直卡在“租用视频”和“返回视频”中,因为我必须在处理中使用堆栈。 我的主要想法基本上是每当客户租用时,租用的视频ID都会被推送到客户节点堆栈数据类型中。返回视频也是如此,它将从客户节点堆栈数据类型中弹出()返回的视频 ID。 (我不确定我是否应该使用链表,或者它是否是最好的方法。)

struct customerNode
{
    int customer_ID;
    string name, address;
    stack <string> rentedVid;
    stack <string> tempRent;
    struct customerNode* next;
};
struct customerNode* first = NULL;
struct customerNode* last = NULL;

void insertCustomer(int custID, string custN, string custA)
{
    struct customerNode* temp;
    temp = new customerNode;
    temp->customer_ID = custID;
    temp->name = custN;
    temp->address = custA;
    // stack rentedVid ??
    // stack tempRent ??

    if (first == NULL)
    {
        first = temp;
        last = temp;
    }
    else
    {
        last->next = temp;
        last = temp;
    }
}

(我还有视频ID、标题、副本等的链接列表) 实际上,我对我的程序没有信心。 要求: 当您从文本文件中检索客户时,您必须将客户存储在队列中(我现在使用的是链表,但稍后会更改它)。它们还必须在处理期间存储在队列中。当用户选择退出程序时,将保存回文本文件。 租借的视频将存储在堆栈中,并在用户选择退出程序时保存在 CUSTOMER-RENT 文本文件中。

【问题讨论】:

  • 堆栈应该只对内部操作有用,100% 在应用程序的控制下,例如,撤消/重做列表。不适用于依赖外部功能的操作,例如客户。
  • 我也是这么想的。只是我们的教授要求我们实现这一点。虽然,我们实际上需要为客户非链表使用队列。
  • 也许学习效果应该是,如果您使用最不合适的容器类型,您的程序可能会变得复杂。奇怪的教学方式......

标签: c++ linked-list stack


【解决方案1】:

如果是业务应用程序,堆栈可能不是最佳选择。如果客户想要租用多个视频而不是按顺序归还它们怎么办?

cpp 的vector 是存储所有用户租借视频并搜索/删除它们的更好选择。链表也是一种很好的数据结构,链表的主要好处是它适用于在开头和结尾删除/插入元素,而不是随机访问。

【讨论】:

  • 即使我对客户 ID、姓名和地址使用队列(教授要求),堆栈也不会是租借视频的正确应用程序,对吧?显然,即使我仍然认为堆栈不会真正起作用或使用正确的数据结构。
  • 你是对的,堆栈限制用户以相同的顺序租借和归还视频,这不是租借视频的工作方式。我曾经有过 DS 课程,有时讲师只是为了使用某些 DS,他们要求您实施它,并且没有任何理由。
  • 您的 cmets 不清楚。通常,客户以相同的顺序(或者,他们喜欢的任何顺序......)租用和归还视频。但是堆栈要求他们以相反(LIFO)顺序返回它们。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-06-02
  • 1970-01-01
  • 2020-09-13
  • 2016-08-13
  • 2020-03-11
  • 2012-05-24
  • 2019-03-04
相关资源
最近更新 更多