用队列模拟服务台前的排队现象问题_c/c++

/*用队列模拟服务台前的排队现象问题
求出业务员空闲时间 客户平均等待时间
各个客户的到来时间和需要占用的时间在一个文本文件里*/ 
#include<stdio.h>
#include<stdlib.h>
 typedef struct{
 	int arrive;//到达时间 
 	int treat;//需要占用的时间 
 }QNODE;
 typedef struct node{
 	QNODE data;
 	struct node*next;
 }LNODE;
 LNODE*front,*rear;
 void in_Queue(QNODE e){
 	LNODE* p = (LNODE*)malloc(sizeof(LNODE));
 	p->data = e;
 	p->next = NULL;
 	if(!front)
 		front = rear = p;
 	else
 		rear = rear->next = p;
 }
 int out_Queue(QNODE*e)
 {
 	LNODE* delp;
 	if(!front)
 		return 0;//队空
	*e = front->data;
	delp = front;
	front = front->next;
	if(!front)
		rear = NULL; 
	free(delp);
	return 1;
 }
 
 int main(void)
 {
 	char Fname[120];//读取文件的文件名 
 	FILE*fp;
 	QNODE temp, curr;
 	//dwait业务员总的空闲时间 clock当前时间 wait客户总的等待时间 
	 //cout客户总数  
 	int have=0,dwait=0,clock=0,wait=0,count=0,finish; 
 	printf("\n输入文件名称"); 
 	scanf("%s",Fname);	
 	if((fp=fopen(Fname,"r"))==NULL)
 	{
 		printf("文件打开出错");
		 return 0; 
 	}
 	front=rear=NULL;
 	have= fscanf(fp,"%d %d",&temp.arrive,&temp.treat);
 	do{
 		if(!front&&!(have-2))
 		{
 			dwait+=temp.arrive-clock;
 			clock = temp.arrive;
 			in_Queue(temp);
			have= fscanf(fp,"%d %d",&temp.arrive,&temp.treat); 
 		}
 		count++;
 		out_Queue(&curr);
 		wait+=(clock-curr.arrive);
 		finish = clock+curr.treat;
 		while(!(have-2)&&temp.arrive<=finish)
 		{
 			in_Queue(temp);
 			have= fscanf(fp,"%d %d",&temp.arrive,&temp.treat);
 		}
 		clock = finish;
 	}while(!(have-2)||front);
 	printf("业务员等待时间%d___客户平均等待时间%f\n",dwait,(double)wait/count);
 	printf("模拟总时间%d___客户人数%d___总等待时间%d\n",clock,count,wait);
 	return 0;
 }

  • 15
    点赞
  • 80
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值