疑难杂症:解决假上溢问题和队空队满问题

base是数组,数组是队列的元素类型

 入队,放在数组下标为尾指针rear的,如果我们定义了队列Q的话,我们在rear这里加上Q,变成Q.rear.即插入的元素放在尾指针所指的位置,然后尾指针指向下一块空间,rear++

出队时为删除元素,只能从头开始,然后头指针再往后移。

如何操作?

将我们当前头指针所指的数组元素base[front]存放在某个变量x当中,这是我们要出队的元素,然后头指针++:front++;

j3出队后,t头指针和尾指针相等,队空

下标为0到MAXSIZE-1,不能再入队了,数组下标不能再加一了

 

存在问题:真假溢出

 怎么办?让他重新回到0的位置,反复利用空间

 就像下标为0的位置接在下标为5的位置

 怎么实现?取余运算

举个例子

 

将元素放在尾指针所指的位置Q.base[Q.rear]=x,然后尾指针加1:Q.rear+1,只要他加完了以后打到MAXQSIZE,她就可以回到0了

 

 删除元素的时候也是表头来删除,s.front是下标,所以我们将表头指针所指的元素Q.base[s.front]赋值给某个变量,这就是我们要删除的元素的值

然后头指针后移,怎么后移?也是加1,Q.front+1

头指针达到最大值也让他回到0,所以取余运算

所以就可以画一个图,6个存储空间,接在一起

还有一个问题:判断队空和队满的问题

这里假设存储了3个元素,这里j6出队后,front也指到1号位置,这时两指针相等

 

如果是又三个元素入队尾,尾指针不断往后移,j9入队后,尾指针也指向了front的位置

怎么解决?对比之前栈空和栈满的情况

我们有3个方案

1.另设一个标志

2.另设一个变量count,来记录元素的个数

3.少用一个空间(常用考研等:两指针一样,怎么区别队空和队满)

一开始队空,两指针相等

队满:尾指针再加一,就和头一样了,此时两指针不重合

 

尾指针再加一,除以MAXQSIZE,取余数,如果与头指针重合,这时就是队满

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值