队列

用java数组基本实现队列

package datastructure_1;

public class ArrayQueue {
public static void main(String[] args) {
// arrqueue a = new arrqueue(3);
// a.addData(5);
// a.addData(9);
// a.addData(15);
// a.showQueue();
// System.out.println(a.getQueue());
// System.out.println(a.getQueue());
// System.out.println(a.getQueue());
// System.out.println(a.getQueue());
CircleArrQueue c = new CircleArrQueue(4);//有效数据是3 留出一个空间
c.addData(1);
c.addData(3);
c.addData(5);
c.showQueue();
}
}
//使用普通数组模拟队列
//class arrqueue{
// private int maxsize;//表示数组最大容量
// private int front;//表示队列头
// private int rear;//表示队列尾
// private int[] arr;//该数组用于模拟队列 存放数据
// //创建模拟队列构造器
// public arrqueue(int arrarsize) {
// maxsize = arrarsize;
// arr = new int[maxsize];
// front = -1;//指向队列头的前一个位置
// rear = -1;//指向队列尾的具体位置
// }
// //判断队列是否为空
// public boolean isEmpty() {
// if(front == rear) {
// return true;
// }
// return false;
// }
// //判断队列是否为满
// public boolean isFull() {
// if(rear == maxsize-1) {
// return true;
// }
// return false;
// }
// //添加队列数据
// public void addData(int data) {
// //判断队列是否为满
// if(isFull()) {
// System.out.println(“队列已满”);
// return;
// }
// rear++;//rear后移
// arr[rear] = data;
// }
// //获取队列数据
// public int getQueue() {
// //判断队列是否为空
// if(isEmpty()) {
// throw new RuntimeException(“队列为空 不能取数据”);
// }
// front++;
// return arr[front];
// }
// //显示队列的所有数据
// public void showQueue() {
// if(isEmpty()) {
// System.out.println(“队列为空 不能取数据”);
// }
// for(int i = 0;i<arr.length;i++) {
// System.out.println(arr[i]+"\t");
// }
// }
// //显示队列的头数据
// public int headQueue() {
// if(isEmpty()) {
// throw new RuntimeException(“队列为空 不能取数据”);
// }
// return arr[front+1];
// }
//}
//由于普通数组取出数据 而舒尔原有空间无法复用 可以将普通数组转换为环形数组
//环形数组思如下
//1.front变量的定义 front指向队列的第一个元素 初始值=0
//2.rear变量的定义 rear指向队列的最后一个元素的下一个 可以空出一个空间作为约定 初始值等于0
//3.当队列条件是(rear+1)%maxsize = front 队列为满
//4.当队列条件为 rear = front 队列为空
//5.队列中有效数据的个数为 (rear+maxsize-front)%maxsize
class CircleArrQueue{
private int maxsize;//表示数组最大容量
private int front;//表示队列头 指向第一个元素 初始值为0
private int rear;//表示队列尾的后一个位置 初始值为0
private int[] arr;//该数组用于模拟队列 存放数据
public CircleArrQueue(int arraysize) {
this.maxsize = arraysize;
arr = new int[maxsize];
this.rear = 0;
this.front = 0;
}
//判断队列是否为满
public boolean isFull() {
return ((rear+1)%maxsize == front);
}
//判断队列是否为空
public boolean isEmpty() {
if(front == rear) {
return true;
}
return false;
}
public void addData(int data) {
//判断队列是否为满
if(isFull()) {
System.out.println(“队列已满”);
return;
}
//将rear后移 并考虑取模
arr[rear] = data;
rear = (rear+1)%maxsize;
}
//获取队列数据
public int getQueue() {
//判断队列是否为空
if(isEmpty()) {
throw new RuntimeException(“队列为空 不能取数据”);
}
//临时变量保存front值 然后取出后 将front后移 并考虑取模
int value = arr[front];
front = (front+1)%maxsize;
return value;
}
//显示队列的头数据
public int headQueue() {
if(isEmpty()) {
throw new RuntimeException(“队列为空 不能取数据”);
}
return arr[front];
}
//显示队列的所有数据
public void showQueue() {
if(isEmpty()) {
System.out.println(“队列为空 不能取数据”);
}
for(int i = front;i<front+size();i++) {
System.out.println(arr[i%maxsize]+"\t");
}
}
//求出当前队列数据有效个数
public int size() {
return (rear+maxsize-front)%maxsize;
}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值