如果我理解正确,这是一个设计问题,并且与C++中的链接列表无关。
对于执行的其余部分,我认为以下几点:
- 有
N
视频。
- 目前
K
出租,其中0 <= K <= N
。
- 还有
M
的客户。有N
和M
没有关系,但它是安全的假设,可能会有更多的客户比视频及大部分的时间,大部分的影片不租(M
比N
大得多,这是更大的比K
)。
- 你开始,所以你不知道班,
std::string
或std::list
。
您有以下结构/类。
结构客户{ INT ACCOUNT_NUMBER; char * name; // ...其他客户信息... };
结构视频{ 的char *称号; // ...其他视频信息... };
解决方案1:每个客户出租
列表添加一个你Customer
类 “租金列表”。这对于列出客户的租赁非常方便,但是当您需要验证某个视频尚未租用时,则会出现问题。第一个是恒定时间,但第二个线性为M+K
(循环遍及所有客户,然后是每个客户的租金)。
#define MAX_RENTALS 5
struct Customer {
// regular fields, see above.
// ...
Video rentals[MAX_RENTALS];
int rental_count;
};
解决方案2:每个视频指针客户
在Video
类添加一个 “点,以客户”。检查视频是否已经被租用是恒定时间(检查video->customer
设置为某个非默认值 - C中的NULL
,Java中的null
,Python中的None
等),但列出特定客户租用的电影是线性在N
。
struct Video {
// regular fields, see above.
// ...
Customer * rented_to;
};
解决方案3:出租
列表添加一个第三清单分别跟踪租金。定义一个Rental
类,该类具有指向Customer
的指针和指向Video
的指针。然后,定义一个租赁列表。在K
中列出客户的所有租金并检查视频是否已租用都是线性的。
#define MAX_RENTALS 100
struct Rental {
Video * video;
Customer * customer;
};
Rental rentals[MAX_RENTALS];
int rental_count = 0;
该解决方案为您提供了最好的算法的复杂性和恰好也是更紧密地你会在跟踪一个音像店的顾客,视频和租金真实的商业应用的SQL数据库做什么模仿。
因为这是一个C++项目,也许你不必从头开始实现链表。您可以使用[STL列表](http://www.cplusplus.com/reference/stl/list/)。 – bits 2011-02-28 00:22:13
但是,只有你知道,如果你的课程实际上可能意味着你要教授实现链接列表,如果它的话然后忽略我以前的评论 – bits 2011-02-28 00:23:05