FILO即先进后出,栈这个数据结构就是FILO这个特点的结构。
一个FILO序列可以理解为一个栈按原定顺序依次入栈出栈可以形成的衍生序列
所以可以通过一个输入栈以及一个正常栈来对比判断输入序列是否为FILO序列
#include<iostream>
using namespace std;
int main(){
int count=0; //弹出次数。因为一个序列如果是ABCDEFGH对应的FILO序列,栈应该弹出8次
int top=0; //栈顶
char a[8]; //输入栈
char x; //输入序列
char b='A'; //b为正常栈输入,即ABCDEFGH依次入栈
cin>>x; //输入输入栈的第一个元素
while(count<8){ //弹出8次
//首先,栈若是空的,则无法弹出,先有元素入栈才能出栈。其次,栈非空时,当输入字母与栈顶元素相同时,即从正常栈中弹出,构成序列。最后,如果正常序列已经将超过H的入栈,则说明栈此时非空,则输入序列无法构成FILO序列。
if(top>0&&a[top-1]==x){ //第二种情况
top--; //弹出
count++; //弹出次数++
cin>>x; //输入序列下一个
}
else if(b<='H'){
a[top++]=b++; //正常序列++
}
else{
cout<<0;
return 0;
}
}
//成功弹出8次
cout<<1;
}