news 2026/7/11 9:58:05

笔记:数据结构(循环队列相关判断条件)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
笔记:数据结构(循环队列相关判断条件)

循环队列中,判断队列的以及长度是关键操作。以下是循环队列的相关判断条件的详细罗列:

1.判断队列是否为空

条件:队头指针front等于队尾指针rear

代码实现

Cbool IsEmpty(SqQueue Q) { return Q.front == Q.rear; }

解释

  • front == rear时,队列中没有元素,队列为空。

2.判断队列是否为满

条件:队尾指针rear的下一个位置是队头指针front,即(rear + 1) % MAXQSIZE == front

代码实现

Cbool IsFull(SqQueue Q) { return (Q.rear + 1) % MAXQSIZE == Q.front; }

解释

  • 循环队列中,为了区分队列空和队列满的情况,通常会牺牲一个元素空间。
  • (rear + 1) % MAXQSIZE == front时,队列已满。

3.计算队列的长度

条件:队列的长度为(rear - front + MAXQSIZE) % MAXQSIZE

代码实现

Cint QueueLength(SqQueue Q) { return (Q.rear - Q.front + MAXQSIZE) % MAXQSIZE; }

解释

  • rear - front可能为负数(当rear绕到front前面时),因此加上MAXQSIZE确保结果为正。
  • 通过取模运算% MAXQSIZE,确保结果在0MAXQSIZE - 1之间。

4.入队操作的条件

条件:队列未满,即(rear + 1) % MAXQSIZE != front

代码实现

CStatus EnQueue(SqQueue &Q, QElemType e) { if ((Q.rear + 1) % MAXQSIZE == Q.front) { return ERROR; // 队列已满,无法入队 } Q.base[Q.rear] = e; // 将元素插入队尾 Q.rear = (Q.rear + 1) % MAXQSIZE; // 队尾指针后移 return OK; }

解释

  • 如果队列未满,则将元素插入队尾,并将rear指针后移。
  • 通过取模运算% MAXQSIZE,确保rear指针在数组范围内循环。

5.出队操作的条件

条件:队列不为空,即front != rear

代码实现

CStatus DeQueue(SqQueue &Q, QElemType &e) { if (Q.front == Q.rear) { return ERROR; // 队列为空,无法出队 } e = Q.base[Q.front]; // 取出队头元素 Q.front = (Q.front + 1) % MAXQSIZE; // 队头指针后移 return OK; }

解释

  • 如果队列不为空,则取出队头元素,并将front指针后移。
  • 通过取模运算% MAXQSIZE,确保front指针在数组范围内循环。

6.队列的初始化

条件:队头指针front和队尾指针rear都初始化为0

代码实现

CStatus InitQueue(SqQueue &Q) { Q.base = new QElemType[MAXQSIZE]; // 动态分配数组空间 if (!Q.base) { exit(OVERFLOW); // 内存分配失败 } Q.front = Q.rear = 0; // 初始化队头和队尾指针 return OK; }

解释

  • 初始化时,队列为空,因此frontrear都指向数组的起始位置。

7.队列的销毁

条件:释放队列的存储空间,并将frontrear置为0

代码实现

CStatus DestroyQueue(SqQueue &Q) { if (Q.base) { delete[] Q.base; // 释放数组空间 } Q.front = Q.rear = 0; // 重置队头和队尾指针 return OK; }

解释

  • 销毁队列时,释放动态分配的数组空间,并将指针重置。

总结

循环队列的关键判断条件如下:

  1. 队列空front == rear
  2. 队列满(rear + 1) % MAXQSIZE == front
  3. 队列长度(rear - front + MAXQSIZE) % MAXQSIZE
  4. 入队条件:队列未满
  5. 出队条件:队列不为空

通过以上判断条件,可以确保循环队列的正确操作。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/11 9:57:54

OpenClaw机械臂实战部署:Ubuntu 22.04+飞书机器人+Qwen3.6-Plus零基础跑通指南

1. 这不是又一个“一键部署”幻觉,而是一份能让你在4月真实跑通OpenClaw的实操手记2026年4月,OpenClaw这个开源机械臂控制框架正从实验室走向创客工坊和高校创新课设现场。我上周刚帮深圳一所职校的机器人社团搭完第三套环境,学生用阿里云轻量…

作者头像 李华
网站建设 2026/7/11 9:57:39

TLP241A光隔离固态继电器与PIC18F4525微控制器的应用方案

1. 项目背景与核心价值 在工业控制和电力电子系统中,电气隔离是确保系统可靠性的关键技术。TLP241A光隔离固态继电器与PIC18F4525微控制器的组合,为解决高压侧与低压侧之间的安全隔离提供了理想方案。这种设计能有效防止地环路干扰、抑制共模噪声&#x…

作者头像 李华
网站建设 2026/7/11 9:56:36

Go 1.26.4 三平台安装方案对比:Homebrew、安装包与源码编译耗时实测

Go 1.26.4 三平台安装方案对比:Homebrew、安装包与源码编译耗时实测 在当今多平台开发环境中,Go语言的跨平台特性使其成为开发者首选之一。本文将针对macOS(Intel/Apple Silicon)、Windows和Linux三大主流平台,深度对比…

作者头像 李华
网站建设 2026/7/11 9:51:22

抖音无水印下载终极指南:免费工具3步搞定高清视频保存

抖音无水印下载终极指南:免费工具3步搞定高清视频保存 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback suppo…

作者头像 李华
网站建设 2026/7/11 9:48:43

Unity输入管理插件Rewired:多平台多玩家输入解决方案详解

1. 项目概述:为什么Unity开发者需要Rewired? 如果你在Unity里做过稍微复杂一点的输入处理,比如要同时支持键盘、鼠标、Xbox手柄、PS5手柄,甚至还想接个飞行摇杆或者跳舞毯,那你大概率已经对Unity原生的Input Manager或…

作者头像 李华