您的位置:首页 > 其它

微软100题(29)栈的压入弹出序列

2015-05-26 18:53 260 查看
题目:输入两个整数序列。其中一个序列表示栈的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序列



bool IsPopOrder(int* pPush,int* pPop,int length)
{
	bool isOrder = false;
	if(pPush!=NULL && pPop!=NULL && length>0)
	{
		int* pNextPush = pPush;
		int* pNextPop = pPop;
		stack<int> stackdata;
		while (pNextPop-pPop < length)
		{
			while (stackdata.empty() || stackdata.top()!=*pPop)
			{
				if(pNextPush-pPush==length) break;
				stackdata.push(*pNextPush);
				pNextPush++;
			}
			if(stackdata.top()!=*pNextPop)
				break;
			stackdata.pop();
			pNextPop++;
		}
		if(stackdata.empty()&&(pNextPop-pPop==length))
			isOrder = true;
	}
	return isOrder;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: