数据结构队列学习

引入

众说周知,在队列的题目中,队头指针(front)和队尾指针(rear)有两种指示方法。

(1)队头指针

①指向队头元素

②指向队头元素元素的前一个位置

(2)队尾指针

①指向队尾元素

②指向队尾元素的后一个位置

指示方法不同元素入队和出队操作也不同,但是在做大部分题目的时候,我们并不需要分析队头指针和队尾指针具体操作,我们只要记住下面两个结论就行

结论

结论一:当队列执行元素入队操作时,队尾指针(rear)向后移(rear++),队头指针(front)不变

结论二:当队列执行元素出队操作时,队头指针(front)向后移(front++),队尾指针(rear)不变

实战

例1

若用数组A [ 0...5 ] A[0...5]A[0...5]来实现循环队列,且当前rear和front的值分别是1和5,当从队列中删除一个元素,再加入两个元素,rear和front指针的值分别为

根据结论一,队列中删除一个元素就是进行元素出队操作,所以front指针后移,rear指针不变,由于是循环队列所以front指针往后移值为0

根据结论二,队列中加入元素就是进行元素入队操作,所以rear指针后移,front指针不变,两次就是rear指针后移两步,1->2->3,所以rear指针值为3

例2

【2011统考真题】已知循环队列存储一维数组A [ 0... n − 1 ] A[0...n-1]A[0...n−1]中,且队列非空时front和rear分别指向队头元素和队尾元素。若初始时队列为空,且要求第一个进入队列的元素存储在A[0]处,则初始时front和rear的值分别是

我们假设元素已存入A [ 0 ] A[0]A[0]中,那么根据题意队列非空时front和rear分别指向队头元素和队尾元素,front和rear都为0 。由于元素入队的时候只有rear指针后移,我们把rear指针回退到元素入队之前的情况,由于是循环队列,所以0前面就是n-1,元素入队时front指针不变。

所以初始时front指向0,rear指向n-1

例3

【2014统考真题】循环队列放在一维数组A [ 0... M − 1 ] A[0...M-1]A[0...M−1]中,end1指向队头元素,end2指向队尾元素后一个位置。假设队列两端均可进行入队和出队操作,队列中最多能容纳M − 1 M-1M−1个元素。初始时为空。则判断队空和对满的条件为

我们假设在一个空队列中将一个元素入队,存在A [ 0 ] A[0]A[0]中,那么根据题意此时end1的值为0,end2的值为1,模仿上一题的回退思路,end2回退,所以队空的时候end1和end2的值均为0,所以队空的判断条件为 end1==end2;

因为队列中最多容纳M − 1 M-1M−1个元素,有一个空间空出来,所以队满的时候,end1指向队头元素(它前面就是空出来的位置),end2指向队尾元素后一个位置,就是空出来的位置,所以判断条件为 end1==(end2+1)%M;

相关推荐
TM1Club4 小时前
AI驱动的预测:新的竞争优势
大数据·人工智能·经验分享·金融·数据分析·自动化
Tingjct6 小时前
【初阶数据结构-二叉树】
c语言·开发语言·数据结构·算法
C雨后彩虹6 小时前
计算疫情扩散时间
java·数据结构·算法·华为·面试
飞机和胖和黄7 小时前
考研之王道C语言第三周
c语言·数据结构·考研
醉颜凉7 小时前
【LeetCode】打家劫舍III
c语言·算法·leetcode·树 深度优先搜索·动态规划 二叉树
达文汐7 小时前
【困难】力扣算法题解析LeetCode332:重新安排行程
java·数据结构·经验分享·算法·leetcode·力扣
一匹电信狗7 小时前
【LeetCode_21】合并两个有序链表
c语言·开发语言·数据结构·c++·算法·leetcode·stl
Gorgous—l7 小时前
数据结构算法学习:LeetCode热题100-多维动态规划篇(不同路径、最小路径和、最长回文子串、最长公共子序列、编辑距离)
数据结构·学习·算法
中屹指纹浏览器8 小时前
中屹指纹浏览器底层架构深度解析——基于虚拟化的全维度指纹仿真与环境隔离实现
经验分享·笔记
一条大祥脚8 小时前
26.1.26 扫描线+数论|因子反演+子序列计数|树套树优化最短路
数据结构·算法