排队等待问题(队列) 蹦了直接~求搭救 谢谢
银行有一个客户办理业务站,在一天内随机地有客户到达,设每位客户的业务办理时间是某个范围内的值。设只有一个窗口,一位业务人员,要求程序模拟统计在一天时间内,所有客户的平均等待时间。模拟数据按客户到达的先后顺序依次由键盘输入,对应每位客户有两个数据,到达时刻和需要办理业务的时间。 输入格式
第一行:一天内的客户总人数n
第二行:第一个客户的到达时刻和需要办理业务的时间
第三行:第二个客户的到达时刻和需要办理业务的时间
……
第n行:第n - 1个客户的到达时刻和需要办理业务的时间
第n + 1行:第n 个客户的到达时刻和需要办理业务的时间
输出格式
第一行:所有客户的平均等待时间(精确到小数点后2位)
输入样例
3 1 3 2 1 3 5
输出样例
1.33
源代码:
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef struct QNode{ //修改结构体的定义,结构体含有两个数据 intertime和occurtime
double intertime;
double occurtime;
struct QNode *next;
}QNode,*Queueptr;
typedef struct{ //单向链式队列
Queueptr front; //队头指针 队头指针,没有数据域
Queueptr rear; //队尾指针
}LinkQueue;
int InitQueue(LinkQueue &Q)//队列初始化
{
Q.front=Q.rear=(Queueptr)malloc(sizeof(QNode));
if(!Q.front) exit(OVERFLOW);
Q.front->next=NULL;
return OK;
}
int EnQueue(LinkQueue &Q,double a,double b)//插入队尾元素a,b
{
Queueptr p;
p=(Queueptr)malloc(sizeof(QNode));
if(!p)
exit(OVERFLOW);
p->intertime=a;
p->occurtime=b;
p->next=NULL;
Q.rear->next=p;
Q.rear=p;
return OK;
}
int DeQueue(LinkQueue &Q)//删除队头元素
{
Queueptr p;
if(Q.front==Q.rear)
return ERROR;
p=Q.front->next;
Q.front->next=p->next;
if(Q.rear==p) Q.rear=Q.front;
free(p);
return OK;
}
double waittime_Queue(LinkQueue &Q) //客户等待时间计算
{
double waittime;
Queueptr q;
double clock=0,num=0;
while(Q.front!=Q.rear)
{
q=Q.front->next;
if((q->intertime<clock)||(num==0))
{
num++; //num只是为了设置第一个数做特殊处理,因为第一个数据是不存在等待时间的
if(num==1)
{
clock=q->intertime+q->occurtime;
}
else
{
waittime=waittime+clock-(q->intertime);
clock=clock+q->occurtime;
}
}
DeQueue(Q);
}
return waittime;
}
int chudui(LinkQueue &Q)
{
Queueptr q;
printf("The Queue is:");
q=Q.front->next;
while((Q.rear-q)>=0)
{
printf("%lf %lf\n",q->intertime,q->occurtime);
q++;
}
return OK;
}
int main()
{
LinkQueue Q;
InitQueue(Q); //一定要初始化,否则会蹦的
int n,m;
double intertime,occurtime,aver;
scanf("%d",&n);
m=n;
while(n--)
{
scanf("%lf%lf",&intertime,&occurtime);
// printf("%lf %lf\n",intertime,occurtime); //检验输入是否有误
// EnQueue(Q,intertime,occurtime); //检验入队列的正确性
// printf("%lf\n",waittime_Queue(Q));
// chudui(Q); //检验队列的正确性
}
aver=waittime_Queue(Q)/m;
printf("%.2lf\n",aver);
return 0;
}
waittimeQueue那个函数应该有问题,还有chudui函数是用来测试的 好像也挂了,一些测试的语句被我注释掉了
思路:waitetime=(1+3-2)+(1+3+1-3)
aver=4/3
谢谢