您的位置:首页 > 其它

实现循环队列为什么要使用一个空的数据位

2016-12-07 20:54 302 查看
队列是在一头插入,在另一头删除的线性表。

设顺序存储队列用一维数组q
表示,其中n为队列中元素个数,队列中元素在向量中的下标从0到n-1。设队头指针为front,队尾指针是rear,约定front指向队头元素的前一位置,rear指向队尾元素。当front等于-1时队空,rear等于n-1时为队满。由于队列的性质(“删除”在队头而“插入”在队尾),所以当队尾指针rear等于n-1时,若front不等于-1,则队列中仍有空闲单元,所以队列并不是真满。这时若再有入队操作,会造成假“溢出”。

解决办法

将队列元素向前“平移”(占用0至rear-front-1)

将队列看成首尾相连,即循环队列(0..n-1)

在循环队列下,q
的队列中元素的个数可能为0,1,2…,n-2,n-1,n共n+1中可能性(0表示队空,n表示队满),但是rear-front(尾指针和头指针下标的差值)的结果只可能是0,1,2…,n-2,n-1共n种结果,因此,没办法使用n中结果去对应n+1中可能性,只能使用一个空的数据位来实现循环队列。

[注:也可以使用flag标记,来区分队满队空]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  循环队列