队列
队列介绍
队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。
- 队列是一个有序列表,可以用数 组和链表来实现
- 队列先进先出,即是先入队列的数据最先被取出,后存入的数据后取出。
数组模拟队列场景
创建ArrayQueue类
package queue;
//数组实现队列
public class ArrayQueue {
private int[] array;
private int maxSize;
private int frontPoint;
private int rearPoint;
public ArrayQueue(int maxSize){
this.maxSize=maxSize;
array=new int[maxSize];
frontPoint=-1;
rearPoint=-1;
}
/**
* 判断当前队列是否已满
*/
public boolean isFull(){
return rearPoint==maxSize-1;
}
/**
* 判断当前队列是否是空队列
*/
public boolean isEmpty(){
return frontPoint==rearPoint;
}
/**
* 添加元素进入队列
*/
public void add(int n){
//是否已满
if (isFull()){
System.out.println("队列已满!");
}
rearPoint++;
array[rearPoint]=n;
}
/**
* 获取队列元素并且删除该元素,出队列
*/
public int get(){
if (isEmpty()){
System.out.println("队列为空!");
}
frontPoint++;
return array[frontPoint];
}
/**
* 查看队列中的元素
*/
public void findQueue(){
if (isEmpty()){
throw new RuntimeException("空队列");
}
for (int i=0;i<array.length;i++){
System.out.printf("array[%d]=%d\n",i,array[i]);
}
}
/**
* 查看队列头部
*/
public int frontQueue(){
if (isEmpty()){
throw new RuntimeException("空队列");
}
return array[frontPoint+1];
}
}
创建测试类
package queue;
public class Test {
public static void main(String[] args) {
ArrayQueue arrayQueue=new ArrayQueue(5);
arrayQueue.add(1);
arrayQueue.add(2);
arrayQueue.add(3);
arrayQueue.add(4);
arrayQueue.add(5);
arrayQueue.findQueue();
}
}
功能测试:
入队
出队: