<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          棧的經(jīng)典運用

          作者: 時間:2016-12-01 來源:網(wǎng)絡(luò) 收藏

          /************************************************
          *當(dāng)所有對象遍歷完成以后,需要判斷棧中是否存在對象
          *棧中為空說明是平衡的,非空則說明是非空的對象
          ************************************************/
          if(stack.isempty())
          {
          cout << "string is blanced!!" << endl;
          return true;
          }
          else/*沒有正確的匹配,并輸出具體不匹配的符號*/
          {
          cout << stack.pop() << " " << "Unblance string!!" << endl;
          return false;
          }
          }

          本文引用地址:http://www.ex-cimer.com/article/201612/324510.htm

          采用上面的代碼能夠符號是否平衡的判斷。

          接下來說明一下表達(dá)式的求值問題,表達(dá)式的求值問題主要設(shè)計到操作符的優(yōu)先級問題,比如()、*/、+-這幾種符號的優(yōu)先級是不一樣的,其中括號的優(yōu)先級最好,乘除其次,加減最低,我們通??吹降谋磉_(dá)式都是中綴表達(dá)式,也就是在操作符的兩邊都有對象,當(dāng)然括號除外啦,這種中綴表達(dá)式是不便于在程序中處理的,因為存在很多的優(yōu)先級差別,很難把握從那個位置先計算。

          如果在表達(dá)式中沒有了優(yōu)先級的問題,求值問題也就變得相對來說更加簡單了,后綴表達(dá)式是一種非優(yōu)先級的表達(dá)式表示方式,但是如何實現(xiàn)中綴表達(dá)式到后綴表達(dá)式的切換也是很難實現(xiàn)的。

          中綴表達(dá)式到后綴表達(dá)式的實現(xiàn)如下:

          中綴表達(dá)式:
          a*b+c*d-e/f
          后綴表達(dá)式:
          ab*cd*+ef/-

          從上面的表達(dá)式可以知道后綴表達(dá)式相對來說比較容易判斷計算的基本過程,而且不存在括號的煩惱。采用棧實現(xiàn)轉(zhuǎn)換的基本思路如下:
          對一個中綴表達(dá)式進(jìn)行遍歷,當(dāng)遇到非操作符的字符直接保存到后綴表達(dá)式的存儲空間中,如果遇到左括號,則將左括號壓入棧中,因為優(yōu)先級最高,只有遇到右括號才會被彈出。如果遇到右括號,則將左括號之前的操作符全部彈出,并保存到后綴表達(dá)式的存儲空間中,當(dāng)然這種存儲的順序和出棧的順序是一致的,括號操作符在后綴表達(dá)式中是不存在的,因此不需要將括號保存到后綴表達(dá)式的存儲空間中。如果遇到乘除操作符(*/),則判斷棧中的操作符優(yōu)先級是否低于當(dāng)前的操作符也就是判斷是否是加減操作符,如果不是則將棧中的操作符(也就是*、/),并保存到后綴表達(dá)式存儲空間中,然后將當(dāng)前的操作符壓入棧中,如果是則直接將操作符入棧。如果操作符是加減操作符,則彈出棧中左括號之前的所有操作符,并保存到后綴表達(dá)式存儲空間中,然后將操作符本身壓入棧中。當(dāng)字符串遍歷完成以后,依次彈出操作符,并保存到后綴表達(dá)式存儲區(qū)中。

          通過上面處理的中綴表達(dá)式就能完成后綴的轉(zhuǎn)換,但是由于需要比較操作符的優(yōu)先級問題,因此可能需要出棧以后,直接將對象又壓棧的問題,這是實現(xiàn)這類轉(zhuǎn)換時需要注意的?;镜膶崿F(xiàn)如下:

          /*****************************************
          * 實現(xiàn)表達(dá)式中綴到表達(dá)式后綴的轉(zhuǎn)換
          *****************************************/
          bool midtolast(string &src, string &dst)
          {
          string::size_type len = src.size();

          /*用來保存棧中彈出的對象*/
          char temp = 看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();