持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第9天,点击查看活动详情。
在上一篇中,我们设计了一个基于顺序表实现的队列。我们分别实现了队列的添加
、删除
、获取长度
三个方法。但这个队列还存在诸多问题,在本篇中我们将逐步骤完善队列的这些方法。
基于顺序表的队列实现
上一篇中,我们实现了添加
、删除
方法,但是这有一个问题,基于顺序表实现的队列的元素是存储在一个数组里的,而我们在上一篇中并没有对头指针headIndex
、尾指针endIndex
做任何限制,所以当我们存取元素的数量超过数组的长度时,就会出现异常。同时,这个队列还有个问题,就是他能存取的次数被他的长度所限制了,当存取达到length
次后,这个队列就无法使用了。
在本篇中,我们将完善这个队列。
循环队列
当使用线性表的顺序表示实现队列时,由于按照先进先出的原则,队列的队尾一直不断的添加数据元素,队头不断的删除数据元素。由于数组申请的空间有限,到某一时间点,就会出现endIndex
队列尾指针到了数组的最后一个存储位置,如果继续存储,由于endIndex
指针无法后移,就会出错。
我们可以使用循环队列
,来解决这个问题。循环队列
顾名思义,它元素的添加和删除是在数组中"循环"
着的。若是我们现在有一个长度为5的队列,在经过5
次添加、2
次取出后队列中只有下标为{2, 3, 4}
的位置有元素,而下标为{0, 1}
的位置则是空着的,所以我们可以将新添加的元素放到{0,1}
位置上去。而这,就是循环队列。
小结
本章完善了上篇设计的基于顺序表实现的队列,并介绍了循环队列。
天天学习,加速成长!
希望与各位一起变得越来越强!