题目
实现一个队列,队列初始为空,支持四种操作:
1,push-向队尾插入一个数
2,pop-从队头弹出一个数
3,empty-判空
4,query-查询队头元素
现对队列进行m个操作,其中操作3和操作4都要输出相应的结果
输入格式
第一行是整数m,表示操作次数
接下来m行,每行包含一个操作命令;
数据范围
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
代码
import java.io.*;
public class Main{
static BufferedReader br = new BufferedReader(new InputStreamReader(System.in);
static final int N = 100010;
static int[] q = new int[N]; //数组模拟队列
static int h = 0; //队头(出队)
static int t = -1; //队尾(入队)
public static void main(String[] main) throws IOException{
int m = Integer.parseInt(br.readLine());
while(m-- > 0){
String[] s = br.readLine().split(" ");
if(s[0].equals("push")){
push(Integer.parseInt(s[1]));
}
else if(s[0].equals("pop")){
pop();
}
else if(s[0].equals("empty")){
//需要输出
System.out.println(empty());
}
else if(s[0].equals("query")){
//需要输出
System.out.println(query());
}
}
}
public static push(int x){
//入队,从队尾插入数据,即向队列数组中加入该数,同时尾指针后移
q[++t] = x;
}
public static pop(){
//出队,即队头指针后移即可
h++;
}
public static String empty(){ //判空
if(h <= t){
return "NO";
}
else
return "YES";
}
public static int query(){ //查询队头元素
//直接输出队头即可(因为是数组嘛)
return q[h];
}
}
后记:尽可能配合画图来分析