JAVA数据结构—队列
队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列中没有元素时,称为空队列。
队列的数据元素又称为队列元素。在队列中插入一个队列元素称为入队,从队列中删除一个队列元素称为出队。因为队列只允许在一端插入,在另一端删除,所以只有最早进入队列的元素才能最先从队列中删除,故队列又称为先进先出(FIFO—first in first out)线性表。——百度
利用数组实现
class arrayqueue{
private int front;//出队时+1
private int rear;//入队时+1
private int Maxsize;//队列的大小
private int[] array;
public arrayqueue(int maxsize){
Maxsize = maxsize;
array = new int[Maxsize];
front = -1; //表示front指针指向0的前一个位置
rear = -1; //表示rear指针指向队列空间最后一个位置
}
// 判断是否为空
public boolean isEmpty(){
return front==rear;
}
// 判断是否已满
public boolean isFull(){
return rear==Maxsize-1;
}
public int add(int n){
if(isFull()){
throw new RuntimeException("队列已满");
}
return array[++rear] = n;//由于初始为-1,先使rear指针+1
}
public int get(){
if(isEmpty()){
throw new RuntimeException("队列为空");
}
return array[++front];//由于初始为-1,先使front指针+1,出队时,数据仍在数组中。
}
@Override
public String toString() {
return "arrayqueue{" +
"front=" + front +
", rear=" + rear +
", Maxsize=" + Maxsize +
", array=" + Arrays.toString(array) +
'}';
}
}