栈的push、pop序列

题目:输入两个整数序列。其中一个序列表示栈的push顺序,判断另一个序列有没有可能是对应的pop顺序。为了简单起见,我们假设push序列的任意两个整数都是不相等的。

比如输入的push序列是1、2、3、4、5,那么4、5、3、2、1就有可能是一个pop系列。因为可以有如下的push和pop序列:push 1,push 2,push 3,push 4,pop,push 5,pop,pop,pop,pop,这样得到的pop序列就是4、5、3、2、1。但序列4、3、5、1、2就不可能是push序列1、2、3、4、5的pop序列。

#include<iostream>
#include<string>
#include<stack>
using namespace std;
int main()
{
	int a[]={1,2,3,4,5},b[]={4,5,3,2,1};
 	int size=5;
	stack<int>s;
	int locate=0;
	bool ok=false;
	for(int j=0;j<size;j++)
	{
		if(b[0]==a[j])
		{
			locate=j+1;
			ok=true;
			break;						
		}
		s.push(a[j]);
	}
	if(ok==false)
	{
		cout<<"不符合"<<endl;
		return 0;
	}
	for(int i=1;i<size;i++)
	{
		ok=false;
		for(int j=locate;j<size;j++)
		{
			if(b[i]==a[j])
			{
				for(int k=locate;k<j;k++)
					s.push(a[j]);
				locate=j+1;
				ok=true;
				break;
			}
		}
		if(ok==false)
		{
			while(true)
			{
				if(s.empty())
				{
					cout<<"不符合"<<endl;
					return 0;
				}
				int temp=s.top();
		 		s.pop();
		 		if(temp==b[i])
		 			break;
			}
			
		} 
	}
	cout<<"符合"<<endl;
	return 0;
}

猜你喜欢

转载自blog.csdn.net/shuangyueliao/article/details/53957927