循环顺序队列的实现问题
问题描述:用顺序存储结构来实现队列的基本操作
涉及变量:queueElem:Object[]型变量,存放数据元素
涉及教材:《数据结构——Java语言描述(第2版)》 清华大学出版社
大致思路:
队列,一种特殊的线性表,遵循“先进先出,后进后出”原则
只允许在表头出队列,在表尾入队列
实现队列有两种方式:1.顺序存储 2.链式存储
本次采用的是顺序存储方式来实现循环队列
队列的基本操作与栈有点相似:置空,判空,求长度,陈列元素,入队列,出队列和取队首元素
队列的接口代码如下:
队列中需要两个指针位置,一个指向队首,一个指向队尾
队列为空时,两个指针指向同一个位置
但循环队列为满时,两个指针同样指向同一个位置
于是用flag来判断指针指向同一个位置前,对元素做出的操作
若为出队列,则flag=false
入队列,则flag=true
由flag的状态来判断是空或满
队列的初始化方法代码如下:
判空:两个指针指向同元素且上一个对元素做的操作为出队列
置空:根据判空条件,设置为初始状态
求长度:这里使用到了求余方式,是考虑到循环队列可能存在队尾指针下标比队首指针下标小的情况
此时若直接用rear-front会得到负数结果,于是加上队列长度再求余,其实是rear-front的绝对值
陈列元素:从队首开始依次陈列各元素,当指针不指向尾指针或队列为满时,开始陈列元素
若当队列满时,若指针指向尾指针,结束循环
入队列:顺序存储的存入都需要先判满
rear的移动要限制在[0,queueElem.length]之间,用求余来限定它的循环
出队列:需要判空,因为在置空处我们将rear和front指向了下标为0的位置,若不判空直接出队列,可能会导致空队列的输出
取队首元素:需先判空再使用,其实这里的if中的条件可以换成isEmpty(),一样的
以上是我对顺序队列的实现的一点看法,希望对各位有所帮助
190124 Rewivy