栈和队列是两大常见的数据结构,他们特点分别为先进后出和先进先出。
栈的结构特点为设置栈顶和栈尾,栈尾不可出入元素,元素仅可通过栈顶进出
队列结构特点为设置队头和队尾,元素从队尾进,队头出
例题如下:
实现一个栈,栈初始为空,支持四种操作:
push x
– 向栈顶插入一个数 xx;pop
– 从栈顶弹出一个数;empty
– 判断栈是否为空;query
– 查询栈顶元素。
现在要对栈进行 MM 个操作,其中的每个操作 33 和操作 44 都要输出相应的结果。
输入格式
第一行包含整数 MM,表示操作次数。
接下来 MM 行,每行包含一个操作命令,操作命令为 push x
,pop
,empty
,query
中的一种。
输出格式
对于每个 empty
和 query
操作都要输出一个查询结果,每个结果占一行。
其中,empty
操作的查询结果为 YES
或 NO
,query
操作的查询结果为一个整数,表示栈顶元素的值。
数据范围
1≤M≤1000001≤M≤100000,
1≤x≤1091≤x≤109
所有操作保证合法。
输入样例:
10
push 5
query
push 6
pop
query
pop
empty
push 4
query
empty
输出样例:
5
5
YES
4
NO
解法如下:
import java.util.Scanner;
@SuppressWarnings("all")
public class Main {
static int top;
static int[] stack;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int m = sc.nextInt();
String str = null;
int x;
init();
for(int i = 0; i < m; i++){
str = sc.next();
if(str.equals("push")){
x = sc.nextInt();
push(x);
}else if(str.equals("query")){
System.out.println(query());
}else if(str.equals("empty")){
if(empty()){
System.out.println("YES");
}else{
System.out.println("NO");
}
}else if(str.equals("pop")){
pop();
}
}
}
//栈初始化
public static void init(){
top = -1;
stack = new int[100005];
}
//插入数
public static void push(int val){
stack[++top] = val;
}
//弹出数
public static void pop(){
top--;
}
//判断栈是否为空
public static boolean empty(){
if(top != -1){
return false;
}
return true;
}
//查询栈顶元素
public static int query(){
return stack[top];
}
}
实现一个队列,队列初始为空,支持四种操作:
push x
– 向队尾插入一个数 xx;pop
– 从队头弹出一个数;empty
– 判断队列是否为空;query
– 查询队头元素。
现在要对队列进行 MM 个操作,其中的每个操作 33 和操作 44 都要输出相应的结果。
输入格式
第一行包含整数 MM,表示操作次数。
接下来 MM 行,每行包含一个操作命令,操作命令为 push x
,pop
,empty
,query
中的一种。
输出格式
对于每个 empty
和 query
操作都要输出一个查询结果,每个结果占一行。
其中,empty
操作的查询结果为 YES
或 NO
,query
操作的查询结果为一个整数,表示队头元素的值。
数据范围
1≤M≤1000001≤M≤100000,
1≤x≤1091≤x≤109,
所有操作保证合法。
输入样例:
10
push 6
empty
query
pop
empty
push 3
push 4
pop
query
push 6
输出样例:
NO
6
YES
4
import java.util.*;
public class Main {
static int head;
static int tail;
static int[] queue;
public static void main(String[] args) {
init();
Scanner sc = new Scanner(System.in);
int m = sc.nextInt();
String str = null;
int x;
while(m-- > 0){
str = sc.next();
if(str.equals("push")){
x = sc.nextInt();
push(x);
}else if(str.equals("pop")){
pop();
}else if(str.equals("empty")){
if(empty()){
System.out.println("YES");
}else{
System.out.println("NO");
}
}else if(str.equals("query")){
System.out.println(query());
}
}
}
//初始化
public static void init(){
head = 0;
tail = -1;
queue = new int [100005];
}
//插入元素
public static void push(int val){
queue[++tail] = val;
}
//弹出元素
public static void pop(){
head++;
}
//查询队列是否为空
public static boolean empty(){
if(head - tail >= 1){
return true;
}
return false;
}
//查询队头元素
public static int query(){
return queue[head];
}
}