队列满、队列空的判断
程序员文章站
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表示队列空
当然,队列也可以用链式存储结构。 上一篇: 数据结构——顺序栈
下一篇: 手写一个简单的栈,队列和单向链表