1.循环队列是什么?
为充分利用向量空间,克服"假溢出"现象的方法是:将向量空间想象为一个首尾相接的圆环,并称这种向量为循环向量。存储在其中的队列称为循环队列(Circular Queue)。这种循环队列可以以单链表的方式来在实际编程应用中来实现。(来自百度百科)
怎么理解上面这段话呢?
就是说在现实生活的数个人排队办理业务,办完业务的人自然就走了,后边的人会往前顶。但是在程序设计中,代码是死的,他不会自动往前顶。因而循环队列就出现了。
2.循环队列存在的意义?
其实就是像上段话说的解决代码中数据不会自动往前顶,会出现前边已经空了,但是插不进数据的问题。
怎么解决的呢?
数据不会往前顶,但是尾部指针可以放到最前端,这样根据队列真是的长度判断数据队列是否为满。
3.代码实现
package 队列;
//循环队列
public class Queue {
private int size;
private int [] queArray;
private int head; //队头
private int tail; //队尾
private int length; //长度
//实例化类
public Queue(int size) {
this.size = size;
this.head = 0;
this.tail = -1;
this.length = 0;
}
//入队列
public void push(int value) {
if(isfull()) {
System.out.println("队列已满!!");
}else {
if(tail == size - 1) {
tail = -1;
queArray[++tail] = value;
}else {
queArray[++tail] = value;
}
}
}
//出队列
public void out() {
if(isnull()) {
System.out.println("队列已空!!");
}else {
if(head == size - 1) {
System.out.println(queArray[head]);
head = 0;
}else {
System.out.println(queArray[head]);
head ++;
}
}
}
//判断是否为空
public boolean isnull() {
if(length == 0) {
return true;
}else {
return false;
}
}
//判断是否为满
public boolean isfull() {
if(length == size) {
return true;
}else {
return false;
}
}
//获取队头元素
public int gethead() throws Exception {
if(isnull()) {
throw new Exception("队列为空!!");
}else {
return queArray[head];
}
}
}