插队买票问题
为什么要用到散列表啊。题目是这样的
本实验假设售票大厅有多个售票窗口,无论到哪个窗口买票都必须排队,但是新来的人不一定排在队尾,允许插队(即直接排在朋友的后面)。
假设已经在排队的人不会离开,也不会移到其他队伍去。买到票的人依次出队。每个人仅买一次票,买完票就离开。每个人都有名字。
每个来买票的人先进行观察判断:
1.如果所有的队伍中都没有发现朋友,则选择最短的队伍排在其队尾;
2.如果所有的队伍中仅发现一个朋友,则可以(不是必须)插在此朋友的后面;但是,插队前应考查是否合算,插入此位置离售票窗口的距离(即队伍前面的人数)必须小于其他队伍的长度,否则应选择最短的队伍排在其队尾;
3.如果所有的队伍中发现多个朋友,这种情况就比较复杂:
(1)如果多个朋友是集中在一个队伍里,则可以插在最后那个朋友的后面;
(2)如果多个朋友是分散在多个队伍里,则插队的原则是离售票窗口最近;
4.如果朋友排在队伍的第一位(即队首),则不允许插队;
本实验训练的内容包括六个方面:
1.面向对象程序设计方法,类模板的应用;
2.散列表(Hash Table)的应用,队列(或链表)的应用;
3.应用求余法构造合理的散列函数;
4.应用平方探测法解决Hash映射的冲突现象;
5.文件的读写操作;
6.程序测试计划、用例的设计和测试方法。
我自己想用一个链表来就好了,可是实验要求用到散列表,这个是为了什么。
下载里有一份代码,
[解决办法]
Hash table的特点就是查找时间复杂度为O(1).
所以,为了更高的查找效率,可以使用 Hash table