博客
关于我
数据结构_顾客等待时间(队列)
阅读量:241 次
发布时间:2019-03-01

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

某银行有一个客户办理业务站,在一天内随机地有客户到达,

设每位客户的业务办理时间是某个范围内的值。
设只有一个窗口,一位业务人员,
要求程序模拟统计在一天时间内,所有客户的平均等待时间。

模拟数据按客户到达的先后顺序依次由键盘输入,

对应每位客户有 两个数据,即 到达时刻 和 需要办理业务(占用)的时间。
测试样例格式说明:
[键盘输入]
第一行:一天内的客户总人数n

第二行:第一个客户的 到达时刻 和 需要办理业务的时间

第三行:第二个客户的到达时刻和需要办理业务的时间
……
第n行:第n - 1个客户的到达时刻和需要办理业务的时间
第n + 1行:第n 个客户的到达时刻和需要办理业务的时间

[正确输出]

第一行:所有客户的平均等待时间(精确到小数点后2位)

测试样例:

[第一组自测数据]
[键盘输入]
3
1 3
2 1
3 5
[正确输出]
1.33
[第二组自测数据]
[键盘输入]
4
1 1
12 5
15 1
16 5
[正确输出]
1.00*/
/*

比如说:

1 3(等待0时)
2 1(等待
3 5(最后一个人的占用时间不需要出栈,因为它后面没人了,也不需要关系他什么时候结束)

#define  MAXLEN 100 #define EMPTY_QUEUE_ERROR -9999999typedef int ElemType;typedef struct {   	int elem[MAXLEN];    // 用来存队列数据元素的数组	int front;              // 指示队首在数组中位置的标识量	int rear;               // 指示队尾在数组中位置的标识量adj.后面的,背面的,后方的}intQueue;/*初始化(调整两个位置标识量)*/void InitQueue(intQueue* pQueue) // 指针类型作为形参,某个队列实例的地址{   	/**********************************************************	将该队列实例的队首和队尾标识量置零	*********************************************************/	pQueue->front = 0;	pQueue->rear = 0;}/*对头元素出队列*/int  DeQueue(intQueue* pQueue){   	if (!IsEmpty(pQueue))	{   		/*移动对头元素前保存该值*/		ElemType temp = pQueue->elem[pQueue->front];		/*向前移动front有讲究:		如果是:pQueue->front++,那么front可能会溢出数组,		所以必须利用循环队列的周期性质(除以周期取余数),保证不溢出*/		pQueue->front = (pQueue->front + 1) % MAXLEN;		return temp;/*删除成功的出口*/	}	return EMPTY_QUEUE_ERROR;}/*入队列将某数据元素x入队列,成功返回1,失败返回0。*/int  EnQueue(intQueue* pQueue, ElemType x){   	// 1、若该队列已满,则入队列失败	if (IsFull(pQueue))  return 0;	// 2、若该队列没满,将x写入队尾,然后队尾位置后移	else	{   		pQueue->elem[pQueue->rear] = x;// x入队列		pQueue->rear = (pQueue->rear + 1) % MAXLEN;// 队尾后移	}	return 1;}/*只能处理整点/占用整数小时的情况(可以修改数据结构及相关函数的参数处理类型来提升使用范围*/float avg_wait_time(){   	int n = 0,i = 0;	int come_time = 0,		occupy_time = 0;	int pre_time = 0,/*前一个人到的时间*/		pre_off_time = 0,/*前一个人离开的时刻*/		aft_time = 0;/*后一个人到达的时间*/	int sum_wait_time = 0;	intQueue q_come,		q_occupy;	InitQueue(&q_come);	InitQueue(&q_occupy);	printf("输入一天内的客户总人数n:\n");	scanf("%d", &n);	printf("输入到达时刻 和 需要办理业务(占用)的时间:\n");	while (i
aft_time) { sum_wait_time += (pre_off_time - aft_time); } else { /*不做累加,但下一个人来的晚,以至于要调整pre_off_time(此时已不是本意了)*/ pre_off_time = aft_time; } /*为下一次比较做预备*/ i++; } return sum_wait_time * 1.0 / n;}int main(){ printf("%.2f\n", avg_wait_time());}

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

你可能感兴趣的文章
MySQL SQL 优化指南:主键、ORDER BY、GROUP BY 和 UPDATE 优化详解
查看>>
MYSQL sql语句针对数据记录时间范围查询的效率对比
查看>>
mysql sum 没返回,如果没有找到任何值,我如何在MySQL中获得SUM函数以返回'0'?
查看>>
mysql sysbench测试安装及命令
查看>>
mysql Timestamp时间隔了8小时
查看>>
Mysql tinyint(1)与tinyint(4)的区别
查看>>
MySQL Troubleshoting:Waiting on query cache mutex
查看>>
mysql union orderby 无效
查看>>
mysql v$session_Oracle 进程查看v$session
查看>>
mysql where中如何判断不为空
查看>>
MySQL Workbench 使用手册:从入门到精通
查看>>
MySQL Workbench 数据库建模详解:从设计到实践
查看>>
MySQL Workbench 数据建模全解析:从基础到实践
查看>>
mysql workbench6.3.5_MySQL Workbench
查看>>
MySQL Workbench安装教程以及菜单汉化
查看>>
MySQL Xtrabackup 安装、备份、恢复
查看>>
mysql [Err] 1436 - Thread stack overrun: 129464 bytes used of a 286720 byte stack, and 160000 bytes
查看>>
MySQL _ MySQL常用操作
查看>>
MySQL – 导出数据成csv
查看>>
MySQL —— 在CentOS9下安装MySQL
查看>>