4、棧的實現及其典型應用

一、棧的定義與實現

棧的定義
 棧是一種特殊的線性表,僅能在線性表的一端進行操做
  棧頂(Top):容許操做的一端
  棧底(Bottom):不容許操做的一端
棧的性質:後進先出(LIFO)
4、棧的實現及其典型應用
棧的一些經常使用操做
 建立棧
 銷燬棧
 清空棧
 進棧
 出棧
 獲取棧頂元素
 獲取棧的大小
棧的存儲實現
順序存儲實現
4、棧的實現及其典型應用
鏈式存儲實現
4、棧的實現及其典型應用
小結
 棧是一種特殊的線性表
 棧只容許在線性表的一端進行操做
 棧一般有兩種實現方式
  順序結構實現,附件中01_SeqStatic文件夾
  鏈式結構實現,附件中02_ListStatic文件夾算法

二、棧的典型應用一[字符匹配]

 在C語言中有一些符號是成對匹配出現的,利用棧能夠實現相似編譯器括號是否匹配的能力。
算法思路:框架

 從第一個字符開始掃描
 當碰見普通字符時忽略,當碰見左符號時壓入棧中
 當碰見右符號時從棧中彈出棧頂符號
 進行匹配
  匹配成功:繼續讀入下一個字符
  匹配失敗:當即中止,並報錯
 結束:
  成功:全部字符掃描完畢,且棧爲空
  失敗:匹配失敗或全部字符掃描完畢但棧非空

算法框架
4、棧的實現及其典型應用
小結
 當須要檢測成對出現但又互不相鄰的事物時可使用棧「後進先出」的特性
 棧很是適合於須要「就近匹配」的場合
 代碼實現,附件中02_ListStatic文件夾內ide

二、棧的典型應用二[小型計算器的實現]

 在數學計算中,人類習慣相似"9 + (3 - 1) * 5"這樣的中綴表達形式,即數字在運算符號的兩邊,而對於計算機而言,更適合處理算式是後綴表達式,即相似"9 3 1 – 5 * +"這樣的形式,所以必然有,從中綴表達式到後綴表達式的過程,而且計算機利用後綴表達式計算的過程,而這些均可以經過棧實現。
中綴表達式轉換爲後綴表達式的思路3d

 遍歷中綴表達式中的數字和符號
  對於數字:直接輸出
  對於符號:
  左括號:進棧
  符號:與棧頂符號進行優先級比較
   棧頂符號優先級低:進棧
   棧頂符號優先級不低:將棧頂符號彈出並輸出,以後進棧
  右括號:將棧頂符號彈出並輸出,直到匹配左括號
 遍歷結束:將棧中的全部符號彈出並輸出

算法框架
4、棧的實現及其典型應用
後綴表達式計算的思路code

 遍歷後綴表達式中的數字和符號
  對於數字:進棧
  對於符號:
   從棧中彈出右操做數
   從棧中彈出左操做數
   根據符號進行運算
   將運算結果壓入棧中
 遍歷結束:棧中的惟一數字爲計算結果

算法框架
4、棧的實現及其典型應用
小結
 中綴表達式是人習慣的表達方式
 後綴表達式是計算機喜歡的表達方式
 經過棧能夠方便的將中綴形式變換爲後綴形式
 中綴表達式的計算過程相似程序編譯運行的過程
 代碼實現,附件中02_ListStatic文件夾內blog

算法的實現附件get

相關文章
相關標籤/搜索