在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

    
    
    <address id="vxupu"><td id="vxupu"></td></address>

      <pre id="vxupu"><small id="vxupu"></small></pre>
      <dfn id="vxupu"></dfn>
      <div id="vxupu"><small id="vxupu"></small></div>
    1. 新聞中心

      EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 棧的經(jīng)典運用

      棧的經(jīng)典運用

      作者: 時間:2016-12-01 來源:網(wǎng)絡 收藏
      棧是計算機術語中比較重要的概念,實質(zhì)上棧就是一段內(nèi)存區(qū)域,但是棧滿足一定的特性,那就是只有一個口,具有先入后出的特性,這種特性在計算機中有很廣泛的運用。其實在程序員無時無刻不在運用棧,函數(shù)的調(diào)用是我們間接使用棧的最好例子,因此可以說棧的一個最重要的運用就是函數(shù)的調(diào)用。但是棧的運用還不止這些,還有很多,其中幾個典型的運行如下:判斷平衡符號,實現(xiàn)表達式的求值(也就是中綴表達式轉(zhuǎn)后綴表達式的問題以及后綴表達式求值問題),在路勁探索中實現(xiàn)路勁的保存也可以說是棧的經(jīng)典運用之一。具體的問題具體分析,只要滿足先入后出特性的問題都能找到現(xiàn)成的數(shù)據(jù)結(jié)構(gòu)---棧。

      本文采用C++中的vector實現(xiàn)棧結(jié)構(gòu),然后利用棧實現(xiàn)判斷平衡符號,實現(xiàn)中綴表達式到后綴表達式的轉(zhuǎn)換,并依據(jù)棧實現(xiàn)簡單的整數(shù)加減乘除運算。

      首先棧的實現(xiàn),由于在C++中采用了vector來代替原始的數(shù)組操作,這種比較方便的容器能較好的實現(xiàn)數(shù)組的功能,當然棧也可以采用鏈表實現(xiàn),但是我認為鏈表沒有數(shù)組直觀,而且在實際的計算機里也是采用連續(xù)的存儲空間作為棧空間的,因此選擇Vector。主要實現(xiàn)三個操作,push、pop以及為空判斷?;镜男问饺缦拢?/p>本文引用地址:http://www.biyoush.com/article/201612/324510.htm

      #ifndef __MYSTACK_H_H_
      #define __MYSTACK_H_H_

      #include "myvector.h"

      namespace myspace
      {
      template
      class Stack
      {
      public:
      Stack(){}
      void push(const Object &x)
      {
      objects.push_back(x);
      }

      const Object &pop()
      {
      int len;
      if(!isempty())
      {
      objects.pop_back();
      len = objects.size();
      return objects[len];
      }
      }

      bool isempty()const
      {
      return (objects.size() == 0);
      }

      int size()
      {
      return objects.size();
      }
      private:
      Vector objects;
      };
      }

      #endif

      實現(xiàn)了簡單的棧類,接下來采用棧實現(xiàn)一些簡單的運用。

      符號的平衡問題
      在語言中往往需要判斷一些符號是否是成對出現(xiàn)的,比如<>,{},[],(),通常在C++中也只有這幾種對稱問題,如何讓判斷符號的對稱也是很多代碼判斷的首要任務。當然實現(xiàn)的方式是多種多樣的,采用棧的實現(xiàn)會相對更加簡單?;镜膶崿F(xiàn)思路如下:
      假設在讀入一串字符串以后,如果遇到對稱符號的左邊部分,則將其壓入棧中,當遇到對稱符號的右邊部分,則彈出棧中的一個對象,實現(xiàn)比對,如果是對稱的,則說明當前的符號是平衡的,如果不對稱,則說明當前字符串是不平衡的,當字符串讀完以后,如果所有的符號都是平衡的,棧中此時應該就是為空,通過判斷棧中是否為空,說明字符串是否是符號平衡的。
      依據(jù)上面實現(xiàn)的棧類,實現(xiàn)符號平衡判斷的過程比較簡單,如下所示:

      bool isbalance(const string &str)
      {
      string::size_type len = str.size();

      Stack stack;

      for(string::size_type i = 0; i < len ; ++ i)
      {
      /*first selection*/
      if(str[i] == [ || str[i] == { ||
      str[i] == ( || str[i] == <)
      {
      stack.push(str[i]);
      }
      /*如果是對稱的符號,則從棧中彈出*/
      if(str[i] == ] || str[i] == } ||
      str[i] == ) || str[i] == >)
      {
      /*如果棧中沒有對象,則說明不平衡*/
      if(stack.isempty())
      {
      cout << "the string is Unblanced" << endl;
      return false;
      }
      /*采用switch-case語句判斷*/
      switch(str[i])
      {
      case ]:
      {
      /*判斷是否是匹配的*/
      if([ != stack.pop())
      {
      cout << "Can not blanced with ]" << endl;
      return false;
      }
      break;
      }
      case ):
      {
      if(( != stack.pop())
      {
      cout << "Can not blanced with )" << endl;
      return false;
      }
      break;
      }
      case }:
      {
      if({ != stack.pop())
      {
      cout << "Can not blanced with }" << endl;
      return false;
      }
      break;
      }
      case >:
      {
      if(< != stack.pop())
      {
      cout << "Can not blanced with >" << endl;
      return false;
      }
      break;
      }
      /*一般的非對稱字符*/
      default:
      break;
      }
      }
      }


      上一頁 1 2 3 下一頁

      評論


      技術專區(qū)