循环队列入队操作实现算法 - 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;
}

代码解释:

  1. if (q.flag == 1 && q.front == q.rear):判断队列是否已满。当 flag 为 1 且 front 等于 rear 时,表示队列已满。
  2. q.base[q.rear] = e:将新元素 e 插入到队尾位置。
  3. q.rear = (q.rear + 1) % MaxQSize:队尾指针后移一位,并使用模运算保证队尾指针始终在队列范围内。
  4. q.flag = 1:将 flag 设置为 1,表示队列非空。

总结:

本代码示例演示了循环队列入队操作的实现方法,并使用标志域 flag 来区分队列的空和满状态。通过判断 flagfrontrear 指针的关系,可以准确地判断队列是否已满。

循环队列入队操作实现算法 - C语言代码示例

原文地址: https://www.cveoy.top/t/topic/nIID 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录