数据结构:(三)栈

来源:互联网 发布:神枪手交易软件 编辑:程序博客网 时间:2024/06/06 20:28

(一)

(二)栈的操作

   (1)输入两个整数序列,第一个序列表示栈的压入顺序,判断第二个序列是否为该栈的弹出顺序。

     思路:用一个辅助栈,把压入序列的数字依次压入辅助栈,直到遇到出栈序列的第一个数字;弹出栈顶数字,如果此时栈顶元素等于出站序列的下一个数字则继续弹出,如果不相等则把压入序列中还没有入栈的数字压入辅助栈,直到遇到弹出序列的下一个数字......重复,如果所有数字都压入栈了,仍然没有找到弹出序列的下一个数字,那么序列不可能是一个弹出序列。

bool IsPopOrder(vector<int> pushV,vector<int> popV) {        bool isPossible=false;        if(pushV.size()<=0||popV.size()<=0||pushV.size()!=popV.size())           return isPossible;        stack<int> stackData;        int nextPop=0;        int nextPush=0;                while(nextPop<popV.size())        {            while(stackData.empty()||stackData.top()!=popV[nextPop])            {//如果栈为空或者栈顶数字不等于输出序列的当前数字则把压入序列中未入栈的数字入栈                if(nextPush==pushV.size())//不是pushV.size()-1因为最后一个数字入栈后,nextPush也加了1                    break;                stackData.push(pushV[nextPush]);                nextPush++;            }            if(stackData.top()!=popV[nextPop])                break;            stackData.pop();            nextPop++;        }        if(stackData.empty()&&nextPop==popV.size())//不是popV.size()-1,因为最后一个数字比较后nextPop也进行了加1;            isPossible=true;        return isPossible;    }



0 0
原创粉丝点击