模拟队列
使用数组模拟,hh为队头指针,tt为队尾指针,当队列为空时 tt < hh
/**
* 实现一个队列,队列初始为空,支持四种操作:
*
* push x – 向队尾插入一个数 x;
* pop – 从队头弹出一个数;
* empty – 判断队列是否为空;
* query – 查询队头元素。
* 现在要对队列进行 M 个操作,其中的每个操作 3 和操作 4 都要输出相应的结果。
*
* 输入格式
* 第一行包含整数 M,表示操作次数。
*
* 接下来 M 行,每行包含一个操作命令,操作命令为 push x,pop,empty,query 中的一种。
*
* 输出格式
* 对于每个 empty 和 query 操作都要输出一个查询结果,每个结果占一行。
*
* 其中,empty 操作的查询结果为 YES 或 NO,query 操作的查询结果为一个整数,表示队头元素的值。
*
* 数据范围
* 1≤M≤100000,
* 1≤x≤109,
* 所有操作保证合法。
*
* 输入样例:
* 10
* push 6
* empty
* query
* pop
* empty
* push 3
* push 4
* pop
* query
* push 6
* 输出样例:
* NO
* 6
* YES
* 4
*/
public class 模拟队列 {
public static int[] queue = new int[100010];
public static int tt = -1;
public static int hh = 0;
//push x – 向队尾插入一个数 x;
public static void push(int x){
queue[++tt]=x;
}
//pop – 从队头弹出一个数;
public static int pop(){
return queue[hh++];
}
//empty – 判断队列是否为空;
public static boolean empty(){
return tt<hh;
}
//query – 查询队头元素。
public static int query(){
return queue[hh];
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int m = scanner.nextInt();
while(m>0){
String op = scanner.next();
if("push".equals(op)){
int x = scanner.nextInt();
push(x);
}
if("pop".equals(op)){
pop();
}
if("empty".equals(op)){
System.out.println(empty()?"YES":"NO");
}
if("query".equals(op)){
System.out.println(query());
}
m--;
}
}
}