资源简介
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语言核心技术英文版
- C语言实现基于winsock的ftp客户端程序
- 自制编程语言基于C语言郑钢源代码
- 数据结构C语言版第2版课后习题答案
- 华为技术有限公司C语言编程规范110
- C语言编程经典200
- 数据结构课程设计 职工管理系统 c语
- 常用算法程序集(C语言描述) (PD
- 轻松玩转AVR单片机C语言
- Apache2.2-win32-x86
- C语言基于SDL的贪吃蛇项目
- Fast ANN神经网络算法源码
- 郝斌C语言详细笔记 附源码91146
- MFC+Access图书馆管理系统
- 谭浩强《C语言程序设计》考研考点讲
- 小甲鱼C语言课件
- C语言多关卡可视化推箱子
- 基于MSP430的DAC7811控制-C语言
- C语言链表应用的完整版ATM提款机
- 《单片机C语言程序设计实训100例——
- 西安电子科技大学软件工程C语言程序
- C语言点滴 赵岩著 pdf
- C语言邻接表结构实现克鲁斯卡尔算法
- C语言教程第五版
- 基于51单片机的正弦波发生器.rar
- 郝斌C语言源代码
- mcp4531 数字电位器c语言驱动和电路
- 用C语言写的串口调试精灵
- 《c程序设计试题汇编》谭浩强 电子版
- 数据结构(c语言版 严蔚敏著
评论
共有 条评论