数据结构——队列的顺序存储实现(循环队列)

队列的顺序储存结构概念

队列的顺序存储结构通常是由一个静态数组和一个记录队列头元素位置的变量front以及一个记录队列尾元素的下一个位置的变量rear组成,因为数组的空间大小在创建时就已经确立了,所以顺序存储结构还存储了队列的最大容量maxsize

假设一开始我们将front和rear两个变量置为0,每次将元素入队后rear都会加一,那么当rear=maxsize时就可以判断队列为满吗?显然我们忽略了一个重要的东西:front一定为0吗?,如果我们一开始将几个元素入队(入队在队尾入),然后再出队(出队是在队头出)那么front就会++,不会再指向0,然后再往队列里面插入元素,当rear=maxsize时如果还有元素要插入的话就会造成数组越界(从下标为0开始,最大下标为maxsize-1),但是front(front不为0)之前还有位置是空的还可以再插入数据,此时怎么将数据插入到下标为0的位置呢?

我们可以用pq->rear = (pq->rear + 1) % pq->maxsize这个式子,当rear==maxsize-1时执行这条语句后rear就会变成0,也就是说将数组最大下标为maxsize-1的位置插入数据后,下一个要插入数据的位置就变成了0,这样就完美解决了数组越界问题,队列也变成了循环队列。同理,每次出队时front都会加一,当从数组最大下标位置(maxsize-1)出队后front就会回到0这个位置,可以推出式子为:pq

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值