您的位置:首页 > 其它

题目22:栈的压入、弹出序列

2016-09-19 15:27 218 查看
题目:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否是该栈的弹出序列。

假设压入栈的所有数字均不相等。例如:入栈 1、2、3、4、5。 序列4、5、3、2、1是该栈弹出序列。

但是4、3、5、1、2就不可能是该压栈序列的弹出序列。

#include<iostream>
#include<stack>
using namespace std;
bool IsRightOrder(int *psh, int * pp,int length)//ppsh入栈序列 、pp出栈序列、序列长度
{
bool flag=false;

if(psh!=NULL&&pp!=NULL&&length>0)
{
stack<int> inStack;//定义一个栈

int *nextPsh=psh;  //定义两个指向序列的指针 。  入栈
int *nextPp=pp;    //出栈指针

while(nextPp-pp<length)//控制指针 nextPp 不超过pp序列的长度
{
while(inStack.empty()||inStack.top()!=*nextPp)//当inStack.top()==*nextPp 时循环结束
{
if(nextPsh-psh==length)//全部入栈  没找到
break;

inStack.push(*nextPsh);//入栈
nextPsh++;
}
if(inStack.top()!=*nextPp)
break;
inStack.pop();//栈顶退栈
nextPp++;
}
if(inStack.empty()&&nextPp-pp==length)
flag=true;
}
return flag;
}


 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: