目录
前言
本人刷剑指offer的一些程序记录,头文件,主函数都齐全,可直接上机运行
一、题目
输⼊两个整数序列,第⼀个序列表示
栈
的压⼊顺序,请判断第⼆个序列是否为该
栈
的弹出顺序。假设压⼊栈的所有数字均不相等。例如序列
1,2,3,4,5
是某栈的压⼊顺序,序列4
,
5,3,2,1
是该压栈序列对应的⼀个弹出序列,但
4,3,5,1,2
就不可能是该压栈序列的弹出序列。(注意:这两个序列的⻓度是相等的)
二、程序
1.头文件
#include <iostream>
#include <stack>
#include <vector>
using namespace std;
2.类和主函数
class solution
{
public:
bool IsPopOrder(vector<int> pushV,vector<int> popV)
{
if(pushV.size()==0) return false;
for(int i=0,j=0;i<pushV.size();i++)
{
stackData.push(pushV[i]);
while(j<popV.size() && stackData.top()==popV[j])
{
stackData.pop();
j++;
}
}
return stackData.empty();
}
private:
stack<int> stackData;
};
int main()
{
solution stu;
vector<int> pushV,popV;
int n,data;
cout<<"请输入序列的初始长度:"<<endl;
cin>>n;
cout<<"请初始化压入序列"<<endl;
for(int i=0;i<n;i++)
{
cin>>data;
pushV.push_back(data);
}
cout<<"请初始化第二个序列"<<endl;
for(int i=0;i<n;i++)
{
cin>>data;
popV.push_back(data);
}
cout<<"第二个序列是否为弹出序列?"<<endl;
if(stu.IsPopOrder(pushV,popV)) cout<<"是"<<endl;
else cout<<"否"<<endl;
}