栈的压入弹出序列
- 输入两个整数序列,第一个表示压入顺序,判断第二个是否是该栈的弹出顺序。
- 选择题
1、思路:
对弹出序列的元素依次分析,如果下一个弹出的数字刚好是栈顶数字,那么直接弹出。如果下一个弹出的数字不在栈顶,我们把压栈序列中还没有入栈的数字压入辅助栈,直到把下一个需要弹出的数字压入栈顶为止。如果所有的数字都压入栈了仍然没有找到下一个弹出的数字,那么该序列不可能是一个弹出序列。
IsOrder
1 #include <iostream> 2 #include <assert.h> 3 #include <stack> 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<int> 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