队列介绍
队列(Queue):具有先进先出 FIFO(first in first out)的特点
基本操作
0.初始化队列
1.向队列添加元素
2.剔除队头元素
3.判断是否为空
4.判断是否为满
5.遍历队列
基本操作的实现
初始化队列
int maxSize;//最大容量
int front;//队头元素的下标,初始值为-1,始终指向队列首元素的前面
int rear;//队尾元素的下标,初始值为-1
int []array;//模拟队列
public Queue(int maxSize) {
this.maxSize = maxSize;//最大容量
this.front = -1;
this.rear = -1;
this.array = new int[maxSize];//数组模拟队列
}
注意:对头指针和队尾指针最开始指向的都是队头的前一位
判断是否为空和满
满:maxsize-1=rear
空:front=rear
public boolean isEmpty()
{
if(front==rear)
return true;
else return false;
}
public boolean isFull()
{
if(maxSize-1==rear)
return true;
else return false;
}
向队列中添加元素
public void addEmelent(int element)
{
if(isFull())
throw new RuntimeException("队列满");
rear++;//队尾指针向后移动一位
array[rear]=element;
}
取对头元素
public void deleteEmelent()
{
if (isEmpty())
throw new RuntimeException("队列空");
System.out.println("删除了"+array[front+1]);
front++;
}
遍历队列
public void show()
{ //注意开始循环的条件是front不是0,结束循环的条件是rear不是array.length
//因为队头指针指向的是队头元素的前一位,所以循环的时候要front+1
for (int i = front+1; i <= rear; i++) {
System.out.print(array[i]+"\t");
}
System.out.println();
}
总结
优点
1.队列是先进先出 FIFO(first in first out)
2.有两个指针,front队头指针 rear队尾指针
3.队头指针指向的永远是第一个有效元素的前一位,队尾指针指向的是最后一个有效元素
3.队列空:front=rear 队列满:maxsize-1=rear(因为下标是从0开始的所以最大下标为maxsize-1)
4.向队列加元素是队尾指针向后移动,队头指针不动。删除队头元素是队头指针后移一位,队尾指针不动。
缺点
当队头指针和队尾指针指在一起时,即使有空闲空间也不可以先队列中添加元素了,此时就可以使用循环队列了