ASP net网站开发资料,佛山公共交易资源平台,数据交易网站开发,广西壮族自治区住房和城乡建设厅网站一#xff1a;题目 二#xff1a;思路讲解
前提#xff1a;
a#xff1a;本文采取数组来实现队列去解决题目
b#xff1a;开辟k1个空间#xff0c;front指向队首#xff0c;rear指向队尾的后一个#xff0c;rear这样会更好的判空和判满
以下根据pop和push感受满和空…一题目 二思路讲解
前提
a本文采取数组来实现队列去解决题目
b开辟k1个空间front指向队首rear指向队尾的后一个rear这样会更好的判空和判满
以下根据pop和push感受满和空以及所有的边界的处理
1初始状态 解释当front rear 即空
2 push 1 2 3 4 解释此时就是满了那再push一个5会怎样
3在满的情况push 5 解释得到判满条件rear1%k1 front当rear的下一个就是front的时候就代表满了
Q为什么不直接rear1 front
A这只适用于rear在数组非末尾位置的时候而上面的表达式均适用
4pop 1 2 5push5 6
解释rear的边界处理rear (rear1)%(k1)
6在满的情况下 push 7 解释这是rear在非末尾的位置的判满 rear1%k1 front同样适用
7pop 3 4 5 6 得到空 解释
1可得只要rear和front相等就是空
2front的边界处理 front front%k1
总结
通过这几步我们可知满和空的判断表达式 以及front和rear超过边界的处理表达式
满rear1%k1 frontrear 的下一个是front就是满
空front rear
rear超过边界rear (rear)%(k1)
front超过边界front front%k1
边界处理就是下标取模数组空间 最后一个边界处理取队尾数据 当rear下标为0 的时候这时候取队尾rear-1 会等于-1所以需要处理
1三目操作符 rear rear0k:rear
2取模rear reark%k1
这两种方法都适用与所有的取队尾 三代码展示及其解释
1初始化 解释定义我们需要的值
2 MyCircularQueue(k): 构造器设置队列长度为 k 。 解释malloc k1个整形的数组空间给a
3isEmpty(): 检查循环队列是否为空 解释根据我们前文的判空表达式
4isFull(): 检查循环队列是否已满 解释根据我们前文的判满表达式
5enQueue(value): 向循环队列插入一个元素。如果成功插入则返回真。 解释
先判满满了则无法插入返回false
有空间根据前文插入到下标为rear处再rear要
最后再通过rear的边界的处理的表达式处理rear
6deQueue(): 从循环队列中删除一个元素。如果成功删除则返回真。 解释
先判空空了则无法删除返回false
能删直接front
最后再通过front的边界的处理的表达式处理front
7Front: 从队首获取元素。如果队列为空返回 -1 。 解释直接返回front处的数据
8Rear: 获取队尾元素。如果队列为空返回 -1 。 解释通过的前文的取队尾的rear的处理表达式来取队尾
1三目操作符 rear rear0k:rear
2取模rear reark%k1
我用的第二种方法
9 销毁队列 解释先free a 再free obj