用数据结构中的队列和C语言编写某银行有一个客户办理业务站,在单位时间内随机地有客户到达,设每位客户的业务办理时间是某个范围内的随机值。设只有一个窗口,一位业务人员,要求程序模拟统计在设定时间内,业务人员的总空闲时间和客户的平均等待时间。假定模拟数据已按客户到达的先后顺序依次存于某个正文数据文件中。对应每位客户有两个数据,到达时间和需要办理业务的时间。
时间: 2023-06-23 13:08:42 浏览: 71
数据结构 队列的应用——银行客户平均等待时间
以下是使用队列和C语言编写的模拟程序:
```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define MAX_QUEUE_SIZE 1000
typedef struct {
int arrival_time; // 到达时间
int service_time; // 业务办理时间
} Customer;
typedef struct {
Customer queue[MAX_QUEUE_SIZE]; // 队列
int front; // 队首
int rear; // 队尾
} Queue;
void init_queue(Queue *q) {
q->front = q->rear = 0;
}
int is_empty(Queue *q) {
return q->front == q->rear;
}
int is_full(Queue *q) {
return (q->rear + 1) % MAX_QUEUE_SIZE == q->front;
}
void enqueue(Queue *q, Customer c) {
if (is_full(q)) {
printf("Queue is full.\n");
exit(1);
}
q->queue[q->rear] = c;
q->rear = (q->rear + 1) % MAX_QUEUE_SIZE;
}
Customer dequeue(Queue *q) {
if (is_empty(q)) {
printf("Queue is empty.\n");
exit(1);
}
Customer c = q->queue[q->front];
q->front = (q->front + 1) % MAX_QUEUE_SIZE;
return c;
}
int main() {
Queue q;
init_queue(&q);
srand(time(NULL)); // 初始化随机数种子
int total_waiting_time = 0; // 客户的总等待时间
int total_idle_time = 0; // 业务人员的总空闲时间
int current_time = 0; // 当前时间
int num_customers = 0; // 客户数
int max_service_time = 10; // 业务办理时间的最大值
int max_arrival_interval = 5; // 到达时间间隔的最大值
int simulation_time = 60; // 模拟时间(分钟)
while (current_time < simulation_time) {
// 判断是否有客户到达
if (rand() % max_arrival_interval == 0) {
Customer c;
c.arrival_time = current_time;
c.service_time = rand() % max_service_time + 1;
enqueue(&q, c);
num_customers++;
}
// 判断业务人员是否空闲
if (!is_empty(&q)) {
Customer c = dequeue(&q);
total_waiting_time += current_time - c.arrival_time;
current_time += c.service_time;
} else {
total_idle_time++;
current_time++;
}
}
// 输出统计结果
printf("Simulation finished.\n");
printf("Total number of customers: %d\n", num_customers);
printf("Total waiting time: %d minutes\n", total_waiting_time);
printf("Average waiting time: %.2f minutes\n", (float) total_waiting_time / num_customers);
printf("Total idle time: %d minutes\n", total_idle_time);
return 0;
}
```
程序的基本思路是,使用队列存储客户,每分钟模拟一次,判断是否有客户到达,如果有,则将客户加入队列;如果业务人员空闲并且队列不为空,则从队列中取出客户进行业务办理,统计客户总等待时间和业务人员总空闲时间。最后输出统计结果。
程序中使用了两个随机数生成器,一个用于模拟客户到达的随机性,一个用于模拟客户业务办理时间的随机性。模拟时间、到达时间间隔的最大值和业务办理时间的最大值可以根据实际情况进行调整。
阅读全文