代码:
#include <iostream>
#include <stack>
using namespace std;
bool StackPushPopOrder(const int* pPush, const int* pPop, const int length)
{
bool bPossible = false;
if (pPush == nullptr || pPop == nullptr)
return bPossible;
stack<int> Sk;
const int* pNextPush = pPush;
const int* pNextPop = pPop;
while (pNextPop - pPop < length)
{
while (Sk.empty() || Sk.top() != *pNextPop)
{
if (pNextPush - pPush == length)
break;
Sk.push(*pNextPush);
pNextPush++;
}
if (Sk.top() != *pNextPop)
break;
pNextPop++;
Sk.pop();
if (Sk.empty() && pNextPop - pPop == length)
bPossible = true;
}
return bPossible;
}
int main()
{
const int length = 5;
int pPush[length] = { 1, 2, 3, 4, 5 };
int pPop[length] = { 4, 5, 3, 2, 1 };
int pPop2[length] = { 4, 3, 5, 1, 2 };
cout <<""<< StackPushPopOrder(pPush, pPop, length) << endl;
cout << StackPushPopOrder(pPush, pPop2, length) << endl;
cout << endl;
system("pause");
return 0;
}
测试: