欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

队列满、队列空的判断

程序员文章站 2024-03-18 11:30:28
...


      对于队列来说,根据队列先进先出的特点,在使用顺序存储结构时,可能会出现假溢出现象:队列每运行一次插入,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表示队列空
       当然,队列也可以用链式存储结构。