1. **队列的结构定义:**
- `SqQueue` 结构体定义了循环队列,包含一个数组 `data` 用于存储队列元素,以及两个指针 `front` 和 `rear` 分别表示队头和队尾的位置。
2. **初始化队列:**
- `Queue_Init` 函数用于初始化队列,将队头和队尾指针都置为 0。
3. **判断队列是否为空:**
- `Queue_IsEmpty` 函数通过判断队头和队尾指针是否相等来判断队列是否为空。
4. **判断队列是否已满:**
- `Queue_IsFull` 函数通过判断队尾指针是否达到数组的最大索引(`MAX_SIZE - 1`)来判断队列是否已满。
5. **入队操作:**
- `Queue_En` 函数用于将元素入队,首先检查队列是否已满,然后将元素存储在队尾,更新队尾指针。
6. **出队操作:**
- `Queue_De` 函数用于将元素出队,首先检查队列是否为空,然后将队头元素取出,更新队头指针。
7. **输出队列中的元素:**
- `Queue_Print` 函数用于打印队列中的元素,遍历队列数组,从队头到队尾输出元素。
8. **主函数演示:**
- 主函数演示了初始化队列、入队、出队等操作,并输出相应的结果。
#include <stdio.h>
#define MAX_SIZE 100
typedef int ElemType; // 假设队列中存储的元素类型是整数
typedef struct {
ElemType data[MAX_SIZE]; // 存储队列元素的数组
int front, rear; // 队列的队头和队尾指针
} SqQueue;
// 初始化队列
void Queue_Init(SqQueue &Q) {
Q.front = Q.rear = 0;
}
// 判断队列是否为空
int Queue_IsEmpty(SqQueue &Q) {
return Q.front == Q.rear;
}
// 判断队列是否已满
int Queue_IsFull(SqQueue &Q) {
return Q.rear == MAX_SIZE - 1;
}
// 入队操作
int Queue_En(SqQueue &Q, ElemType x) {
if (Q.rear == MAX_SIZE - 1) {
printf("队列已满,无法入队\n");
return 0; // 入队失败
}
Q.data[Q.rear] = x;
Q.rear++; // 队尾指针增加
return 1; // 入队成功
}
// 出队操作
int Queue_De(SqQueue &Q, ElemType &x) {
if (Q.front == Q.rear) {
printf("队列为空,无法出队\n");
return 0; // 出队失败
}
x = Q.data[Q.front];
Q.front++; // 队头指针增加
return 1; // 出队成功
}
// 输出队列中的元素
void Queue_Print(SqQueue &Q) {
int i;
for (i = Q.front; i < Q.rear; i++) {
printf("%d ", Q.data[i]);
}
printf("\n");
}
int main() {
SqQueue Q;
Queue_Init(Q);
Queue_En(Q, 1);
Queue_En(Q, 2);
Queue_En(Q, 3);
printf("队列元素: ");
Queue_Print(Q);
ElemType x;
Queue_De(Q, &x);
printf("出队元素:%d\n", x);
printf("队列元素: ");
Queue_Print(Q);
return 0;
}