您的位置:首页 > Web前端

剑指offer:栈的压入弹出序列

2015-10-06 00:54 351 查看
如何判断一个序列可能是另外一个序列的压入弹出序列呢?

#include <iostream>
#include <stack>
#include <vector>
using namespace std;
/* a是入栈序列,b是出栈序列 */
bool isPopQueue(int* a, int* b, int len)
{
/* 入参判断 */
if(a == NULL || b == NULL || len <= 0)
return false;

int i = 0, j = 0;
stack<int> st;

/* 循环去判断 */
while(i < len || j < len)
{
if(i < len)
{
while(a[i] != b[j] && i < len)
{
st.push(a[i]);
i++;
}
cout << "i = " << i << ", j = " << j << endl;
}

if(j < len)
{
if(i < len && a[i] == b[j])
{
i++;
j++;
}
else if(!st.empty())
{
if(st.top() == b[j])
{
j++;
st.pop();
}
else
{
return false;
}
}
else
{
return false;
}
}
}
return true;
}

int main()
{
int a[] = {1,2,3,4,5};
int b[] = {4,5,3,1,1};

if(isPopQueue(a,b,5) == true)
{
cout << "good" << endl;
}
else
{
cout << "poor" << endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: