银行排队问题各个时刻的队长_第1页
银行排队问题各个时刻的队长_第2页
银行排队问题各个时刻的队长_第3页
银行排队问题各个时刻的队长_第4页
银行排队问题各个时刻的队长_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、银行排队问题各个时刻的队长还是银行排队问题,基本代码我已经整理差不多了,各个函数如下,就差求一下各个时刻的队长了,谁能帮忙啊?(以五分钟为一时间单位,即求零时刻的队长,五分钟时的队长,十分钟时的队长,依次类推)void OpenForDay() /* 初始化操作 */int i;InitList(&ev); /* 初始化事件链表为空 */en.OccurTime=0; /* 设定第一个客户到达事件 */en.NType=Qu; /* 到达 */OrderInsert(&ev,en,cmp); /* 插入事件表 */for(i=0;i <Qu; i) /* 置空队列 */I

2、nitQueue(&qi);void CustomerArrived() /* 处理客户到达事件,en.NType=Qu */QElemType f;int durtime,intertime,i;CustomerNum;Random(&durtime); /* 生成随机数 */intertime=expntl(LAMBUDA);et.OccurTime=en.OccurTime intertime; /* 下一客户到达时刻 */et.NType=Qu; /* 队列中只有一个客户到达事件 */if(et.OccurTime <CloseTime) /* 银行尚未关门,插入

3、事件表 */OrderInsert(&ev,et,cmp);i=Minimum(q); /* 求长度最短队列的序号,等长为拥有最小序号的队列 */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); /* 设定第i队列的一个离开事件并插入事件表 */void CustomerDeparture() /* 处理客户离开事件,e

4、n.NTyPe <Qu */int i;i=en.NType;DeQueue(&qi,&customer); /* 删除第i队列的排头客户 */TotalTime =en.OccurTime-customer.ArrivalTime; /* 累计客户逗留时间 */if(!QueueEmpty(qi) /* 设定第i队列的一个离开事件并插入事件表 */GetHead_Q(qi,&customer);et.OccurTime=en.OccurTime customer.Duration;et.NType=i;OrderInsert(&ev,et,cmp);fo

5、r(i=0;i <Qu;i )if(MaxQueue <=QueueLength(qi)MaxQueue=QueueLength(qi);void Bank_Simulation() int t;Link p;OpenForDay(); /* 初始化 */while(!ListEmpty(ev)DelFirst(&ev,GetHead(ev),&p);en.OccurTime=GetCurElem(p).OccurTime;en.NType=GetCurElem(p).NType;for(t=en.OccurTime;t)if(en.NType=Qu)Custome

6、rArrived(); /* 处理客户到达事件 */elseCustomerDeparture(); /* 处理客户离开事件 */ /* 计算并输出平均逗留时间 */printf("顾客总数:%d, 所有顾客共耗时:%d分钟, 平均每人耗时: %d分钟,最大队长为:%dn",CustomerNum,TotalTime,TotalTime/CustomerNum,MaxQueue);void main()Bank_Simulation();网友回复:等着你把代码贴全了呵呵网友回复:这些还不够?剩下的都是些小东西网友回复:主文件除了include就这些了/* 两个窗口的排队模型

7、的数值仿真 */#define Qu 2 /* 客户队列数 */#define LAMBUDA1 5/* 每个客户办理业务的时间最大值 */#define LAMBUDA2 10 /*负指数分布的lambuda*/#define CloseTime 540 /* 银行的营业时间 */typedef struct /* 定义ElemType为结构体类型 */int OccurTime; /* 事件发生时刻 */int NType; /* 事件类型,Qu表示到达事件,0至Qu-1表示Qu个窗口的离开事件 */Event,ElemType; /* 事件类型,有序链表LinkList的数据元素类型 *

8、/typedef LinkList EventList; /* 事件链表类型,定义为有序链表 */typedef structint ArrivalTime; /* 到达时刻 */int Duration; /* 办理事务所需时间 */QElemType; /* 定义QElemType(队列的数据元素类型)为结构体类型; */* 程序中用到的主要变量(全局)。算法3.7 */EventList ev; /* 事件表 */Event en; /* 事件 */Event et; /* 临时变量 */LinkQueue qQu; /* Qu个客户队列 */QElemType customer; /*

9、 客户记录 */int TotalTime=0,CustomerNum=0,MaxQueue=0,time=0; /* 累计客户逗留时间,客户数(初值为0) */; /* 银行营业时间(单位是分) */int cmp(Event a,Event b) /* 依事件a的发生时刻 <、=或>事件b的发生时刻分别返回-1、0或1 */if(a.OccurTime=b.OccurTime)return 0;elsereturn (a.OccurTime-b.OccurTime)/abs(a.OccurTime-b.OccurTime);void OpenForDay() /* 初始化操作

10、*/int i;InitList(&ev); /* 初始化事件链表为空 */en.OccurTime=0; /* 设定第一个客户到达事件 */en.NType=Qu; /* 到达 */OrderInsert(&ev,en,cmp); /* 插入事件表 */for(i=0;i <Qu; i) /* 置空队列 */InitQueue(&qi);expntl(float x)/* 负指数分布 */float z,m;doz = (float) rand() / RAND_MAX);while (z = 0) ¦ ¦ (z = 1);m=-x*log(

11、z);return(m);int Minimum(LinkQueue Q) /* 返回最短队列的序号 */int lQu;int i,k;for(i=0;i <Qu;i )li=QueueLength(Qi);k=0;for(i=1;i <Qu;i )if(li <l0)l0=li;k=i;return k;void CustomerArrived() /* 处理客户到达事件,en.NType=Qu */QElemType f;int durtime,intertime,i;CustomerNum;durtime=expntl(LAMBUDA1); /* 生成随机数 */in

12、tertime=expntl(LAMBUDA2);et.OccurTime=en.OccurTime intertime; /* 下一客户到达时刻 */et.NType=Qu; /* 队列中只有一个客户到达事件 */if(et.OccurTime <CloseTime) /* 银行尚未关门,插入事件表 */OrderInsert(&ev,et,cmp);i=Minimum(q); /* 求长度最短队列的序号,等长为拥有最小序号的队列 */f.ArrivalTime=en.OccurTime;f.Duration=durtime;EnQueue(&qi,f);if(Queu

13、eLength(qi)=1)et.OccurTime=en.OccurTime durtime;et.NType=i;OrderInsert(&ev,et,cmp); /* 设定第i队列的一个离开事件并插入事件表 */void CustomerDeparture() /* 处理客户离开事件,en.NTyPe <Qu */int i;i=en.NType;DeQueue(&qi,&customer); /* 删除第i队列的排头客户 */TotalTime =en.OccurTime-customer.ArrivalTime; /* 累计客户逗留时间 */if(!Qu

14、eueEmpty(qi) /* 设定第i队列的一个离开事件并插入事件表 */GetHead_Q(qi,&customer);et.OccurTime=en.OccurTime customer.Duration;et.NType=i;OrderInsert(&ev,et,cmp);for(i=0;i <Qu;i )if(MaxQueue <=QueueLength(qi)MaxQueue=QueueLength(qi);void Bank_Simulation() int t;Link p;OpenForDay(); /* 初始化 */while(!ListEmpty(ev)DelFirst(&ev,GetHead(ev),&p);en.OccurTime=GetCurElem(p).OccurTime;en.NType=GetCurElem(p).NType;if(en.NType=Qu)CustomerAr

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论