题解 | #【模板】循环队列#

【模板】循环队列

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;
          }
        }
    }
}

全部评论

相关推荐

嵌入式求职之路:可以看我经验😂,https://www.nowcoder.com/share/jump/73221730841876945
点赞 评论 收藏
分享
05-09 14:45
门头沟学院 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务