本课程为《银行模拟业务》系列第二部分,重点探讨数据结构在银行业务系统中的应用,包括但不限于队列、树和图等数据结构的实际操作与优化。通过理论结合实践的方式,帮助学生深入理解如何高效设计及实现银行相关系统的内部逻辑。
要求:客户业务分为两种类型。第一种是申请从银行获得一笔资金,即取款或借款;第二种则是向银行投入一笔资金,即存款或还款。银行设有两个服务窗口,并且有两个队列对应这两个窗口。当顾客到达时,他们首先排队进入第一个队列中等待处理。
对于每笔业务的处理过程如下:如果客户办理的是第一种类型的业务(取款/借款),并且申请金额超过当前银行的资金总额,则该客户的请求将无法得到满足,此时客户会被立即排入第二个队列等候;直到其需求能够被满足时才离开银行。反之,若为第二种类型业务且资金足够,则处理完成后顾客直接离店。
每当接待完一个存款或还款的客户后(即办理了第二种类型的业务),系统会依次检查第二队列中的等待者是否可以得到服务。对于那些当前情况下无法获得所需金额的人,他们会被重新排回到第二个队列的末尾继续等候;如果在此过程中银行资金总额已经减少至不足以满足任何新的请求,则停止对第二队列的进一步处理并返回到第一队列中继续接待客户。
注意,在此检查期间一旦发现剩余总金额少于或等于刚完成服务的那个客户的存款数额,或者在遍历完第二个等待队列后仍未找到符合条件者时即刻终止该轮次,并恢复至第一个待办业务序列的后续处理。此外还需确保任何时候仅开放一个窗口进行操作。
为简化问题设定:营业开始前银行资金总额固定为10,000元,一天工作时间为600分钟(或10小时)。顾客到达间隔及交易时长均随机产生;具体数值范围需从用户端输入确定。同时,每笔业务的金额需求也将以正负值形式随机指定。
两个队列和事件列表则需要使用动态内存分配方式来实现,并且应当考虑到合理的数据结构设计能够提高效率(例如对于第二等待序列而言)。此外,请注意维护好有序的时间表以便正确地安排各个时间节点上的任务执行顺序。