您的位置:首页 > 理论基础 > 数据结构算法

2.1数据结构与算法学习笔记:环形队列

2020-07-14 06:18 232 查看

环形队列

//测试数组模拟环形队列
public class hxdl {
public static void main(String[] args) {
hx h = new hx(3);
char key = ' ';//接受用户输入
Scanner scanner = new Scanner(System.in);
boolean loop = true;
//输出一个菜单
while (loop) {
key = scanner.next().charAt(0);//接受一个字符
switch (key) {
case 'a':
System.out.println("输入一个数");
int value = scanner.nextInt();
h.addQueue(value);
break;
case 'g'://取出数据
try {
int queue = h.getQueue();
System.out.printf("取出的数据是%d\n", queue);
} catch (Exception e) {
System.out.println(e.getMessage());
}
break;
}
}
}}
//编写一个类,使用数组模拟队列
class hx {
private int zdrl;//表示数组的最大容量
private int dlt;//队列头
private int dlw;//队列尾
private int[] sz;//该数组用于存放数据,模拟队列

//创建队列的构造器
public hx(int szzdrl) {
zdrl = szzdrl;//数组的最大长度就是队列的最大长度
sz = new int[zdrl];//创建一个最大长度和队列的最大长度相等的数组
dlt = 0;//指向队列头部,这个dlt是指向队列头
dlw = 0;//指向最后一个数据的后一个位置
}
//判断队列是否满
public boolean isFull() {
//刚开始dlw和dlt都等于-1,插入一个值之后队列尾=0,头部依然为-1
//如果队列有8个值,那么dlw=7,最大容量=8
return (dlw+1)%zdrl == dlt;
}
//判断队列是否为空
public boolean isEmpty() {
//刚开始dlw和dlt都等于-1,此时队列为空
return dlw == dlt;
}

//添加数据到队列
public void addQueue(int n) {
//每当添加一个数据进队列时,如果队列满了,提示队列满,不能加入数据
if(isFull()){
System.out.println("队列满,不能加入数据!");
return;
}
//每当添加一个数据进队列时,如果队列没有满,队列尾指针往后移一位,添加一个数据进队列
System.out.println("队列尾部指针指向:"+dlw+"队列头指针指向:"+dlt);
sz[dlw]=n;
//当插入第一个数据的时候,插入的数据的索引为0,所以尾指针就在后一位也就是1,dlw= 0+1%3=1,
dlw=(dlw+1)%zdrl;
}
//获取队列的数据,出队列
public int getQueue() {
//每当让一个数据进队列时,如果队列是空的,则提示队列空,不能取数据
if (isEmpty()) {
//通过抛出异常处理
System.out.println("队列尾部指针指向:"+dlw+"队列头指针指向:"+dlt);
throw new RuntimeException("队列空,不能取数据");
}
//取出队列头的数据
int value= sz[dlt];
//dlt=1%3=1,取出的数据索引为头指针(先进先出,所以肯定先取开头的数据),此时队列的头指针+1
dlt=(dlt+1)%zdrl;
return value;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: