一、队列的概念:
- 队列是一个有序列表,可以用数组和链表来实现
- 遵循先进先出原则,与栈相反,栈遵循先进后出的原则
二、用数组模拟栈的思路:
- 队列的输出,输入是前后端分开处理的,因此需要俩个变量front, rear,帮助输入输出。增加数据rear指针加1,输出数据front指针加1
2.理解front和rear的变化,提供增加数据,取出数据,获取头部数据【不是取出头部数据】,显示队列的一些方法
三、代码实现:
-
定义属性:【front和rear指针初始化指向队列的最底部】
int front = -1 ; //用于输出指针 int rear = -1 ; //用于输入指针 int maxSize ; //表名队列最大容量 int array[] ; //构造器--自定义队列最大容量 public Queue(int maxSize){ this.maxSize = maxSize ; array = new int[maxSize]; }
2. 判断队列是否为空。【理解在什么情况下队列是空的。当输入指针和输出指针都指在同一个位置时,说明队列是空的】
//判断队列是否为空
public boolean isEmpty(){
return rear == front ;
}
3.判断队列是否为满
//判断队列是否满了
public boolean isFull(){
return rear == maxSize -1 ;
}
4.增加数据
//增加
public void add(int data){
if (isFull()){
System.out.println("队列已满");
return ;
}
//队列不满,增加数据
rear++ ;
array[rear] = data ;
}
5.取出数据
//取出数据
public int getData(){
if (isEmpty()){
System.out.println("队列为空");
return -1 ;
}
front++ ;
return array[front];
}
6.显示数据
public void show(){
if (isEmpty()){
System.out.println("队列为空");
return ;
}
//只要队列不为空,一直遍历
//也可以对array数组进行遍历
while(!isEmpty()){
System.out.print(array[++front] + "\t");
}
}
7.获取头部数据【注意:获取数据并不是取出数据,数据还在队列中存放。所以front+1就可以,不需要front++】
//获取头部数据--并不是取出来
public int getHead(){
if (isEmpty()){
System.out.println("队列为空");
return -1 ;
}
return array[front+1] ;
}
队列的图解: