数据结构07:队列(02)

77 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第9天,点击查看活动详情

在上一篇中,我们设计了一个基于顺序表实现的队列。我们分别实现了队列的添加删除获取长度三个方法。但这个队列还存在诸多问题,在本篇中我们将逐步骤完善队列的这些方法。

基于顺序表的队列实现

上一篇中,我们实现了添加删除方法,但是这有一个问题,基于顺序表实现的队列的元素是存储在一个数组里的,而我们在上一篇中并没有对头指针headIndex、尾指针endIndex做任何限制,所以当我们存取元素的数量超过数组的长度时,就会出现异常。同时,这个队列还有个问题,就是他能存取的次数被他的长度所限制了,当存取达到length次后,这个队列就无法使用了。

在本篇中,我们将完善这个队列。

循环队列

当使用线性表的顺序表示实现队列时,由于按照先进先出的原则,队列的队尾一直不断的添加数据元素,队头不断的删除数据元素。由于数组申请的空间有限,到某一时间点,就会出现endIndex队列尾指针到了数组的最后一个存储位置,如果继续存储,由于endIndex指针无法后移,就会出错。

我们可以使用循环队列,来解决这个问题。循环队列顾名思义,它元素的添加和删除是在数组中"循环"着的。若是我们现在有一个长度为5的队列,在经过5次添加、2次取出后队列中只有下标为{2, 3, 4}的位置有元素,而下标为{0, 1}的位置则是空着的,所以我们可以将新添加的元素放到{0,1}位置上去。而这,就是循环队列。

小结

本章完善了上篇设计的基于顺序表实现的队列,并介绍了循环队列。

天天学习,加速成长!

希望与各位一起变得越来越强!