题解 | #【模板】循环队列#
【模板】循环队列
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; } } } }