我的链表是关于一家音像店的。 我应该制作一个包含视频详细信息(我知道这部分)和客户详细信息列表的列表。 现在 CUSTOMER 列表(第二个节点类型)是我的问题所在。
我必须显示客户的姓名,acc no。等等以及该客户 checkin 和 checkout 的视频(删除视频并将其插入客户列表) 所以我的疑问是,我如何以一个人的名义删除和插入 JUST 视频..
EG:客户列表中有许多不同的客户,他们的姓名和帐户号码以及租借的视频都不同。
一位客户 john 租用了 2 或 4 个不同的视频,也租用了一些视频。
现在我如何显示只有 John 租用了这些视频(也就是说我只以他的名字而不是任何其他客户的名义插入视频)
我希望现在人们明白了我...我想知道如何做到这一点?
最佳答案
如果我没有理解错的话,这是一个设计问题,与C++中的链表无关。
对于实现的其余部分,我假设如下:
- 有
N
视频。 - 当前是
K
租金,其中0 <= K <= N
. - 有
M
顾客。N
之间没有关系和M
, 但可以安全地假设客户可能比视频多得多,并且大多数时候,大多数视频都没有租用(M
比N
大得多,后者比K
大得多) ). - 你刚开始,所以你不了解类(class),
std::string
或std::list
. 您有以下结构/类。
结构客户{ 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/