栈的压入弹出序列

  1. 输入两个整数序列,第一个表示压入顺序,判断第二个是否是该栈的弹出顺序。
  2. 选择题

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     

 

posted on 2013-04-08 22:26  月moon鸟  阅读(167)  评论(0编辑  收藏  举报

导航