#include#include #include bool MyIsPopOrder(int* InSeq, int* OutSeq, int length) { if(InSeq == NULL || OutSeq == NULL || length <= 0) return false; std::stack stackAid; int index = 0; for(int i=0; i = length) return false; //pop if(index < length && InSeq[index] == OutSeq[i]) { stackAid.pop(); ++index; } } return true;}//============================hht's=========================bool IsPopOrder(const int* pPush, const int* pPop, int nLength) { bool bPossible = false; if(pPush != NULL && pPop != NULL && nLength > 0) { const int* pNextPush = pPush; const int* pNextPop = pPop; std::stack stackData; while(pNextPop - pPop < nLength) { while(stackData.empty() || stackData.top() != *pNextPop) { if(pNextPush - pPush == nLength) break; stackData.push(*pNextPush); ++pNextPush; } if(stackData.top() != *pNextPop) break; stackData.pop(); ++pNextPop; } if(stackData.empty() && pNextPop - pPop == nLength) bPossible = true; } return bPossible;}void Test(const char* testName, int* InSeq, int* OutSeq, int length, bool expected) { if(testName != NULL) printf("%s begins: \n", testName);// if(expected == MyIsPopOrder(InSeq, OutSeq, length)) if(expected == IsPopOrder(InSeq, OutSeq, length)) printf("passed.\n"); else printf("failed.\n");}//***********multi number***************//1.yesvoid Test1() { int InSeq[] = {1,2,3,4,5}; int OutSeq[] = {3,5,4,2,1}; Test("Test1", InSeq, OutSeq, 5, true);}//2.novoid Test2() { int InSeq[] = {1,2,3,4,5}; int OutSeq[] = {4,3,5,1,2}; Test("Test2", InSeq, OutSeq, 5, false);}//***********single number***************//1.yesvoid Test3() { int InSeq[] = {2}; int OutSeq[] = {2}; Test("Test3", InSeq, OutSeq, 1, true);}//2.novoid Test4() { int InSeq[] = {5}; int OutSeq[] = {4}; Test("Test4", InSeq, OutSeq, 1, false);}//NULLvoid Test5() { Test("Test5", NULL, NULL, 0, false);}int main(int argc, char* argv[]) { Test1(); Test2(); Test3(); Test4(); Test5(); return 0;}