题解 | #【模板】循环队列#
【模板】循环队列
https://www.nowcoder.com/practice/0a3a216e50004d8bb5da43ad38bcfcbf
/**
设置初始标记: boolean flag=false
当入队列时,让rear往后移动,让flag=true
当出队列时,让front往后移动,让flag=false
当队列为空时: rear == front && flag==false
当队列为满时: rear == front && flag == true
*/
import java.util.Scanner;
class queue{
boolean flag = false;//设置标志位,区分入队操作和出队操作
private int queueSize = 0;
private int top = 0;
private int rear = 0;
private int[] q;
void setSize(int queueSize){
this.queueSize = queueSize;
this.q = new int[queueSize];
}
void push(int num){
if(rear == top && flag==true){
System.out.println("full");
}else{
flag = true;
q[rear] = num;
rear = (rear+1)%queueSize;
}
}
void pop(){
if(rear == top && flag==false){
System.out.println("empty");
}else{
flag = false;
System.out.println(q[top]);
top = (top+1)%queueSize;
}
}
void front(){
if(rear == top && flag==false){
System.out.println("empty");
}else{
System.out.println(q[top]);
}
}
}
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
queue qu = new queue();
Scanner in = new Scanner(System.in);
String[] str = in.nextLine().split(" ");
qu.setSize(Integer.parseInt(str[0]));
int n = Integer.parseInt(str[1]);
// 注意 hasNext 和 hasNextLine 的区别
for(int i=0; i<n; i++){
String[] test = in.nextLine().split(" ");
switch(test[0]){
case "push":
qu.push(Integer.parseInt(test[1]));
break;
case "pop":
qu.pop();
break;
case "front":
qu.front();
break;
}
}
}
}


查看10道真题和解析