




已阅读5页,还剩2页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
班级:0361001学号:2010211686指导老师:刘友军姓名:周承强我的博客:酷文博,好玩的资料,互相交流 数 据 结 构 上 机 实 习 报 告一 实习题目:银行离散事件模拟二 需求分析:为了计算所有客户在银行的平均逗留时间,需要掌握每个客户到达银行和离开银行的时间,后者减去前者即为每个客户在银行的逗留时间。用当天的客户数去除以所有客户的逗留时间之和便是所求的平均逗留时间。三概要设计:数据结构,使用到带头结点链表EvevtList,结点是LNode,提供的操作有:InitList,DelFirst,GetCurElem,GetHead,OrderInsert,此链表用于存放客户的进入或者离开的事件,存放数据包括进入的时间,处理的时间,离开的时间使用一个队列Queue,节点是QNode,队列的数据元素类型为QElemType,提供的主要操作有:InitQueue,QueueEmpty,QueueLength,GetHead,EnQueue,DeQueue,此队列用于模拟进入银行后等待办理业务的客户排队情况。其存储的数据有时间到达的时间和处理事物所需的时间。层次调用关系,包括三个文件:Main.cpp,Queue.h和LinkList.h,后两个用于数据结构的定义,主要的程序在Main.cpp中,从main()进入调用Bank_Simulation(),Bank_Simulation()调用到OpenForDay(),CustomerArrived()和CustomerDeparture(),CustomerArrived()调用Random()和Minimum();1. 事件链表的设计typedef struct int OccurTime; int NType; Event,ElemType; typedef struct LNode / 结点类型 ElemType data; LNode *next; *Link,*Position; struct LinkList / 链表类型 Link head,tail; / 分别指向线性链表中的头结点和最后一个结点 int len; / 指示线性链表中数据元素的个数 ;typedef LinkList EventList;2. 队列的设计typedef struct int ArrivalTime; / 到达时刻 int Duration; / 办理事务所需时间 QElemType; / 定义队列的数据元素类型QElemType为结构体类型 typedef struct QNode QElemType data; QNode *next; *QueuePtr; struct LinkQueue QueuePtr front,rear; / 队头、队尾指针 ;3. 主要过程void Bank_Simulation() / 银行业务模拟函数 开门营业; while(有客户进入或者等待办理) / 事件表ev不空 判断应该进行何种操作 若是客户到达 CustomerArrived(); / 处理客户到达事件 若是客户处理结束离开银行 CustomerDeparture(); / 处理客户离开事件 计算平均使用时间输出相关数据 四详细设计:北京信息科技大学 计算机学院 0615233 刘大伟LinkList.h#define Qu 2#define jg 5#define doing 30 #include #include #include #include #include #include #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 typedef int Status; typedef int Boolean; typedef struct int OccurTime; int NType; Event,ElemType; typedef struct LNode ElemType data; LNode *next; *Link,*Position; struct LinkList Link head,tail; int len; ; typedef LinkList EventList; EventList ev; Event en,et; void InitList(LinkList &L) Link p; p=(Link)malloc(sizeof(LNode); if(p) p-next=NULL; L.head=L.tail=p; L.len=0; else exit(ERROR); Status DelFirst(LinkList &L,Link h,Link &q) q=h-next; if(q) h-next=q-next; if(!h-next) L.tail=h; L.len-; return OK; else return FALSE; ElemType GetCurElem(Link p) return p-data; Status ListEmpty(LinkList L) if(L.len) return FALSE; else return TRUE; Position GetHead(LinkList L) return L.head; void OrderInsert(LinkList &L,ElemType e,int (*comp)(ElemType,ElemType) Link o,p,q; q=L.head; p=q-next; while(p!=NULL&comp(p-data,e)next; o=(Link)malloc(sizeof(LNode); o-data=e; q-next=o; o-next=p; L.len+; if(!p) L.tail=o; Queue.htypedef struct int ArrivalTime; int Duration; QElemType; typedef struct QNode QElemType data; QNode *next; *QueuePtr; struct LinkQueue QueuePtr front,rear; ; void InitQueue(LinkQueue &Q) if(!(Q.front=Q.rear=(QueuePtr)malloc(sizeof(QNode) exit(OVERFLOW); Q.front-next=NULL; void DestroyQueue(LinkQueue &Q) while(Q.front) Q.rear=Q.front-next; free(Q.front); Q.front=Q.rear; Status QueueEmpty(LinkQueue Q) if(Q.front-next=NULL) return TRUE; else return FALSE; int QueueLength(LinkQueue Q) int i=0; QueuePtr p; p=Q.front; while(Q.rear!=p) i+; p=p-next; return i; Status GetHead(LinkQueue Q,QElemType &e) QueuePtr p; if(Q.front=Q.rear) return ERROR; p=Q.front-next; e=p-data; return OK; void EnQueue(LinkQueue &Q,QElemType e) QueuePtr p; if(!(p=(QueuePtr)malloc(sizeof(QNode) exit(OVERFLOW); p-data=e; p-next=NULL; Q.rear-next=p; Q.rear=p; Status DeQueue(LinkQueue &Q,QElemType &e) QueuePtr p; if(Q.front=Q.rear) return ERROR; p=Q.front-next; e=p-data; Q.front-next=p-next; if(Q.rear=p) Q.rear=Q.front; free(p); return OK; Main.cpp#includeLinkList.h#includeQueue.h long int ZongShiJian=0; int CloseTime,YongHuShu=0; LinkQueue qQu;QElemType customer; int cmp(Event a,Event b) if(a.OccurTime=b.OccurTime) return 0; else return (a.OccurTime-b.OccurTime)/abs(a.OccurTime-b.OccurTime); void OpenForDay() int i; InitList(ev); en.OccurTime=0; en.NType=Qu; OrderInsert(ev,en,cmp); for(i=0;iQu;+i) InitQueue(qi); void Random(int &d,int &i) d=rand()%doing+1; i=rand()%(jg+1); int Minimum(LinkQueue Q) int lQu; int i,k=0; for(i=0;iQu;i+) li=QueueLength(Qi); for(i=1;iQu;i+) if(lil0) l0=li; k=i; return k; void CustomerArrived() QElemType f; int durtime,intertime,i; +YongHuShu; Random(durtime,intertime); et.OccurTime=en.OccurTime+intertime; et.NType=Qu; i=Minimum(q); if(et.OccurTimeCloseTime) OrderInsert(ev,et,cmp); f.ArrivalTime=en.OccurTime; f.Duration=durtime; EnQueue(qi,f); if(QueueLength(qi)=1) et.OccurTime=en.OccurTime+durtime; et.NType=i; OrderInsert(ev,et,cmp); void CustomerDeparture() int i; i=en.NType; DeQueue(qi,customer); ZongShiJian+=en.OccurTime-customer.ArrivalTime; if(!QueueEmpty(qi) GetHead(qi,customer); et.OccurTime=en.OccurTime+customer.Duration; et.NType=i; OrderInsert(ev,et,cmp); void Bank_Simulation() Link p; OpenForDay(); while(!ListEmpty(ev) DelFirst(ev,ev.head,p); en.OccurTime=GetCurElem(p).OccurTime; en.NType=GetCurElem(p).NType; if(en.NType=Qu) CustomerArrived(); else CustomerDeparture(); printf(【该窗口数为】: %d 【两相邻到达客户的时间间隔】: 0%d分钟 【每个客户业务办理时间】: 1%d分钟n,Qu,jg,doing); printf(【客户总数】:%dn,YongHuShu); printf(【所有客户共耗时】:%ld分钟n,ZongShiJian); printf(【平均每人耗时】:%d分钟n,ZongShiJian/YongHuShu); void main() printf( _ 请您输入银行营业【时间长度】(单位:分钟),确认请按Enter:
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年互联网金融服务平台与监管政策的协同发展报告
- 高一生物人教版必修1公开课 第三章第1节 细胞膜-系统的边界教学设计、导学案及教后反思
- 2025年电视台运营行业前景分析及投资机遇研究报告
- 2025年纺织服装检测行业前景分析及投资机遇研究报告
- (2025年标准)花园纠纷协议书
- (2025年标准)护理实习就业协议书
- (2025年标准)户口档案协议书
- 2025年专网通信行业前景分析及投资机遇研究报告
- 2025年农资连锁行业需求分析及创新策略研究报告
- 2025年无线卫星设备行业投资趋势与盈利模式研究报告
- (2025年标准)动火安全协议书
- 2026届广州市高三年级阶段训练(8月市调研摸底) 数学试卷(含答案解析)
- 动物防疫检疫试题(附答案)
- 沙石码头经营方案(3篇)
- 2025年粉笔辅警考试题库
- 2025个人房屋租赁合同范本下载
- 水声传感器技术研究与应用
- 能源环保管理办法
- 锂电行业仓储管理办法
- caac理论考试题库及答案
- 《校园安全指导》职业院校安全教育全套教学课件
评论
0/150
提交评论