- 输入两个整数序列,第一个表示压入顺序,判断第二个是否是该栈的弹出顺序。
- 选择题
1、思路:
对弹出序列的元素依次分析,如果下一个弹出的数字刚好是栈顶数字,那么直接弹出。如果下一个弹出的数字不在栈顶,我们把压栈序列中还没有入栈的数字压入辅助栈,直到把下一个需要弹出的数字压入栈顶为止。如果所有的数字都压入栈了仍然没有找到下一个弹出的数字,那么该序列不可能是一个弹出序列。
IsOrder
1 #include2 #include 3 #include 4 5 using namespace std; 6 7 bool IsOrder(const int* push, const int* pop, int length) 8 { 9 assert(push != NULL && pop != NULL && length > 0);10 stack stackData;11 int i = 0, j = 0;12 13 for (; i < length; i++)14 {15 while (stackData.empty() || stackData.top() != pop[i])16 {17 if (j == length)18 return false;19 stackData.push(push[j]);20 j++;21 }22 stackData.pop();23 }24 return true;25 }26 27 int main()28 {29 int push[1] = { 1};30 int pop[1] = { 1};31 bool result = IsOrder(push, pop, 1);32 printf("%d\n", result);33 }34