码迷,mamicode.com
首页 > 其他好文 > 详细

栈的压入、弹出序列

时间:2016-06-21 17:30:07      阅读:120      评论:0      收藏:0      [点我收藏+]

标签:

题目:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1、2、3、4、5是某栈的压栈序列,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。
 
 解题思路:如果下一个弹出的数字刚好是栈顶数字,那么直接弹出。如果下一个弹出的数字不在栈顶,我们把压栈序列中还没有入栈的数字压入辅助栈,直到把下一个需要弹出的数字压入栈顶为止。如果所有的数字都压入栈仍然没有找到下一个弹出的数字,那么该序列不可能是一个弹出序列。
 
 1 bool IsPopOrder(const int* pPush,const int* pPop,int nLength)
 2 {
 3  bool bPossible=false;
 4  if(pPush!=NULL&&pPop!=NULL&&nLength>0)
 5  {
 6   const int* pNextPush=pPush;
 7   const int* pNextPop=pPop;
 8   std::stack<int> stackData;
 9    
10  while(pNextPop-pPop<nLength)
11  {
12    while(stackData.empty()||stackData.top()!=*pNextPop)
13    {
14        if(pNextPush-pPush==nLength)
15        break;
16        stackData.push(*pNextPush);
17        pNextPush++;
18    }
19    if(stackData.top()!=*pNextPop)
20    break;
21   
22   stackData.pop();
23   pNextPop++;
24 }
25  if(stackData.empty()&&pNextpop-pPop==nLength)
26  bPossible=true;
27 }
28 return bPossible;
29 }

 

栈的压入、弹出序列

标签:

原文地址:http://www.cnblogs.com/wxdjss/p/5604207.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!