#include"stdio.h" #include"stdlib.h" #include"time.h" #include"math.h"
#dene CLOSE_TIME 540 /*结束时间 17:30,记为 540(单位:分钟)*/ #dene T_E
6 /*时间间隔 负 指 数分布的 系 数 1/t*/ #dene T_F 10 /* 服务 时 间 负指数分 布 的 系
数 1/t*/ int Dc[108][2]={{0,0}}; /*记录从 5 分钟开始每隔 5 分钟的队长*/ int j=0; /*
队 长 数 组 下 标 */ double Max[2]={0,0}; /* 记 录 最 大 队 长 , 及 其 发 生 时 刻 */ int
d[2]={0,0}; /* 记 录 当 前 队 长 */ int LL[2]={0,0}; /* 标记 最 后 一 个 用 户 */ typedef
struct Event{ double Ar; /*到达时刻*/ double Du; /*办理事物所需时间*/ double Dl;
/*用户离开时刻*/ int d; /*队列标记*/ struct Event *next_d; /*下一个同标记用户的位
置*/ struct Event *next; /* 下一个用户的位置 */ }Event; /*用户事件链表*/ Event
*re=NULL,*pro[2]={NULL,NULL},*r[2]={NULL,NULL}; /*链尾指针、队头指针、对
尾 指 针 */ double expntl(double x) { /* 负 指 数 分 布 随 机 数 */ double z;
/*srand(time(NULL));*/ do{ z=((double)rand()/RAND_MAX); }while((z == 0)||(z
== 1)); /*printf("%f ",z);*/ return(-x*log(z)); }/*expntl*/ int choose(double k) {
/*选择要执行的事件,0 为到达事件,1,2 为两队列的离开事件*/ int h=0; if(pro[0]!
=NULL)if((pro[0]->Dl)选择是否加入队列长度记
录 !"#$%""% &'()
*(+,-,$到达事件.,&(&(/.,&(0*%12.,&(
-'&(3).--41&'()&'(/
/$+"567.)389. 1 $ +'&(3): " /
-/+ 1 -+ /"
567.)389./ /%1- /"$ *(+/ /%1
- 以下为加入链表&'(/- !"#
$%""% / 9*'"- 加 入 队 长 最 大 记 录
" /4 1 $ /&'() / //
-,以下为关门后的处理1";;""*(+
1 "*(+" 1 "*(+ 1
*(+-,(<1(+%($&( 小 时&(0 分钟 &(1 秒钟
30)0*&$.,&(*=头指针30)2:8.+>()"1*&?0
.,&(0*%12.,&(* "-'&(3).-+'&(3):
-+&'(&'()""
- !"#9*'" 9*'- -, 以 下 为 输 出 部 分
&@AB1C&D0@=@@ 生 成 9-3-E 文 件 &F=@'AAG"B&@
"!"H &F=@I=@=%" &F=@IB&4@=%" "!"H
&F=@I=@=% 以 上 输 出 队 长 序 列 &F=@IB&@=%
&F=@('==JCJ='=4=JJB&C&J一队J=J二队JB&?(J队长变化图JB&'*>J时间分
钟JB&<*>J队长JB&KC+B&@*&F=@-@&'($输出用户
到 达 、 离 开 时 间 &F=@I=@=-&'(&F=@IB&@=-*
&'( $ &F=@I=@= ()-+ 计 算 总 等 待 时 间
&'( ()-+ &F=@IB&'4AIB&@==
&F=@('4=-=JCJ='4==JJB&C&J到达时间J=J离开时间JB&?(J用户到达离开时间
图 JB&'*>J 用 户 序 号 JB&<*>J 时 间 分 钟 J@ %1 &@AB 模 拟 排
队D('(@=@@&F=@输出队长:B& 一队:B&@"!"#&F=@I@=%
"&F=@B& 二队:B&@"!"#&F=@I@=%以上输出队长序列
&F=@B&@ &F=@ 输 出 队 长 : B& 一 队 : B( 二 队 : B&@ "!"#
评论0
最新资源