- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构课程设计报告
一 问题描述
题目内容:使用队列模拟银行业务
基本要求:设某银行有N个窗口,可同时为N位顾客办理业务。当顾客进门时,若有窗口空闲,则可立刻办理业务,否则需要依次排队等候。一旦有顾客业务办理完毕,派在队头的顾客便可开始办理业务。若银行每天连续营业T小时,求一天内顾客在银行内的平均逗留时间,顾客排队等候办理业务的队列长度平均值,营业时间到点后仍需完成服务的收尾工作时间。
测试数据:服务窗口数目N及营业时间有拥护设定,第一个顾客进门的时刻为0,之后每个顾客的进门时刻在前一个顾客进门时设定。即在进门事件发生时随即产生两个随机数(durtime,intertime),durtime为进门顾客办理业务所需的服务时间(简称办理时间);intertime为下一个顾客将到达的时间间隔(简称时间间隔)。R为由随机数发生器产生的随机数,顾客办理时间和顾客之间的时间间隔不妨假设与R有关,可以由下式确定:
durtime=15+R%50
intertime=2+R%10
确定的方法与实际越吻合,模拟的结果越接近现实的情况。
二 需求分析
程序模拟银行排队现象。当给定窗口数及营业时间后,由随机数确定顾客办理业务及进门间隔时间,可求出一天内顾客在银行平均逗留时间,平均对长及关门后收尾工作的时间。
本程序由用户读入的数据仅为窗口数及营业时间,营业的时间以分钟计,窗口数及关门时间均为整型,且均大于等于1。
运行本程序后,得到结果为顾客数、平均等候时间、平均队长和收尾工作的时间。仿真程序运行后屏幕输出结果应包括如下各项的模拟结果数据:
Number of customer: CustomerNum
Average time: Totaltime/CustomerNum
Average queuelength: Totallength/CustomerNum
Addition time: t-CloseTime
三 概要设计
本题设计两个抽象数据类型
队列抽象数据类型定义的作用是登录排队等候办理业务的顾客情况,队列中的每个元素包括顾客进门的时刻和办理业务所需时间(表示不同顾客的不同业务需要)。队列类型的定义为:
ADT LinkQueue{
数据对象:
D={ai|ai?ElemSet,i=1,2,…,n,n=0}
其中ElemSet的元素为一时间二元组(ArrivalTime,Duration),包括顾客到达时间和预期所需的办理业务持续时间。
数据关系:
R1={ai-1,ai|ai-1,ai?D,i=2,…,n}
约定其中ai端为队列头,an端为队列尾
数据操作:
InitQueue(Q)
}ADT LinkQueue
链表抽象数据类型定义的作用是登录顾客进门或出门的事件。表中每一项包括事件类型(进门或出门)和事件发生的时刻。为了便于按事件发生的先后次序顺序进行处理,事件表元素应按“时刻”有序。事件链表的抽象数据类型与有序链表基本相同,差别是结点的数据类型。定义为:
ADT LinkList{
数据对象:
D={ai|ai?ElemType,i=1,2,…,n,n=0}
其中ElemType的元素为一事件二元组(OccurTime,Ntype),包括事件发生的时间和事件类型,依事件发生的时间OccurTime递增有序。
数据关系:
R1={ai-1,ai|ai-1,ai?D,ai-1ai,i=2,……,n}
}ADT LinkList
本程序包括4个模块:
主程序模块;
实现队抽象数据类型的队模块;
实现链表抽象数据类型的链表模块;
事项银行事件抽象数据类型的银行事件模块。
各模块之间的调用关系如图所示。
主程序模块
银行事件模块
队列模块 链表模块
银行业务模拟事件的伪码算法:
Simulation{
设定事件表中的第一个元素;
置空队;
While(事件表不空){
从事件表中删除发生时刻最早的元素;
If(事件类型=0){
//处理顾客进门事件
累计顾客人数;
If(下一顾客到达时刻关门时刻)进门事件插入事件表;
If(有空闲窗口){
新出门事件插入事件表;
累计顾客逗留时间;
}
else{
当前顾
文档评论(0)