循环队列入队操作实现算法 - C语言代码示例
循环队列入队操作实现算法 - C语言代码示例
定义:
为了区分循环队列的空和满状态,我们通常使用一个标志域 flag 来标记。当 flag 为 0 时,队列为空;当 flag 为 1 时,队列为非空。
代码实现:
#define MaxQSize 10
typedef struct {
ElemType *base;
int front;
int rear;
Status flag;
} Queue;
Status EnQueue(Queue &q, ElemType e) {
if (q.flag == 1 && q.front == q.rear) { // 队列已满
return ERROR;
}
q.base[q.rear] = e; // 新元素入队
q.rear = (q.rear + 1) % MaxQSize; // 队尾指针后移一位
q.flag = 1; // 设置队列为非空状态
return OK;
}
代码解释:
if (q.flag == 1 && q.front == q.rear):判断队列是否已满。当flag为 1 且front等于rear时,表示队列已满。q.base[q.rear] = e:将新元素e插入到队尾位置。q.rear = (q.rear + 1) % MaxQSize:队尾指针后移一位,并使用模运算保证队尾指针始终在队列范围内。q.flag = 1:将flag设置为 1,表示队列非空。
总结:
本代码示例演示了循环队列入队操作的实现方法,并使用标志域 flag 来区分队列的空和满状态。通过判断 flag 和 front、rear 指针的关系,可以准确地判断队列是否已满。
原文地址: https://www.cveoy.top/t/topic/nIID 著作权归作者所有。请勿转载和采集!