队列:只能一端进行出栈一端进行进栈。
队首:只允许进行出栈操作,可以进行删除。
队尾:只允许进行入栈操作,可以进行插入。
队尾进,队尾出,先进先出。
所以队列的实现也有两种形式,一种是数组实现队列,一种是用链表实现队列。
首先是用数组来实现队列。
使用数组队列,因为在删除时front会越来越大,所以最后会出现一种还有空间但是却显示无空间的现象。
解决方法:
构建循环队列,算法为:
判断是否队满:(rear+1)%a.length==front //如果相等的话则证明队列已满
rear=(rear+1)%a.length; //创建循环
实现代码:
public class Queue {
private static final int defaultSize = 10;
private Node[] a;
private int rear;
private int front;
Queue(){ //默认构造方法
a = new Node[10];
rear = 0;
front = 0;
}
Queue(int n){ //指定队列长度的构造方法
a = new Node[n];
rear = 0;
front = 0;
}
public boolean add(Node node){ //在队尾增加队列节点
if((rear+1) % a.length == front ) //检测该对列是否已经满了
return false;
else{
a[rear] = node;
rear = (rear+1) % a.length; //构建循环队列
return true;
}
}
public Node remove(){ //删除对首节点
if(rear == front)
return null;
else{
Node n = a[front];
front = (front+1) % a.length;
return n;
}
}
public boolean isEmpty(){ //检测是否为空
if(rear == front)
return true;
else
return false;
}
public int size(){ //返回队列长度
return a.length;
}
}