一、前言:
这是怀化学院的:Java数据结构中的一道难度中等的一道编程题(此方法为博主自己研究,问题基本解决,若有bug欢迎下方评论提出意见,我会第一时间改进代码,谢谢!) 后面其他编程题只要我写完,并成功实现,会陆续更新,记得三连哈哈! 所有答案供参考,不是标准答案,是博主自己研究的写法。
二、题目要求如下:
(第 3 题) 循环队列(难度系数75)
循环队列
标准输入输出
题目描述:
根据给定的空间构造顺序循环队列,规定队满处理方法为少用一个元素空间。例如,给定5个元素空间构造循环队列,则只能存放4个元素。试根据入队及出队操作判断队列最后的元素存放情况,并输出最后队列中的元素值,即完成给定入队及出列操作后一次性全部出队的元素值。要求采用顺序队列完成。
输入:
输入的第一行为一个自然数n,表示要求构造的顺序循环队列空间数。第二行为操作次k,接下来k行为出队入队操作,每行各代表一次操作。入队用in表示,出队用out表示,如果是入队,则in隔一空格后为一整数,表示入队元素值。输出:输出完成所有入队出队操作后,一次性出队元素。用一个空格隔开。可以假定队在完成所有操作后不为空。
输入样例:
4
7
in 1
in 2
in 5
in 6
out
out
in 8
输出样例:
5 8
三、代码实现:(基本原理在代码注释中!)
补充:队列的引用却new的是实现类LinkedList的实例化,因为JDK提供的队列:Queue是一个接口,要有实现类去实现接口。
(1)创建一个Main类(里面有满足输入的变量与操作的方法):
package com.fs.qu;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc =new Scanner(System.in);
int n = sc.nextInt(); //代表需要测试的总次数
int k = sc.nextInt(); //代表需要入队和出队的操作次数
//队列是一个接口,要new它的实现类LinkedList对象才行
Queue<Integer> queue = new LinkedList<>(); //设置集合中要操作的元素是整型
while(k>0){
String str = sc.next();
//如果输入的是字符串"in",代表入队
if(str.equals("in")){
int value = sc.nextInt();
if(queue.size()<n-1){
queue.add(value); //入队
}
}
//如果输入的是字符串"out",代表出队
if(str.equals("out")){
if(queue.size()>0){
queue.poll(); //出队
}
}
k--;
}
//只要队不为空。就输出队列里的元素
while(queue.size()>0){
System.out.print(queue.poll()+" ");
}
}
}
四、不同情况的代码运行结果:
<1> 首先测试输入题目中输入样例:
<2>自己输入的测试: (建议手打,直接复制这个可能出现格式错误导致输出异常)
4
6
in 2
in 5
out
in 9
out
in 66
测试结果: