#include <iostream>
#include<iterator>
#include<vector>
#include<stack>
using namespace std;
template<class In>
bool isPopOrder(In push_beg,In push_end,In pop_beg,In pop_end){
if(push_beg>push_end||pop_beg>pop_end)
throw exception("invalid input");
typedef In::value_type T;//这一句数组指针不行
std::stack<T> tmp;
while(pop_beg<=pop_end){
while(tmp.empty()||*pop_beg!=tmp.top()){
if(push_beg>push_end)//切记:取之前先判断当前迭代器是否已失效!!!
break;
tmp.push(*push_beg);
push_beg++;
}
if(*pop_beg!=tmp.top())//
break;
tmp.pop();
pop_beg++;
}
if(pop_beg>pop_end)
return true;
else
return false;
}
void main()
{
vector<int> vec1;
vec1.push_back(1);
vec1.push_back(2);
vec1.push_back(3);
vec1.push_back(4);
vec1.push_back(5);
vector<int> vec2;
vec2.push_back(4);
vec2.push_back(3);
vec2.push_back(5);
vec2.push_back(1);
vec2.push_back(2);
cout<<isPopOrder(vec1.begin(),vec1.end()-1,vec2.begin(),vec2.end()-1)<<endl;
system("pause");
}
根据栈的压入序列判断弹出序列是否正确(模板实现)
最新推荐文章于 2018-09-23 16:13:56 发布