作者:酒心灵20609 | 来源:互联网 | 2023-05-17 07:52
Java判断已知出栈顺序的合法性。importjava.util.Scanner;publicclassstackCheck{publicstaticvoidmain(Strin
Java判断已知出栈顺序的合法性。
import java.util.Scanner;
public class stackCheck {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
int n=scanner.nextInt();//获取需要判断的次序的元素个数
int[] stackIn=new int[n+1];//栈队列
int[] stackOut=new int[n+1];//出栈次序
int top=1,a=1,b=1;//top为栈顶,此栈0不用,从1开始,a代表入栈元素,b代表出栈队列的下标
boolean ok=true;//次序是否ok的存储
for(int i=1;i<=n;i++)
stackOut[i]=scanner.nextInt();//读入需判断的出栈序列
while(b<=n){//判断是否完成出栈操作
if(a==stackOut[b]){//情况一:入栈即出栈
a++;
b++;
}else if(top!=0 && stackIn[top] == stackOut[b]){//情况二:栈顶元素和目标次序元素相同,出栈。
top--;
b++;
}else if(a<=n)//以上两种情况都咩有,那就说明元素尚未入栈且入栈队列头元素也不是目标元素,则执行入栈操作。
stackIn[++top]=a++;
else{//三种情况都不执行,则可以判定,目标出栈次序是错误的,直接break跳出。
ok=false;
break;
}
}
System.out.println(ok?"yes":"no");//三目运算打印结果
}
}
分析图: