用c语言数据结构中队列的方法编写叫号程序代码
时间: 2024-11-15 22:32:25 浏览: 5
在C语言中,我们可以使用数组或者链表来实现队列的数据结构,并编写一个简单的叫号程序。这里我们假设使用数组来演示,因为数组操作直观且易于理解。首先,我们需要定义队列的结构,包括队首和队尾指针。
```c
#include <stdio.h>
#define MAX_SIZE 50
typedef struct {
int queue[MAX_SIZE];
int front; // 队首元素的索引
int rear; // 队尾元素的索引 + 1 (考虑到数组下标从0开始)
} Queue;
// 初始化队列
void initQueue(Queue* q) {
q->front = -1;
q->rear = -1;
}
// 插入元素到队尾
void enqueue(Queue* q, int item) {
if ((q->rear + 1) % MAX_SIZE == q->front) { // 判断是否已满
printf("Queue is full.\n");
return;
}
q->rear = (q->rear + 1) % MAX_SIZE; // 循环更新队尾
q->queue[q->rear] = item;
if (q->front == -1) q->front = 0; // 如果队首为空,则同时初始化
}
// 从队首取出元素
int dequeue(Queue* q) {
if (q->front == q->rear) { // 判断队列是否为空
printf("Queue is empty.\n");
return -1;
}
int item = q->queue[q->front]; // 取出队首元素
q->front = (q->front + 1) % MAX_SIZE; // 更新队首
return item;
}
int main() {
Queue callQueue;
initQueue(&callQueue);
int numPatients = 3;
for (int i = 0; i < numPatients; ++i) {
int patientID = i + 1;
printf("Adding patient %d to the queue...\n", patientID);
enqueue(&callQueue, patientID);
}
while (!isEmpty(&callQueue)) {
int patientID = dequeue(&callQueue);
if (patientID != -1) {
printf("Calling patient %d...\n", patientID);
} else {
break;
}
}
return 0;
}
```
在这个程序中,`enqueue`用于添加病人,`dequeue`用于叫号。注意`isEmpty`函数未在这里显示,你可以自行添加一个检查队列是否为空的辅助函数。这个简单的模拟可以扩展,例如加入更多的患者信息、处理异常情况等。
阅读全文