用C语言来编写程序使得满足以下要求,循环队列的基本操作。要求:设计一个主函数对循环队列进行测试。主要功能有:入队操作、出队操作、取对头元素,用循环队列的基本内容来写一个银行业务排队程序,包含取号、叫号功能,假定每个业务用时10秒。
时间: 2024-10-17 12:11:50 浏览: 12
在C语言中,我们可以创建一个自定义数据结构实现循环队列,并编写相应的函数来完成基本操作。首先,我们需要定义一个`Node`结构体表示队列中的节点,以及一个全局变量`front`和`rear`分别记录队头和队尾的位置。由于C语言本身没有内置的动态数组支持,我们可以手动管理数组大小。
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct {
int data;
struct Node *next;
} Node;
typedef struct {
int size;
int front;
int rear;
Node *queue[50]; // 现假设最大队列容量为50
} Queue;
// 入队操作
void enqueue(Queue *q, int value) {
if ((q->rear + 1) % q->size == q->front) {
printf("Queue is full.\n");
return;
}
q->queue[q->rear] = (Node){value, NULL};
q->rear = (q->rear + 1) % q->size;
}
// 出队操作
int dequeue(Queue *q) {
if (q->front == q->rear) {
printf("Queue is empty.\n");
return -1; // 返回特殊值表示队列空
}
int value = q- 1];
q->front = (q->front + 1) % q->size;
return value;
}
// 取队头元素
int getFront(Queue *q) {
if (q->front == q->rear) {
printf("Queue is empty.\n");
return -1;
}
return q->queue[q->front].data;
}
// 主函数模拟银行业务排队程序
int main() {
Queue queue;
queue.front = queue.rear = 0;
queue.size = 50;
int choice;
while (1) {
printf("\nBank Service:\n1. Take a number\n2. Call your number\n3. Exit\n");
scanf("%d", &choice);
switch (choice) {
case 1:
enqueue(&queue, ++queue.front); // 取号,这里简化为直接加一
printf("Your number is %d. Wait for service...\n", queue.front);
break;
case 2:
int num = dequeue(&queue);
if (num != -1) {
printf("Calling customer %d... ", num);
sleep(10); // 模拟业务处理时间
printf("Customer %d served.\n", num);
} else {
printf("No customers waiting.\n");
}
break;
case 3:
return 0;
default:
printf("Invalid choice. Try again.\n");
}
}
return 0;
}
```
在这个例子中,我们通过控制台交互模拟了一个简单的银行排队系统。用户可以选择取号或叫号,队列满了则无法再接收新客户,队列为空则提示没有客户等待。注意,实际项目中可能需要考虑更复杂的错误处理和用户界面。
阅读全文