判断入栈和出栈顺序是否一致

// 栈的压入、弹出顺序
// a表示压入顺序,b表示弹出顺序。
bool IsStackOrder(int a[],int b[],int n)
{
	if(a==NULL||b==NULL||n<=0)
		throw exception("Invalid input!");
	if(n==1)
		return true;
	vector<int> vec;
	int i,j;
	j=-1;
	for(i=0;i<n;i++)
	{
		if(!vec.empty()&&b[i]==vec.back())// 栈顶的情况
		{
			vec.erase(vec.end()-1);
		}
		else
		{
			j++;
			while(j<n&&a[j]!=b[i]){vec.push_back(a[j]);j++;} // 在后面的序列当中找到了
				if(j==n)
			return false;
		}
	}
	if(i==n&&vec.empty())
		return true;
	else
		return false;
}
void main()
{ 
	int a[5]={1,2,3,4,5};
	int b[5]={3,5,4,2,1};
	cout<<IsStackOrder(a,b,5)<<endl;

	system("pause");
}

  

posted on 2013-07-24 15:21  dyc0113  阅读(258)  评论(0编辑  收藏  举报

导航