队列满、队列空的判断


      对于队列来说,根据队列先进先出的特点,在使用顺序存储结构时,可能会出现假溢出现象:队列每运行一次插入,sq->r(指队列尾元素的下一个元素)就增加1;每运行一次删除,sq->f(指队列头的元素)也增加1,这使得被删除的空间永远也用不到。为了解决假溢出的问题,要使用环形队列,即把数组sq->q[MAXNUM]从逻辑上看成一个环,即规定sq->q[0]是sq->q[MAXNUM-1]的下一个元素。当sq->q[MAXNUM-1]已经插入有元素,把sq->r置成0,在元素插入时,就插到sq->q[0]的位置上,这样使得被删除的元素再被使用,但是如果之前没有元素被删除,这一元素的插入使得sq->r和sq->f重合,不能判断队列时满还是空。因此,为了区分队列满和队列空,一般是牺牲一个结点,当队列中已有 MAXNUM-1 个结点时就称满,再插入就发生溢出。

       因此,判断队列满时用

(sq->r + 1)%MAXNUM ==sq->f    //返回1表示队列满


       判断队列空时用

sq->f == sq->r                //返回1表示队列空
       当然,队列也可以用链式存储结构。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值