队列的应用场景和介绍
- 队列是一个有序列表,可以用数组或者是链表来实现
- 先入先出
- 示意图
数组模拟队列
- 判断还能够存放数据:rear < maxsize -1;
- 判断队列为空:rear == front
- 加一个元素:rear + 1
注意:
- rear:指向最后一位元素的下一个位置
- front:第一个存放数据的位置
//使用数组模拟队列-编写一个ArrayQueue类
class ArrayQueue{
private int maxSize;
private int front;//第一个存放数据的位置
private int rear;//指向最后一位元素的下一个位置
private int[] shuzu = new int[maxSize];
//此处由于有的front初始化是0,有的是-1,此处作初始化为0 处理
public ArrayQueue(int maxSize, int front, int rear, int[] shuzu) {
this.maxSize = maxSize;
this.front = front;
this.rear = rear;
this.shuzu = shuzu;
}
/**
* 往数队列中添加一个元素,注意需要判断队列是否满
* @param i:需要添加的元素
*/
public void addQueue(int i){
if(!isFull()){
shuzu[rear] = i;
rear += 1;
}else{
System.out.println("队列满了,无法加入数据");
}
}
/**
* 判空
* @return
*/
public boolean isEmpty(){
return front == rear? true : false;
}
/**
* 判满
* @return
*/
public boolean isFull(){
return rear >= maxSize? true : false;
}
/**
* 移除队首元素,注意要判断队列空
*/
public void removeQueue(){
if(isEmpty()){
System.out.println("队列为空");
}else{
shuzu[front] = 0;
front = front + 1;
}
}
public void print(){
for (int i = front;i < rear;i++){
System.out.printf(shuzu[i]+"\t");
}
}
}
普通队列的缺陷
队列使用一次就再也不能用了,有空位却不能存