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

队列是在一头插入,在另一头删除的线性表。

设顺序存储队列用一维数组q[n]表示,其中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[n]的队列中元素的个数可能为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标记,来区分队满队空]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值