用c语言数据结构顺序队列写排队看病
时间: 2024-11-24 17:10:50 浏览: 4
在C语言中,我们可以使用数组或链表作为基础数据结构来创建一个简单的顺序队列(Queue),模拟排队看病的情景。这里我们使用数组为例:
```c
#include <stdio.h>
#define MAX_CAPACITY 10
typedef struct {
int front; // 队首元素的索引
int rear; // 队尾元素的索引
int patient[MAX_CAPACITY]; // 医生的名单
} Queue;
// 初始化队列
void init_queue(Queue* q) {
q->front = -1;
q->rear = -1;
}
// 判断队列是否为空
int is_empty(const Queue* q) {
return q->front == -1;
}
// 判断队列是否已满
int is_full(const Queue* q) {
return (q->front + 1) % MAX_CAPACITY == q->rear;
}
// 入队操作(添加病人)
void enqueue(Queue* q, int new_patient) {
if (is_full(q)) {
printf("Queue is full, no room for more patients.\n");
return;
}
if (is_empty(q)) {
q->front = 0;
} else {
q->rear = (q->rear + 1) % MAX_CAPACITY;
}
q->patient[q->rear] = new_patient;
printf("Patient %d has joined the queue.\n", new_patient);
}
// 出队操作(医生看病人)
int dequeue(Queue* q) {
if (is_empty(q)) {
printf("No patients in the queue.\n");
return -1;
}
int patient = q->patient[q->front];
if (q->front == q->rear) { // 如果队列只剩一人,则更新头指针
q->front = q->rear = -1;
} else {
q->front = (q->front + 1) % MAX_CAPACITY;
}
printf("Doctor is now seeing Patient %d.\n", patient);
return patient;
}
int main() {
Queue queue;
init_queue(&queue);
// 插入一些病人并看病
enqueue(&queue, 1); // 病人1
enqueue(&queue, 2); // 病人2
enqueue(&queue, 3); // 病人3
while (!is_empty(&queue)) {
int seen_by_doctor = dequeue(&queue);
if (seen_by_doctor != -1) {
printf("After being treated, Patient %d leaves the clinic.\n", seen_by_doctor);
}
}
return 0;
}
```
在这个程序中,`enqueue` 和 `dequeue` 分别用于添加新病人和让当前病人就诊。注意这只是一个简化版的示例,实际应用中可能会需要考虑更多的边界条件和错误处理。
阅读全文