#include "stdio.h" #include "stdlib.h" #include "math.h" #define Qu 4 //客户队列数 #define Khjg 5 //两相邻到达的客户的时间间隔最大值 #define Blsj 30//每个客户办理业务的时间最大值 #define OK 1 #define ERROR 0 #define TRUE 1 #define FALSE 0 typedef int Status; typedef int Boolean; typedef struct { int OccurTime; //事件发生时刻 int NType; //事件类型,Qu表示到达事件, //0-Qu-1表示Qu个窗口的离开事件 }Event,ElemType;//事件类型,有序链表LinkList的数据元类型 typedef struct LNode // 结点类型 { ElemType data; LNode *next; }*Link,*Position; struct LinkList // 链表类型 { Link head,tail; // 分别指向线性链表中的头结点和最后一个结点 int len; // 指示线性链表中数据元素的个数 }; typedef LinkList EventList; // 事件链表类型,定义为有序链表 typedef struct { int ArrivalTime; int Duration; }QElemType; //队列的数据元素类型 typedef struct QNode { QElemType data; QNode *next; }*QueuePtr; //队列 struct LinkQueue { QueuePtr front,rear; // 队头、队尾指针 }; EventList ev;//事件表 Event en; //事件 Event et;//临时变量 LinkQueue q[Qu]; //Qu个队列客户 QElemType customer; //客户记录 int TotalTime=0,CustomerNum=0;//累计客户逗留时间,客户数(初值为0) int CloseTime; // 银行营业时间(单位是分) int cmp(Event a,Event b) { // 依事件a的发生时刻<、=或>事件b的发生时刻分别返回-1、0或1 if(a.OccurTime==b.OccurTime) return 0; else ret