博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
离散事件模拟
阅读量:5860 次
发布时间:2019-06-19

本文共 3565 字,大约阅读时间需要 11 分钟。

#include
#include
#define CLOSETIME 1000 #define M 3 typedef struct QueueNode{
int arrivetime; int duration; struct QueueNode *next; }QueueNode; typedef struct QueueHeader{
QueueNode *front,*rear; int length; }QueueHeader; typedef struct EventNode{
int occurTime,eventType; struct EventNode *next; }EventNode; typedef struct EventList{
struct EventNode *front,*rear; int eventNum; }EventList; QueueHeader q[M+1]; EventList *eventlst; int seed=300; int generate(EventNode **p) {
*p=(EventNode*)malloc(sizeof(EventNode)); if(!(*p)) {printf("allocation error!");return -1;} return 0; } void InsertEvent(EventList *eventlst,int occurTime,int etype) {
EventNode *p,*q,*qre; p=(EventNode*)malloc(sizeof(EventNode)); p->occurTime=occurTime;p->eventType=etype; eventlst->eventNum++; q=eventlst->front;qre=NULL; while(q&&occurTime>q->occurTime) {
qre=q;q=q->next ; } if(!qre) {p->next=eventlst->front;eventlst->front=p;} else {p->next =q;qre->next =p;} if(eventlst->eventNum==1) eventlst->rear=p; } void DeleteEvent(EventList *eventlst,EventNode **event) {
EventNode *p; p=eventlst->front; eventlst->front=p->next; if(--eventlst->eventNum<1) eventlst->rear=eventlst->front; *event=p; } void EnQueue(QueueHeader *swindow,int t1,int t2) {
QueueNode *p; p=(QueueNode*)malloc(sizeof(QueueNode)); p->arrivetime=t1;p->duration=t2; swindow->length++; if(swindow->length==1) {
p->next=NULL;swindow->front=p;swindow->rear=p; } else {
swindow->rear->next=p;swindow->rear=p; } } void DeQueue(QueueHeader *swindow,QueueNode *f) {
QueueNode *p; if(swindow->length>0) {
f->arrivetime=swindow->front->arrivetime; f->duration=swindow->front->duration; p=swindow->front;swindow->front=swindow->front->next; swindow->length--; if(swindow->length==0) swindow->rear=NULL; free(p); } } void random(int *durtime,int *intevaltime) {
*durtime=rand()+1; *intevaltime=rand()+1; } int rand() {
int k=(int)(((double)seed/32767)*10000)%29; seed=(13107*seed+6553)%32767; return k; } int Minlength() {
int minx,k,i; minx=q[1].length;k=1; for(i=2;i
occurTime=0;pe->eventType=0; pe->next=NULL; eventlst->front=pe;eventlst->rear=pe; eventlst->eventNum=1; for(i=1;i
eventNum>0) {
DeleteEvent(eventlst,&event); if(event->eventType==0) {
printf("A client entered!"); count++; random(&durtime,&inteval); if((event->occurTime+inteval)
occurTime+inteval,0); c=Minlength(); EnQueue(&q[c],event->occurTime,durtime); printf("Insert to window %d", c); printf("(arrive time:%d duration:%d)\n",event->occurTime,durtime); if(q[c].length==1) InsertEvent(eventlst,event->occurTime+durtime,c); } else {
i=event->eventType; DeQueue(&q[i],&f); printf("service window%d: A client left!\n",i); totaltime+=event->occurTime-f.arrivetime; if(q[i].length!=0) InsertEvent(eventlst,event->occurTime+q[i].front->duration ,i); } } printf("\n Total Customers:%d\n",count); printf("Average duration:%d\n",totaltime/count); }

转载地址:http://cmejx.baihongyu.com/

你可能感兴趣的文章
从0开发豆果美食小程序——项目搭建
查看>>
【译】WebSocket协议第二章——一致性要求(Conformance Requirements)
查看>>
Sublime Text3全局搜索/在文件夹中查找默认排除node_modules目录,Sublime小技巧——吕江民·敬上...
查看>>
在linux下合并磁盘
查看>>
WEB安全Permeate漏洞靶场挖掘实践
查看>>
Android Retrofit 实现文字(参数)和多张图片一起上传
查看>>
Compare Version Numbers LC解题记录
查看>>
Mysql 中创建索引和索引的使用问题
查看>>
UIAlertController 介绍
查看>>
为Android开发者整理的Google I/O开发者大会第一弹
查看>>
(cons '(〇 . 前言) 《为自己写本-Guile-书》)
查看>>
JQuery tokeninput输入提示插件获取JSON数据
查看>>
一天一点linux(11):如何用U盘装Linux系统?
查看>>
Android动态设置控件长宽比的几种常见方法
查看>>
SegmentFault 高效改版,快来内测啦!
查看>>
docker学习系列13 实现 基于pxc 的mysql 多节点主主同步 ...
查看>>
Javascript操作DOM常用API总结
查看>>
Java图形化:布局方式
查看>>
DBA很忙—MySQL的性能优化及自动化运维实践
查看>>
通过调用笑话列表API获取笑话列表
查看>>