c++ - 实现嵌套链表(list of lists)

标签 c++

我的链表是关于一家音像店的。 我应该制作一个包含视频详细信息(我知道这部分)和客户详细信息列表的列表。 现在 CUSTOMER 列表(第二个节点类型)是我的问题所在。

我必须显示客户的姓名,acc no。等等以及该客户 checkin 和 checkout 的视频(删除视频并将其插入客户列表) 所以我的疑问是,我如何以一个人的名义删除和插入 JUST 视频..

EG:客户列表中有许多不同的客户,他们的姓名和帐户号码以及租借的视频都不同。

一位客户 john 租用了 2 或 4 个不同的视频,也租用了一些视频。

现在我如何显示只有 John 租用了这些视频(也就是说我只以他的名字而不是任何其他客户的名义插入视频)

我希望现在人们明白了我...我想知道如何做到这一点?

最佳答案

如果我没有理解错的话,这是一个设计问题,与C++中的链表无关。

对于实现的其余部分,我假设如下:

  1. N视频。
  2. 当前是 K租金,其中0 <= K <= N .
  3. M顾客。 N之间没有关系和 M , 但可以安全地假设客户可能比视频多得多,并且大多数时候,大多数视频都没有租用( MN 大得多,后者比 K 大得多) ).
  4. 你刚开始,所以你不了解类(class),std::stringstd::list .
  5. 您有以下结构/类。

    结构客户{ int 帐号; 字符 * 名称; //... 其他客户信息 ... };

    结构视频{ 字符 * 标题; //... 其他视频信息 ... };

解决方案 1:每个客户的租赁 list

为您的 Customer 添加一个“出租列表”类(class)。这对于按客户列出租借情况很方便,但是当您需要验证视频是否尚未租借时就会出现问题。第一个是恒定时间,但第二个是线性的 M+K (遍历所有客户,然后是每个客户的租金)。

#define MAX_RENTALS 5
struct Customer {
    // regular fields, see above.
    // ...
    Video rentals[MAX_RENTALS];
    int rental_count;
};

解决方案 2:每个视频指向客户

在您的 Video 中添加“指向客户”类(class)。检查视频是否尚未租用是常数时间(检查 video->customer 是否设置为某个非默认值 - C 中的 NULL,Java 中的 null,Python 中的 None,等等),但是列出特定客户租借的电影在 N 中是线性的.

struct Video {
    // regular fields, see above.
    // ...
    Customer * rented_to;
};

方案三:出租 list

添加第三个列表以单独跟踪租金。定义一个 Rental具有指向 Customer 的指针的类和指向 Video 的指针.然后,定义租金 list 。列出客户的所有租赁和检查视频是否已租用都是线性的 K .

#define MAX_RENTALS 100
struct Rental {
    Video * video;
    Customer * customer;
};
Rental rentals[MAX_RENTALS];
int rental_count = 0;

此解决方案为您提供最佳的算法复杂性,并且恰好更接近地模拟您在真实商业应用程序中使用 SQL 数据库执行的操作,以跟踪视频商店的客户、视频和租赁。

关于c++ - 实现嵌套链表(list of lists),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5136928/

相关文章:

c++ - 为什么必须在哪里放置 “template”和 “typename”关键字?

c++ - 使用 malloc() 和 sizeof() 在堆上创建结构

c++ - 我需要清理 curl_easy_strerror 缓冲区吗?

c++ - 为什么 std::remove_if 认为 shared_ptr<T> 是谓词?

c++ - #为不同的上下文定义 “static”的宏

c++ - 如何访问 RCDATA 资源的元素?

c++ - 如何从常量字符串初始化 LPWSTR?

c++ - C# 从十六进制数据中获取信息

c++ - 为什么分解声明不能是 constexpr?

c++ - 获取事件 udp 连接的目标 IP/端口?