Java语言实现队列的基本操作
声明:学习笔记,仅供自己学习使用,如有雷同,纯属巧合
首先要为队列声明一个新的类,可以使用数组
public static class SqQueue{
public static final int MaxSize = 10;
int [] data = new int[this.MaxSize];
int front = 0;
int rear = 0;
}
队列有两种表示方式:
rear指向队尾元素 |
---|
rear指向队尾元素后一个位置 |
这里我们先讨论第一种方式:rear指向队尾元素
- 对一个队列进行初始化
public void InitQueue(SqQueue a){
a.front = 0;
a.rear = 0;
}
这里是实际上是把rear和front都对应上开始的位置
- 判断队列是非为空
public boolean QueueEmpty(SqQueue a){
if(a.rear == a.front)
return true;
else
return false;
}
利用rear和front是否指向同一个位置来判断队列是否为空
- 进队操作
public boolean EnQueue(SqQueue a, int x){
if(((a.rear + 1) % a.MaxSize) == a.front)
return false;
a.data[a.rear] = x;
a.rear = (a.rear + 1) % a.MaxSize;
return true;
}
- 出队操作
public boolean DeQueue(SqQueue a, int x){
if(a.rear == a.front)
return false;
x = a.data[a.front];
a.front = (a.front + 1) % a.MaxSize;
return true;
}
- 获取队头元素的值,用X返回
public boolean GetHead(SqQueue a, int x){
if(a.rear == a.front)
return false;
x = a.data[a.front];
return true;
}
- 新建队列
public void teatQueue(){
SqQueue test = null;
this.InitQueue(test);
}
本质上是SqQueue类的实例化
- 最重要的两行代码
a.rear == a.front//判空
((a.rear + 1) % a.MaxSize) == a.front//判满
这里用到了模运算符,是为了实现一个循环队列的效果,使得在出队和进队交替进行时,储存空间能够最大化利用