资源简介
VC6.0编译!
利用的算法类似于买票排队,你总会到队列最短的窗口去排队,但往往会有其他队列办事速度快,队列长度很快变得比你所在队列的还短,但你改变自己的队列去当前较短的队列时,可能没过多久刚刚你在的队列又比你现在所处的队列短了,因为队短不代表等待时间短,你无法预测每个队列你需要等待的时间。所以在该种制度下,不同于买票排队的这种可以随便更换队列的随意性,我们在第一种算法中设定:每到达一个客户将其排在队列最短的队尾,且不管其它队列是否变的更短,甚至已经空闲,该客户也只能在已队列中等待前面的客户办理完业务自己才能办理业务,很明显这种算法效率不是最好的。一是时间利用率不高,而是无法保证先到达的客户的办理业务时间一定比后到达的客户早。

代码片段和文件信息
#include< time.h >
#include
#include“linklist.h“
#include“linkqueue.h“
Event en; //事件
QElemType customer; //客户记录
int TotalTime; //累计客户逗留时间
int WaitTime; //累计客户等待时间
int CustomerNum ; //累计客户数
int CloseTime;
int StartTime;
linkList *ev; //事件表
linkQueue *q[5]; //4个客户队列,q[i]指向第i号窗口的队列
int leave_num = 0; //第leave_num个离开银行的客户
void Random( int *duration int *intertime ); //产生随机数,第一个参数代表当前客户的办理业务所需的时间,第二个参数代表下一个客户与当前客户的到达时间差
void OrderInsert( linkList *eventlist Event cur_en ); //将产生的事件按事件发生时间顺序排列
void OpenForDay(); //初始化
void CustomerArrived( ); //对客户到达事件进行处理
void CustomerDepature( ); //对客户离开事件进行处理
void Bank_Simulation( int CloseTime ); //排队系统模拟函数
int Minium( int num1 int num2 int num3 int num4 );//比较四个数中的最小值,若第i个参数最小,则返回i,参数相等的情况下返回序号较小的参数的序号
void main()
{
printf( “输入银行的24小时制营业时间:如营业时间为9:00--17:00,则应输入:917\n“ );
scanf( “%d%d“ &StartTime &CloseTime );
CloseTime = ( CloseTime - StartTime ) * 60;
printf(“离开客户序列 业务窗口 到达时间 办理业务时长 离开时间 停留时长 等待时长\n“);
Bank_Simulation( CloseTime );
}
//产生客户办理业务所需时间时间和两个客户到达时间的时间间隔的随机数
void Random( int *duration int *intertime )
{
srand( (unsigned)time( NULL ) ); //用时间作为种子对随机数进行操作
*duration = rand()%30 + 1; //任何一个客户的办理业务时间在1-30之间
*intertime = rand()%5+1; //任何两个客户到达的时间间隔不超过5分钟,1-5
Sleep(1000); //由于随机函数的产生机制导致在一秒以内产生的随机数都是相同的,因此在一次使用Random时需要进行延时
}
//将事件cur_en按照发生时间的先后顺序有序的插入事件链表eventlist中
void OrderInsert( linkList *eventlist Event cur_en )
{
if( ListEmpty( eventlist) ){ //当事件链表为空时,将第一个事件直接插入到第一个位置
ListInsert_L( eventlist 1 cur_en );
}
else{ //当事件链表不为空时,先将事件插入到事件表的第一个位置然后将事件表按非递减的顺序排序
ListInsert_L( eventlist 1 cur_en ); //将事件cur_en插入到eventlist的第1项
Increse( eventlist );
}
}
//初始化操作
void OpenForDay()
{
int i;
TotalTime = 0; //初始化累计时间为0
CustomerNum = 0; //初始化客户总数为0
WaitTime = 0;
ev = InitList_L( ); //初始化事件链表为空
en.OccurTime = 0; //设定第一个客户到达事件
en.NType = 0;
OrderInsert( ev en ); //将第一个客户到达事件插入事件表
for( i = 1; i <= 4; i++ ) //初始化窗口队列
q[ i ] = InitQueue();
}
void CustomerArrived( )
{
int duration; //当前到达的客户办理事务所需的时间
int intertime; //下一个客户与当前客户到达时间的时间间隔
Event next; //下一个客户项
Event first_leave; //当前客户的离开事件
int i;
++CustomerNum;
Random( &duration &intertime ); //对duration和intertime取随机数
next.OccurTime = en.OccurTime + intertime; //下一个客户的到达时间
next.NType = 0; //下一个客户的事件类型,0表示到达
if( next.OccurTime < CloseTime ) //下一个客户到达时银行还未关门
OrderInsert( ev next ); //按顺序将下一个客户的到达时间插入到事件队列中
customer.ArriveTime = en.OccurTime; //计算当前客户的队列项并为其分配队列
customer.Duration = duration;
i = Minium( QueueLength( q[1] ) QueueLength( q[2] ) QueueLength( q[3] ) QueueLength( q[4] ) ); //获得最短队列的队列号
InsertQueue( q[i] customer ); //将当前客户对应的队列项插入到最短队列中
//若队列长度不为1,说明有其他用户在排队,则后续客户的离开事件均与它之前的所有客户的离开事件相关,
//在此无法
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 36235 2014-06-02 11:52 3离散时间模拟银行排队问题\Debug\main.obj
文件 50176 2014-06-02 11:52 3离散时间模拟银行排队问题\Debug\vc60.idb
文件 69632 2014-06-02 11:52 3离散时间模拟银行排队问题\Debug\vc60.pdb
文件 221314 2014-06-02 11:52 3离散时间模拟银行排队问题\Debug\离散时间模拟银行排队问题.exe
文件 630540 2014-06-02 11:52 3离散时间模拟银行排队问题\Debug\离散时间模拟银行排队问题.ilk
文件 43520 2014-06-02 09:40 3离散时间模拟银行排队问题\Debug\离散时间模拟银行排队问题.opt
文件 2804956 2014-06-02 11:52 3离散时间模拟银行排队问题\Debug\离散时间模拟银行排队问题.pch
文件 558080 2014-06-02 11:52 3离散时间模拟银行排队问题\Debug\离散时间模拟银行排队问题.pdb
文件 5459 2014-06-02 09:44 3离散时间模拟银行排队问题\li
文件 3782 2014-06-02 11:52 3离散时间模拟银行排队问题\li
文件 7999 2014-06-02 12:56 3离散时间模拟银行排队问题\main.c
文件 4605 2014-05-31 20:01 3离散时间模拟银行排队问题\离散时间模拟银行排队问题.dsp
文件 573 2014-05-31 15:03 3离散时间模拟银行排队问题\离散时间模拟银行排队问题.dsw
文件 66560 2014-06-02 12:56 3离散时间模拟银行排队问题\离散时间模拟银行排队问题.ncb
文件 49664 2014-06-02 12:56 3离散时间模拟银行排队问题\离散时间模拟银行排队问题.opt
文件 955 2014-06-02 11:52 3离散时间模拟银行排队问题\离散时间模拟银行排队问题.plg
文件 444339 2014-06-02 14:33 3离散时间模拟银行排队问题\银行排队问题总结.docx
目录 0 2014-06-02 11:52 3离散时间模拟银行排队问题\Debug
目录 0 2014-06-03 15:32 3离散时间模拟银行排队问题
----------- --------- ---------- ----- ----
4998389 19
- 上一篇:C语言核心技术英文版
- 下一篇:ti官方DSP2812例程
相关资源
- 操作系统c语言模拟文件管理系统844
- C语言开发实战宝典
- C++中头文件与源文件的作用详解
- C语言代码高亮html输出工具
- 猜数字游戏 c语言代码
- C语言课程设计
- 数字电位器C语言程序
- CCS FFT c语言算法
- 使用C语言编写的病房管理系统
- 通信过程中的RS编译码程序(c语言)
- 计算机二级C语言上机填空,改错,编
- 用回溯法解决八皇后问题C语言实现
- 简易教务管理系统c语言开发文档
- 操作系统课设 读写者问题 c语言实现
- 小波变换算法 c语言版
- C流程图生成器,用C语言代码 生成C语
- 3des加密算法C语言实现
- 简单的C语言点对点聊天程序
- 单片机c语言源程序(51定时器 八个按
- 个人日常财务管理系统(C语言)
- c语言电子商务系统
- 小甲鱼C语言课件 源代码
- 将图片转换为C语言数组的程序
- C语言实现的一个内存泄漏检测程序
- DES加密算法C语言实现
- LINUX下命令行界面的C语言细胞游戏
- 用单片机控制蜂鸣器播放旋律程序(
- 学校超市选址问题(数据结构C语言版
- 电子时钟 有C语言程序,PROTEUS仿真图
- 尚观培训linux许巍老师关于c语言的课
评论
共有 条评论