棧的push,pop序列

來源:互聯網
上載者:User

題目:輸入兩個整數序列。其中一個序列表示棧的push 順序,
判斷另一個序列有沒有可能是對應的pop 順序。

 

思路:首先建立一個棧。從push序列開始遍曆,如果當前元素與pop序列當前元素相等,則兩個序列向前推進。

        否則如果當前棧的棧頂元素與與pop序列當前元素相等,則pop序列向前推進,棧頂元素出棧。

        否則如果當前push序列還沒遍曆完,則將push序列當前元素壓入棧,然後繼續迭代。

        否則返回push與pop序列不對應的資訊。

        在找到所有匹配之後,返回true。

源碼:

#include<iostream><br />#include<stack><br />using namespace std;</p><p>bool isPopSequence(const int pushArry[],const int popArry[],int _size)<br />{<br />const int* pPush=pushArry;<br />const int* pPop=popArry;<br />stack<int> stData;<br />int cnt=0;<br />while(pPop-popArry<_size) //判斷是否已經遍曆完<br />{<br />if(pPush-pushArry>=_size&&stData.empty())break;</p><p>if(pPush-pushArry<_size&&*pPush==*pPop){ //pushArry當前元素與popArry當前元素相等<br />pPush++;<br />pPop++;<br />}<br />else if(!stData.empty()&&stData.top()==*pPop){//棧頂元素與popArry當前元素相等<br />stData.pop();<br />pPop++;<br />}<br />else if(pPush-pushArry<_size){ //如果pushArry還沒遍曆完<br />stData.push(*pPush);<br />pPush++;<br />}<br />else return false;//找不到匹配值<br />}<br />return true;<br />}</p><p>int main()<br />{</p><p>int a[5]={1,2,3,4,5};<br />int b[5]={2,5,4,3,1};<br />cout<<isPopSequence(a,b,5)<<endl;</p><p>return 0;<br />}

 

另外,在寫這個程式之後,學到一點新的東西:

如果函數傳參中的參數是整形數組的話,還應當將該數組的長度一參數形式傳進來,

便於在函數中使用到擷取數組長度或者判斷越界方面的操作。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.