#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#define MAX_SIZE 100 // 假设队列的最大长度为100
// 队列结构体
typedef struct {
int data[MAX_SIZE]; // 存储队列元素的数组
int front; // 队头指针
int rear; // 队尾指针
} SeqQueue;
// 初始化队列
void InitQueue(SeqQueue *q) {
q->front = 0;
q->rear = 0;
}
// 判断队列是否为空
bool IsEmpty(SeqQueue *q) {
return q->front == q->rear;
}
// 判断队列是否已满
bool IsFull(SeqQueue *q) {
return (q->rear + 1) % MAX_SIZE == q->front;
}
// 入队操作
bool Enqueue(SeqQueue *q, int e) {
if (IsFull(q)) {
printf("队列满了\n");
return false;
}
q->data[q->rear] = e;
q->rear = (q->rear + 1) % MAX_SIZE; // 循环队列的尾指针更新
return true;
}
// 出队操作
bool Dequeue(SeqQueue *q, int *e) {
if (IsEmpty(q)) {
printf("队列是空的\n");
return false;
}
*e = q->data[q->front];
q->front = (q->front + 1) % MAX_SIZE; // 循环队列的头指针更新
return true;
}
// 获取队列长度
int GetQueueLength(SeqQueue *q) {
if (q->rear >= q->front) {
return q->rear - q->front;
} else {
return MAX_SIZE - q->front + q->rear; // 处理循环队列的边界情况
// return (q->rear - q->front + MAX_SIZE) % MAX_SIZE;
}
}
// 打印队列元素
void PrintQueue(SeqQueue *q) {
int i;
for (i = q->front; i != q->rear; i = (i + 1) % MAX_SIZE) {
printf("%d ", q->data[i]);
}
printf("\n");
}
int main() {
// 声明一个顺序队列变量q
SeqQueue q;
// 初始化队列q
printf("初始化队列...\n");
InitQueue(&q);
// 入队几个元素
printf("将元素1入队...\n");
Enqueue(&q, 1);
printf("将元素2入队...\n");
Enqueue(&q, 2);
printf("将元素3入队...\n");
Enqueue(&q, 3);
printf("将元素4入队...\n");
Enqueue(&q, 4);
printf("将元素5入队...\n");
Enqueue(&q, 5);
// 打印当前队列中的元素
printf("当前队列中的元素:\n");
PrintQueue(&q);
// 出队一个元素,并将出队的元素存储在变量e中
int e;
if (Dequeue(&q, &e)) { // 如果出队成功
printf("出队元素:%d\n", e);
}
// 再次打印队列,以展示元素已被移除
printf("出队后的队列:\n");
PrintQueue(&q);
// 判断队列的长度并打印
printf("队列长度:%d\n", GetQueueLength(&q));
// 判断队列是否为空并打印结果
printf("队列是否为空?%s\n", IsEmpty(&q) ? "是" : "否");
// 程序正常结束
return 0;
}
运行结果: