如何用链队列模拟银行业务

假设银行柜台有多个窗口,为每个来到的顾客发一个号码,如果哪个窗口空闲了,就叫号码最靠前的顾客来办理业务;

如果同时几个窗口空闲,就按照一种法则来决定这几个窗口叫号的顺序。

使用队列能保证顾客按照先来后到的顺序接受服务——因为大家排在一个队里。

具体如下:

柜台服务以单位时间为间隔,直至下班。每一时刻都有一定的概率抵达一位顾客;

该顾客所办业务服务的时长随机确定,然后分配某一窗口为其服务;

(按“最短优先”的原则:在所有窗口中挑选出等待服务的顾客人数最少的窗口)

每经单位时间,各窗口最靠前的顾客(如果有的话)的待服务时长均相应减少一个单位时间;

若时长归零,则该顾客的业务已办理完毕,顾客退出窗口并由后一位顾客(如果有的话)接替。

提供了部分可供使用的接口:(直接使用,不需要导入)

LinkedQueue类的对象 q = LinkedQueue()

可用的方法:

– 1.q.enqueue(customer), 入队列

– 2.q.dequeue(), 出队列

– 3.q.is_empty(), 判断是否为空

– 4.q.size(), 获取队列当前元素个数

– 5.q.get_head(), 获得即将出队列的结点

– 6.randint(left, right), 获得区间[left, right]内的一个随机值