1.队列的逻辑结构
a)定义:只允许在表的一端进行插入,另一端进行删除的线性表,进行插入的一端叫队尾,进行删除的一端叫队头,没有数据元素时称为空队列。
b)特征:先进先出
c)抽象数据类型
i.数据元素:同属一类的任意类型对象
ii.数据结构:线性结构,队头无前驱,队尾无后继
iii.数据操作:定义在IQueue中
publicinterfaceIQueue {
booleanenqueue(Ee);//入栈
E dequeue();//出栈
E peek();//去对头元素
intsize();//返回队长
booleanisEmpty();//判断是否空队
booleanifFull();//判断是否满队
}
2.队列实现之顺序队列
a)存储结构:顺序队列采用一个连续的一维数组来保存数据,队头设置在最近一个元素离开的位置front,队尾设置在最近一个元素插入的位置rear,但是如果队列设置成一个直线型的由于队尾入队和队头出对会造成“假溢出”,因此将队列设置成一个环状的。当队空时,front=rear,当队满时(rear+1)%maxsize=front,入队时,rear=(rear+1)%maxsize,出队时,front=(front+1)%maxsize,队中元素个数为(rear-front+maxsize),且数组中的下标为front的元素不存储数据
b)基本操作
i.初始化顺序队列:给定顺序队列最大存储空间大小,front和rear都设为0,size设为0;
ii.入队:将下标为rear设为(rear+1)%maxsize且对应的位置值设为指定入队元素
iii.出队:将front设为(front+1)%maxsize
iv.求队长:返回(rear-front+maxsize)%maxsize
v.判断是否满队:判断(rear+1)%maxsize==front
vi.判断是否空队:判断rear==front
c)代码实现
publicclassMySequenceQueueimplementsIQueue {
privateintsize;//队列长度
privateintmaxsize;//队列最大长度
privateintfront;//队头,指向的是将要离开的元素的前一个位置
privateintrear;//队尾
privateE[]data;
//初始化顺序队列
publicMySequenceQueue(intmaxsize) {
super();
this.size= 0;
this.maxsize=maxsize;
data=(E[])newObject[this.maxsize];
this.front= 0;
this.rear= 0;
}
//入队
@Override
publicbooleanenqueue(Ee) {
if(!this.isFull()) {
this.rear=(this.rear+1)%this.maxsize;
this.data[this.rear]=e;
returntrue;
}
returnfalse;
}
//出队
@Override
publicE dequeue() {
if(!this.isEmpty()) {
this.front=(this.front+1)%this.maxsize;
returnthis.data[this.front];
}
returnnull