c语言 银行排队系统 VIP和普通用户分别窗口 代码
时间: 2024-01-17 17:04:53 浏览: 101
以下是一个简单的C语言银行排队系统的代码示例,其中包括了VIP和普通用户分别窗口的实现:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义队列
#define MAXSIZE 100
typedef struct {
int data[MAXSIZE];
int front; // 队头指针
int rear; // 队尾指针
} Queue;
// 初始化队列
void initQueue(Queue *q) {
q->front = 0;
q->rear = 0;
}
// 入队
void enQueue(Queue *q, int x) {
if ((q->rear + 1) % MAXSIZE == q->front) {
printf("Queue is full.\n");
exit(0);
}
q->data[q->rear] = x;
q->rear = (q->rear + 1) % MAXSIZE;
}
// 出队
int deQueue(Queue *q) {
if (q->front == q->rear) {
printf("Queue is empty.\n");
exit(0);
}
int x = q->data[q->front];
q->front = (q->front + 1) % MAXSIZE;
return x;
}
// 判断队列是否为空
int isEmpty(Queue q) {
return q.front == q.rear;
}
// 主函数
int main() {
Queue vipQueue, normalQueue;
initQueue(&vipQueue);
initQueue(&normalQueue);
int n, m;
printf("Please input the number of VIP users: ");
scanf("%d", &n);
printf("Please input the number of normal users: ");
scanf("%d", &m);
// VIP用户进入队列
for (int i = 0; i < n; i++) {
printf("Please input the arrival time and service time of VIP user %d: ", i+1);
int arrivalTime, serviceTime;
scanf("%d %d", &arrivalTime, &serviceTime);
if (isEmpty(vipQueue)) {
enQueue(&vipQueue, arrivalTime);
} else {
// 按照到达时间插入队列
int j = vipQueue.rear-1;
while (j >= vipQueue.front && vipQueue.data[j] > arrivalTime) {
vipQueue.data[j+1] = vipQueue.data[j];
j--;
}
vipQueue.data[j+1] = arrivalTime;
}
}
// 普通用户进入队列
for (int i = 0; i < m; i++) {
printf("Please input the arrival time and service time of normal user %d: ", i+1);
int arrivalTime, serviceTime;
scanf("%d %d", &arrivalTime, &serviceTime);
if (isEmpty(normalQueue)) {
enQueue(&normalQueue, arrivalTime);
} else {
// 按照到达时间插入队列
int j = normalQueue.rear-1;
while (j >= normalQueue.front && normalQueue.data[j] > arrivalTime) {
normalQueue.data[j+1] = normalQueue.data[j];
j--;
}
normalQueue.data[j+1] = arrivalTime;
}
}
// 开始服务
int currentTime = 0; // 当前时间
int vipIndex = 0; // VIP队列中等待服务的用户的下标
int normalIndex = 0; // 普通队列中等待服务的用户的下标
while (!isEmpty(vipQueue) || !isEmpty(normalQueue)) {
int vipArrivalTime = MAXSIZE, normalArrivalTime = MAXSIZE;
if (!isEmpty(vipQueue)) vipArrivalTime = vipQueue.data[vipQueue.front];
if (!isEmpty(normalQueue)) normalArrivalTime = normalQueue.data[normalQueue.front];
// 选择最早到达的用户
int arrivalTime = vipArrivalTime < normalArrivalTime ? vipArrivalTime : normalArrivalTime;
currentTime = arrivalTime;
// VIP用户优先服务
if (!isEmpty(vipQueue) && vipArrivalTime <= normalArrivalTime && vipQueue.data[vipIndex] <= currentTime) {
printf("VIP user %d is being serviced at VIP window.\n", vipIndex+1);
vipIndex++;
} else if (!isEmpty(normalQueue) && normalQueue.data[normalIndex] <= currentTime) {
printf("Normal user %d is being serviced at normal window.\n", normalIndex+1);
normalIndex++;
}
// 处理完服务时间最短的用户
if (!isEmpty(vipQueue) && vipArrivalTime <= normalArrivalTime && vipQueue.data[vipIndex-1] <= currentTime) {
deQueue(&vipQueue);
} else if (!isEmpty(normalQueue) && normalQueue.data[normalIndex-1] <= currentTime) {
deQueue(&normalQueue);
}
}
return 0;
}
```
以上代码仅供参考,具体实现方式和细节还需要根据实际需求进行调整和完善。
阅读全文