C++ 判断栈的弹出序列是否正确
2014-09-19 15:11
573 查看
题目:
给出一个栈的压入序列,判断给出的弹出序列是否正确。
代码如下:
给出一个栈的压入序列,判断给出的弹出序列是否正确。
代码如下:
#include <iostream> #include <stdio.h> #include <stack> using namespace std; bool IsPopOrder(const int* push_order,const int* pop_order,int length) { if( push_order == NULL || pop_order == NULL || length < 1) return false; stack <int> data; int i = 0 , j =0; while( i < length) { data.push(push_order[i]); if(pop_order[j] == data.top()) { data.pop(); j++; } i++; } if(data.size() == 0) return true; while(!data.empty()) { if(data.top() == pop_order[j]) { data.pop(); j++; } else return false; } return true; } void Test(char* testName, const int* pPush, const int* pPop, int nLength, bool expected) { if(testName != NULL) printf("%s begins: ", testName); if(IsPopOrder(pPush, pPop, nLength) == expected) printf("Passed.\n"); else printf("failed.\n"); } void Test1() { const int nLength = 5; int push[nLength] = {1, 2, 3, 4, 5}; int pop[nLength] = {4, 5, 3, 2, 1}; Test("Test1", push, pop, nLength, true); } void Test2() { const int nLength = 5; int push[nLength] = {1, 2, 3, 4, 5}; int pop[nLength] = {3, 5, 4, 2, 1}; Test("Test2", push, pop, nLength, true); } void Test3() { const int nLength = 5; int push[nLength] = {1, 2, 3, 4, 5}; int pop[nLength] = {4, 3, 5, 1, 2}; Test("Test3", push, pop, nLength, false); } void Test4() { const int nLength = 5; int push[nLength] = {1, 2, 3, 4, 5}; int pop[nLength] = {3, 5, 4, 1, 2}; Test("Test4", push, pop, nLength, false); } // push和pop序列只有一个数字 void Test5() { const int nLength = 1; int push[nLength] = {1}; int pop[nLength] = {2}; Test("Test5", push, pop, nLength, false); } void Test6() { const int nLength = 1; int push[nLength] = {1}; int pop[nLength] = {1}; Test("Test6", push, pop, nLength, true); } void Test7() { Test("Test7", NULL, NULL, 0, false); } int main() { Test1(); Test2(); Test3(); Test4(); Test5(); Test6(); Test7(); system("PAUSE"); return 0; }
相关文章推荐
- 判断出栈顺序是否正确(栈的压入、弹出序列)
- 判断栈的压入顺序与弹出顺序是否正确C++
- 栈的压入、弹出序列(判断弹出序列是否正确)
- 根据栈的压入序列判断弹出序列是否正确(模板实现)
- 判断栈的弹出序列是否正确
- 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序
- 面试题22 已知压入序列 判断弹出序列正不正确
- 笔试题:判断栈的push(),pop()序列是否正确
- 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)
- 判断给定序列是否是对应入栈序列的出栈序列(C++)
- 判断一个序列是否是另一个给定序列的弹出序列
- 正则表达式_Java_SE_C++_简单题_判断输入的日期是否是正确的
- 判断出栈序列是否正确
- 判断一个序列是否为另一个栈的出栈序列(栈的压入、弹出序列)
- 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一
- 《剑指offer》:[22]如何判断一个序列是否为栈的弹出序列
- 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一
- C++判断用户输入路径是否正确(判断盘符是否存在以及“\”与"/")