#include <stdio.h>
#include <stdlib.h>
// 定义队列数据类型
typedef int DataType;
// 循环队列结构体(增加 flag 区分空/满)
typedef struct SeqQueue {
int MAXNUM; // 队列最大容量
int f, r; // f=队头,r=队尾
int flag; // 标志位:0=最后出队,1=最后入队
DataType *data; // 数据数组
} *PSeqQueue;
PSeqQueue createEmptyQueue_seq(int m) {
// 分配队列头空间
PSeqQueue paqu = (PSeqQueue)malloc(sizeof(struct SeqQueue));
// 分配数组空间
paqu->data = (DataType*)malloc(m * sizeof(DataType));
paqu->MAXNUM = m;
paqu->f = paqu->r = 0; // 队头队尾都指向 0
paqu->flag = 0; // 初始为空,标记最后一次是出队
return paqu;
}
int IsEmptyQueue_seq(PSeqQueue paqu) {
// 空:f==r 且 flag=0
if (paqu->f == paqu->r && paqu->flag == 0)
return 1; // 是空
else
return 0; // 非空
}
int IsFullQueue_seq(PSeqQueue paqu) {
// 满:f==r 且 flag=1
if (paqu->f == paqu->r && paqu->flag == 1)
return 1; // 满
else
return 0; // 不满
}
int enQueue_seq(PSeqQueue paqu, DataType x) {
// 满了不能入队
if (IsFullQueue_seq(paqu)) {
printf("队列已满!\n");
return 0;
}
// 放入队尾
paqu->data[paqu->r] = x;
// 队尾后移(循环)
paqu->r = (paqu->r + 1) % paqu->MAXNUM;
paqu->flag = 1; // 入队 → flag=1
return 1;
}
int deQueue_seq(PSeqQueue paqu) {
// 空不能出队
if (IsEmptyQueue_seq(paqu)) {
printf("队列为空!\n");
return 0;
}
// 队头后移(循环)
paqu->f = (paqu->f + 1) % paqu->MAXNUM;
paqu->flag = 0; // 出队 → flag=0
return 1;
}