输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。
- 0<=pushV.length == popV.length <=1000
- -1000<=pushV[i]<=1000
- pushV 的所有数字均不相同
输入
输入2个序列,先输入入栈序列,再输入出栈序列。
输出
输出是否存在这种出栈序列。
输入样例 1
1 2 3 4 5 4 5 3 2 1
输出样例 1
true
解题思路: 按照输入入栈顺序进行入栈操作,同时取其栈顶元素与出栈序列元素进行比对,若符合则将其出栈,若不符则继续入栈,直至出栈序列读取完,若栈空则true,否则false。
#include#include #include #define maxsize 1000 using namespace std; typedef struct{ int * top; int * base; }sqstack; void initstack(sqstack &s){ s.base=new int[maxsize]; s.top=s.base; } void push(sqstack &s,int n){ *s.top++=n; } void pop(sqstack &s){ s.top-=1; } int gettop(sqstack s){ return *(s.top-1); } int main(){ sqstack s; initstack(s); int in[maxsize],out[maxsize]; int i,n,a,count=0,temp=1; while(1){ in[count]=getchar(); count++; if(getchar()=='n' ) { break; } } count=0; while(1){ out[count]=getchar(); count++; if(getchar()=='n') { break; } } n=0; i=0;int j=0; for(;i



