循环顺序队列的实现问题

问题描述:用顺序存储结构来实现队列的基本操作

涉及变量: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

 

posted @ 2019-01-24 21:34  Rewivy  阅读(582)  评论(0编辑  收藏  举报