【算法-环形队列】通过一维数组实现原理和代码思路(java语言实现)

注意点:

队列的特点:

先进先出,队列的输出、输入是通过数组的前后端进行操作,即队列的输入从数组的尾部进入,队列的输出从数组的头部输出

代码实现需要声明的属性:

front:头指针,本章操作环形队列的思路:front指向队列的头结点,也就是说arr[front]为队列的第一个元素

rear:尾指针,本章操作环形队列的思路,rear指向队列尾结点的后一位,并将数组的最后一位空出,作为约定

maxSize:数组的最大容量

arr[]:声明一个数组用来存放队列

代码实现:

1、通过构造器初始化声明:front/rear/maxSize

private CircleQueue(int size){
maxSize = size;
front= 0;//初始化声明头结点和尾结点相同,皆为0
rear = 0;
}

2、判断队列是否为空(思路:头指针和尾指针相同的情况下,为空)

public boolean isEmpty(){
return rear == front;
}

3、判断队列是否已满(思路:通过“取模“”来实现判断:(rear+1)%maxSize == front

public boolean isFull(){
return (rear+1)%maxSize == front
}

4、得到队列中的总元素(注意点:需要注意队列是否为空)

public int getSize(){
//首先判断队列是否为空
if(isEmpty){
//为空则直接抛出异常
throw new RuntimeException("队列为空!")    
}
//否则获得队列总个数
return (rear+maxSize-front)%maxSize;
//这里可以这么理解  (当前个数+总容量) %总容量 从而得到当前个数

}

4、开始往队列里面添加元素(注意点:首先要判断队列是否已满,添加元素后,rear指针需要后移)

public void addQueue(int num){
//判断队列是否已满
if(isFull){
System.out.println("队列已满,无法添加元素");
return;
}
//否则往队列中加入元素
arr[rear] = num;//数组元素赋值
rear = (rear+1)%maxSize //此时rear指针后移一位

}

5、查看队列(注意点:需要判断队列是否为空)

public void show(){
//判断队列是否为空
if(isEmpty){
throw new RuntimeException("队列为空");
}
//否则遍历队列
for(int i = front,i<front+getSize();i++){
System.out.prinf("arr[%d] = %d\n",i%maxSize,arr[i%maxSize]);
}
}

6、显式队列的头部数据

public int headQueue(){
if(isEmpty){
System.out.print("队列为空");
}

//查看头部元素

return arr[front];
}

7、出队列操作(注意点:判断队列是否为空,front指针在取出数据后需要移动)

public void outQueue(){
  //判断队列是否为空
....此处省略

//出队列从队列头部出,指针front变化
 int temp = arr[front];
front = (front+1)%maxSize;//front指针移动
System.out.prinf("取出的数据是:%d"+temp);
}

完成以上操作,即可完成队列的添加,取出和查看操作

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值