您的位置:首页 > 理论基础 > 数据结构算法

栈的push、pop序列[数据结构]

2015-05-19 16:09 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序列。
#include<iostream>
#include<stack>
using namespace std;

bool isPossiblePopOrder(int *push, int *pop, int length){
if(push && pop && length > 0){
int *pNextPush = push;
int *pNextPop = pop;
stack<int> stackdata;
bool isPossible = false;
while(pNextPop - pop < length){
while(stackdata.empty() || stackdata.top() != *pNextPop){
if(!pNextPush){
break;
}
stackdata.push(*pNextPush);
if(pNextPush - push < length){
pNextPush++;
}else{
pNextPush = NULL;
}
}
if(stackdata.top() != *pNextPop){
break;
}
stackdata.pop();
pNextPop++;
}
if(stackdata.empty() && pNextPop - pop == length){
isPossible = true;
}
return isPossible;
}
}
int main(){
int push[5] = {
1, 2, 3, 4, 5
};
int pop[5] = {
4, 3, 5, 1, 2
};
bool result = isPossiblePopOrder(push, pop, 5);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐