java 环形数组,c语言数组实现环形队列
思维分析:
如何解决写爬虫IP受阻的问题?立即使用。
1.调整front变量的含义:front指向队列的第一个元素,意味着arr[front]是队列的第一个元素。
front的初始值=0
2.对后置变量的含义做一个调整:后置指向队列中最后一个元素的最后一个位置,因为约定希望空出一个空格。
后部初始值=0
3.当队列已满时,条件是(后1)% maxSize==前[满]
4.队列为空的条件,后方==前方为空
5.当我们对此进行分析时,队列中有效数据的数量(rear maxsize-front)% maxsize//rear=1 front=0
6.我们可以修改原始队列,得到一个循环队列。
java相关视频教程分享:Java学习视频
代码实现:
导入Java . util . scanner;
公共类CircleArrayQueueDemo {
公共静态void main(String[] args) {
//测试一。
system . out . println(‘测试数组模拟循环队列的情况~ ~’);
//创建循环队列
CircleArray queue=new CircleArray(4);//解释设置4,其队列最大有效数据为3。
char key=“”;//接收用户输入
Scanner scanner=新扫描仪(system . in);//
布尔循环=真;
//输出菜单
while(循环){
System.out.println(s(show):显示队列);
System.out.println(e(exit):退出程序);
System.out.println(a(add):将数据添加到队列);
System.out.println(g(get):从队列中取出数据);
System.out.println(h(head):查看队列头的数据);
key=scanner.next()。charAt(0);//接收一个字符
开关(钥匙){
案例:
queue . show queue();
打破;
案例“a”:
System.out.println(“输出一个数字”);
int value=scanner . nextint();
queue.addQueue(值);
打破;
案例“g”://获取数据
尝试{
int RES=queue . get queue();
System.out.printf(检索到的数据是%d\n ,RES);
} catch(异常e) {
//TODO:处理异常
system . out . println(e . getmessage());
}
打破;
情况“h”://查看队列头的数据
尝试{
int RES=queue . head queue();
System.out.printf(队列头的数据是%d\n ,RES);
} catch(异常e) {
//TODO:处理异常
system . out . println(e . getmessage());
}
打破;
案例“e”://退出
scanner . close();
loop=false
打破;
默认值:
打破;
}
}
System.out.println(程序退出~ ~ );
}
}
类CircleArray {
private int maxSize//指示数组的最大容量
//对front变量的含义做一个调整:front指向队列的第一个元素,表示arr[front]是队列的第一个元素。
//初始值//front=0
私有int front
//对后方变量的含义做一个调整:后方指向队列中最后一个元素的最后一个位置。因为我想提供一个空间作为会议场所。
//初始值//rear=0
私人int rear//队列结尾
private int[]arr;//此数据用于存储数据和模拟队列。
public circle array(int arr maxsize){
maxSize=arrMaxSize
arr=new int[maxSize];
}
//确定队列是否已满
public boolean isFull() {
return(rear 1)% maxSize==front;
}
//确定队列是否为空。
public boolean isEmpty() {
return rear==front
}
//向队列中添加数据
public void addQueue(int n) {
//确定队列是否已满
if (isFull()) {
System.out.println(队列已满,无法添加数据~ );
返回;
}
//将数据直接添加到
arr[rear]=n;
//把后面往后移,必须考虑把模块拿到这里。
rear=(rear 1)% maxSize;
}
//获取队列的数据,退出队列。
public int getQueue() {
//确定队列是否为空。
if (isEmpty()) {
//通过引发异常
抛出new RuntimeException(队列为空,所以无法获取数据);
}
//这里我们需要分析一下,front是指向队列的第一个元素
//1.先将front对应的值保存到一个临时变量中。
//2.把前面往后移,考虑拿模具。
//3.返回临时保存的变量
int value=arr[front];
front=(front 1)% maxSize;
返回值;
}
//显示队列的所有数据
public void showQueue() {
//遍历
if (isEmpty()) {
System.out.println(队列为空,没有数据~ ~ );
返回;
}
//Idea:从正面遍历,遍历多少个元素?
for(int I=front;I正面尺寸();i ) {
system . out . printf( arr[% d]=% d \ n ,i % maxSize,arr[I % maxSize]);
}
}
//查找当前队列中有效数据的数量
public int size() {
//rear=2
//front=1
//maxSize=3
return(rear maxSize-front)% maxSize;
}
//显示队列的头数据,注意不是取数据。
public int headQueue() {
//判断
if (isEmpty()) {
抛出new runtime exception(‘队列为空,无数据~ ~’);
}
return arr[front];
}
}分享相关文章和教程:java快速入门。以上是java中使用数组实现循环队列的细节。请多关注我们的其他相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。