循环队列入队操作算法实现 - 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.front == q.rear && q.flag == 1) // 队列已满
return ERROR;
q.base[q.rear] = e; // 将元素e插入队尾
q.rear = (q.rear + 1) % MaxQSize; // 队尾指针后移一位
if (q.front == q.rear) // 队列已满
q.flag = 1;
return OK;
}
代码说明:
#define MaxQSize 10定义了队列的最大容量为 10。typedef struct {...} Queue定义了循环队列的数据结构,包含了base、front、rear和flag四个成员。Status EnQueue(Queue &q, ElemType e)函数实现入队操作。- 函数首先判断队列是否已满,如果
front和rear指针指向同一个位置,并且flag为1,则表示队列已满,返回ERROR。 - 如果队列未满,则将元素
e插入队尾,并将rear指针后移一位。 - 如果插入元素后
front和rear指针指向同一个位置,则表示队列已满,将flag设置为1。 - 最后返回
OK,表示入队操作成功。
总结:
本文介绍了循环队列的入队操作算法实现,并使用 C 语言代码演示了如何通过设置标志域 flag 来区分队列为空或满的情况。通过使用循环队列,可以有效地利用存储空间,提高程序效率。
原文地址: https://www.cveoy.top/t/topic/nIJE 著作权归作者所有。请勿转载和采集!