西宁网站建设加盟代理wordpress 安装文件

张小明 2026/1/12 18:29:26
西宁网站建设加盟代理,wordpress 安装文件,肥东建设局网站,网站建设外包名词解释参考视频 5.双向链表_栈_队列_哔哩哔哩_bilibili1小时15分钟到最后#xff08;顺序队列的知识#xff09; 6.循环队列_讲题_递归_哔哩哔哩_bilibili前20分钟 题目 #include stdio.h #include string.h #include stdlib.h#define ElemType char #…参考视频5.双向链表_栈_队列_哔哩哔哩_bilibili1小时15分钟到最后顺序队列的知识6.循环队列_讲题_递归_哔哩哔哩_bilibili前20分钟题目#include stdio.h #include string.h #include stdlib.h #define ElemType char #define NumSize 100 typedef struct { ElemType dat[NumSize]; //顺序队列 int real,front; //队列首、尾指针 }QueueList; int initQueueList(QueueList *Q) //初始化顺序栈 { Q-real 0; Q-front 0; return (1); } int LengthQueueList(QueueList Q) //求队列的长度 { int i; i (Q.real - Q.front NumSize) % NumSize; //求队列中数据的总长度 return(i);//返回队列数据的总数 说明队列中数据总数 最大值 - 1 表明队列满 } int ListQueueEmpty(QueueList Q) { if(Q.real Q.front ) { return(0); //队列空返回0 } return (1);//不空返回1 } int ENQueueList(QueueList *Q,ElemType x)//数据入队 { if((Q-real 1) % NumSize Q-front) { printf(队列满失败\n); return 0;//队列满返回0 } Q-dat[Q-real] x;//x入队 Q-real ( Q-real 1)% NumSize; //队尾指针加1 return (1);//入队成功返回1 } /* 本题要求子函数——出队列 */ int DeQueueList(QueueList *Q,ElemType *x); int main(void) { int i; ElemType x; QueueList q;//定义队列q initQueueList(q);//初始化队列 // 输入11个字符的字符串 for (i 0; i 11; i)//数据入队列 { x getchar(); ENQueueList(q, x); } i 0; while (LengthQueueList(q) ! 1) //队列中数据个数据不为1循环执行 { DeQueueList(q, x); i; if (i 3) ENQueueList(q, x); else { i 0; printf(%c,x);//出列的数据元素一个一个地显示出来 } } DeQueueList(q, x);//最后一个数据出队 且出队数据放到x中 printf(%c, x);//显示最后一个数据元素 return 0; } /* 请在这里填写答案 */解析普通的循环队列的出队解决这个需要队列的前置知识建议参考视频和下面笔记答案int DeQueueList(QueueList *Q,ElemType *x){ if(Q-frontQ-real){ return 0; } *xQ-dat[Q-front]; Q-front(Q-front1)%NumSize; return 1; }前置知识一、队列的核心概念1. 基本定义队列是一种线性数据结构只允许在队尾Rear插入新元素入队在队头Front删除元素出队整体遵循 “先进先出FIFO, First In First Out” 原则。可以类比生活中的排队先到的人先办理业务后到的人只能排在队尾。2. 核心特点操作受限仅支持两端操作队尾入、队头出中间元素不可直接访问 / 修改顺序性元素的出队顺序与入队顺序完全一致常见分类普通顺序队列基于数组实现易出现 “假溢出” 问题循环队列对普通顺序队列的优化通过取模实现数组空间的循环利用解决假溢出。二、队列的基础结构定义无论普通顺序队列还是循环队列都可以基于数组实现先定义统一的结构体需提前宏定义数组最大容量// 宏定义队列的最大容量 #define MAXSIZE 100 // 定义队列元素类型可根据需求修改如char、int等 typedef int ElemType; // 队列的结构体定义 typedef struct Queue { ElemType data[MAXSIZE]; // 存储队列元素的数组 int front; // 队头指针指向队头元素的位置 int rear; // 队尾指针指向队尾元素的下一个位置 } Queue;关键说明front和rear初始值均为 0此时front rear表示队列为空数组data是队列的底层存储容器MAXSIZE决定队列能容纳的最大元素数。三、队列的通用基础操作1. 队列初始化功能将队列初始化为空状态是使用队列的第一步。// 初始化队列将队头、队尾指针置0 void initQueue(Queue *Q) { Q-front 0; // 队头指针归0 Q-rear 0; // 队尾指针归0 }可视化展示假设MAXSIZE5初始化后队列的状态如下□表示空位置front/rear用箭头标注位置plaintext数组索引 0 1 2 3 4 data □ □ □ □ □ ↑ front ↑ rear说明初始化后Q-front Q-rear这是判断队空的核心条件。2. 队列判空功能判断队列是否为空为空返回 1非空返回 0新手易混淆返回值逻辑需注意。// 判空函数front rear 代表队空 int isEmpty(Queue *Q) { if (Q-front Q-rear) { return 1; // 队空返回1 } else { return 0; // 队非空返回0 } }四、循环队列的核心操作解决假溢出普通顺序队列的 “假溢出” 是指数组未存满但队尾指针已到数组末尾无法继续入队。循环队列通过 “取模运算” 让指针绕回数组开头彻底解决该问题。1. 循环队列入队功能将元素插入队尾成功返回 1队列满则返回 0新手易写错判满条件。// 循环队列入队函数 int enqueueCircular(Queue *Q, ElemType e) { // 循环队列判满条件(rear 1) % MAXSIZE front预留一个空位避免与队空混淆 if ((Q-rear 1) % MAXSIZE Q-front) { printf(循环队列已满入队失败\n); return 0; } // 将元素存入队尾指针指向的位置 Q-data[Q-rear] e; // 队尾指针后移取模实现“循环”超出数组长度则绕回开头 Q-rear (Q-rear 1) % MAXSIZE; return 1; // 入队成功 }可视化展示以MAXSIZE5为例初始状态front0rear0队列为空入队元素 1data[0]1rear(01)%51plaintext数组索引 0 1 2 3 4 data 1 □ □ □ □ ↑ ↑ front rear继续入队 2、3、4rear4plaintext数组索引 0 1 2 3 4 data 1 2 3 4 □ ↑ ↑ front rear此时队未满(41)%50 front才满再入队 5data[4]5rear(41)%50plaintext数组索引 0 1 2 3 4 data 1 2 3 4 5 ↑ ↑ front rear(rear0)此时(rear1)%51 ! front仍可入队不此时(01)%51≠0但实际数组已存满注意循环队列预留 1 个空位判满所以上述状态中rear0时(01)%51≠front0但再入队会触发(01)%51≠0直到入队后rear4(41)%50front才判满。新手常见错误直接用Q-rear MAXSIZE判满忽略循环特性导致数组空间浪费。2. 循环队列出队功能从队头取出元素并存储到指定变量成功返回 1队空则返回 0最易踩指针移动错误。// 循环队列出队函数 int dequeueCircular(Queue *Q, ElemType *e) { // 先判断队列是否为空 if (Q-front Q-rear) { printf(循环队列为空出队失败\n); return 0; } // 取出队头元素 *e Q-data[Q-front]; // 队头指针后移取模实现循环核心新手易漏1 Q-front (Q-front 1) % MAXSIZE; return 1; // 出队成功 }可视化展示承接上述入队 5 后的状态front0rear0不入队 5 后是front0rear0修正入队 1、2、3、4 后rear4入队 5 后data[4]5rear(41)%50此时状态plaintext数组索引 0 1 2 3 4 data 1 2 3 4 5 ↑ ↑ front(0) rear(0)出队元素 1*e1front(01)%51plaintext数组索引 0 1 2 3 4 data 1 2 3 4 5 ↑ ↑ front(1) rear(0)再出队元素 2*e2front(11)%52plaintext数组索引 0 1 2 3 4 data 1 2 3 4 5 ↑ ↑ front(2) rear(0)此时队仍非空front≠rear可继续出队直到front0且rear0时队空。新手致命错误仅写Q-front Q-front % MAXSIZE未加 1导致队头指针永远不移动重复取出同一个元素。五、普通顺序队列处理假溢出普通顺序队列不做循环处理队尾指针到达数组末尾后需通过 “元素前移” 利用队头空出的空间解决假溢出问题。1. 假溢出调整函数功能当队尾越界但队头有空位时将所有元素前移空出开头空间。// 假溢出调整前移元素复用队头空出的空间 int adjustQueue(Queue *Q) { if (Q-front 0) { // 队头有空闲空间 int step Q-front; // 前移的步数 // 将元素从front位置移到数组开头 for (int i Q-front; i Q-rear; i) { Q-data[i - step] Q-data[i]; } // 更新指针队头归0队尾同步前移 Q-front 0; Q-rear Q-rear - step; return 1; // 调整成功 } else { printf(队列真满无空间可调整\n); return 0; // 数组完全存满调整失败 } }可视化展示假溢出调整假设MAXSIZE5初始入队 1、2、3 后出队 1、2状态如下plaintext数组索引 0 1 2 3 4 data □ □ 3 □ □ ↑ ↑ front2 rear3此时入队 4、5rear5超出MAXSIZE5触发假溢出调整stepfront2元素前移 2 步data[0]3、data[1]4、data[2]5指针更新front0rear3调整后状态plaintext数组索引 0 1 2 3 4 data 3 4 5 □ □ ↑ ↑ front rear2. 普通顺序队列入队功能插入元素到队尾遇假溢出则先调整再入队。// 普通顺序队列入队处理假溢出 int enqueueNormal(Queue *Q, ElemType e) { // 队尾超出数组范围尝试调整 if (Q-rear MAXSIZE) { if (!adjustQueue(Q)) { // 调整失败则入队失败 return 0; } } // 元素入队队尾指针后移 Q-data[Q-rear] e; Q-rear; return 1; // 入队成功 }可视化展示初始状态front0rear0入队 1data[0]1rear1plaintext数组索引 0 1 2 3 4 data 1 □ □ □ □ ↑ ↑ front rear入队 2、3、4rear4plaintext数组索引 0 1 2 3 4 data 1 2 3 4 □ ↑ ↑ front rear入队 5data[4]5rear5此时rear MAXSIZEplaintext数组索引 0 1 2 3 4 data 1 2 3 4 5 ↑ front rear5越界若再入队 6触发调整但front0无空闲空间调整失败入队失败。3. 普通顺序队列出队功能从队头取出元素并返回队空则返回错误标识0。// 普通顺序队列出队 ElemType dequeueNormal(Queue *Q) { // 判空 if (Q-front Q-rear) { printf(普通队列为空出队失败\n); return 0; // 队空返回错误标识 } // 取出队头元素队头指针后移 ElemType e Q-data[Q-front]; Q-front; return e; // 返回出队元素 }可视化展示承接入队 1、2、3、4、5 后的状态front0rear5出队 1e1front1plaintext数组索引 0 1 2 3 4 data 1 2 3 4 5 ↑ ↑ front1 rear5出队 2e2front2plaintext数组索引 0 1 2 3 4 data 1 2 3 4 5 ↑ ↑ front2 rear5此时数组前 2 个位置空出但rear5仍越界再入队需触发假溢出调整。六、新手常见错误避坑指南循环队列指针移动出队时必须front (front 1) % MAXSIZE仅取模不加 1 会导致指针静止判满 / 判空混淆循环队列判满是(rear1)%MAXSIZE front判空是front rear新手易颠倒普通队列假溢出直接认为rear MAXSIZE就是队满忽略队头空出的空间指针操作未判空调用出队函数前未检查队列是否为空导致访问无效元素。总结队列的核心是 “先进先出”循环队列通过取模解决普通顺序队列的假溢出问题是实际开发中更常用的实现方式循环队列的关键是指针的 “循环移动”取模运算判满需预留一个空位避免与判空条件冲突通过可视化能清晰看到指针的移动规律普通顺序队列需通过元素前移处理假溢出但效率低于循环队列仅适用于简单场景初始化、入队、出队的可视化能直观体现指针与数组元素的关系是理解队列逻辑的关键新手需重点掌握指针的更新规则。手写笔记如下图所示rear指向队尾元素的下一个顺序队列易出现假溢出所以有了循环队列下面图片解释假溢出和入队循环队列解决了上述问题
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

湖州站内优化seo公司广州番禺发布最新通告

终极指南:OpenAI Translator跨平台安装全解析 【免费下载链接】openai-translator 项目地址: https://gitcode.com/gh_mirrors/ope/openai-translator 想要快速上手强大的OpenAI Translator翻译工具吗?这份完整的跨平台安装指南将带你从零开始&a…

张小明 2026/1/11 11:50:34 网站建设

产品推广步骤网站seo批量查询工具

如何用SMBus精准控制热插拔?从原理到实战的完整指南你有没有遇到过这样的场景:在服务器机房更换一块电源模块时,刚插进去就“啪”地一声跳闸,整个机柜电压一抖,旁边正在运行的设备差点重启?这并不是偶然——…

张小明 2026/1/11 11:50:32 网站建设

天津建设工程网站wordpress getvar

Linux网络安全:连接层、入侵检测与防护工具 1. 连接层(Connection Layer) 连接层运行在用户认证层之上,它允许在单个SSH连接上打开安全通道。这些通道可用于多种服务,如现有协议和新协议的透明隧道传输。连接层提供交互式登录会话、远程命令执行、转发TCP/IP连接以及转发…

张小明 2026/1/11 11:50:30 网站建设

青岛网站建设谁家好一些建设企业网站小微

5步快速上手GPT-2 XL:从零开始的AI写作实战指南 【免费下载链接】gpt2-xl 项目地址: https://ai.gitcode.com/hf_mirrors/ai-gitcode/gpt2-xl 还在为复杂的AI模型部署而头疼吗?🤔 想要快速掌握强大的文本生成能力却不知从何入手&…

张小明 2026/1/11 11:50:28 网站建设

外贸soho建站北海网站开发

价值主张当用户在DeepSeek询问“智能生产线解决方案”,或在Kimi咨询“连锁门店数字化转型案例”时,AI的回答将直接决定哪些品牌进入决策视野。传统SEO依赖的关键词排名与链接权重,在生成式AI基于语义理解和知识可信度生成答案的新范式下&…

张小明 2026/1/11 11:50:27 网站建设

在线网页游戏网站做期货的一般看什么网站

如何用Kotaemon减少90%的大模型无效Token消耗? 在当前大语言模型(LLM)广泛落地的浪潮中,企业对AI系统的期待早已超越“能回答问题”这一基础能力。智能客服、知识助手、内部办公自动化等场景下,系统不仅要准确可靠&…

张小明 2026/1/12 7:26:14 网站建设