日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

顺序栈实现表达式求值(C语言实现)【栈】

發布時間:2025/3/20 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 顺序栈实现表达式求值(C语言实现)【栈】 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

  • 原理說明
  • 代碼實現

原理說明

表達式求值一定會出現表達式中運算符的優先級問題。

運算規則:
先乘除,后加減;
從左算到右;
先括號內,后括號外;

運算符優先表:

上面表格中有一些比較特殊的位置:
① 相等 = 左括號遇到右括號相等說明左右括號匹配。

① # 和 # 遇到的時候也是 = ,我們在表達式的左邊人為的加上一個 # ,在表達式掃描完成之后再加上一個 # 表示表達式掃描完了。

③ 上面表格中出現的空白部分表示運算符遇到之后是毫無邏輯的,括號必須是相互匹配的,# 也必須是成對出現。

求表達式 4 + 2 * 3 - 10 / 5 的值。
計算順序為:
4 + 2 * 3 - 10 / 5 =
4 + 6 - 10 / 5 =
10 - 10 / 5
= 10 - 2
= 8

上面的計算結果我們不去考慮,主要去考慮上面表達式運算的過程。

先定義一個棧用來存儲操作數或結果:

定義另一個棧來存儲運算符:

過程:
讀入的運算符優先級比運算符棧頂元素的優先級高就入棧。
讀入的運算符優先級比運算符棧頂元素的優先級低就彈出棧頂元素,然后彈出兩個操作數進行計算,然后把計算結果入操作數或結果棧,然后繼續向后讀取進行判斷。

# 入運算符棧 , 4 入操作數或結果棧。運算符棧頂 # < + , + 入運算符棧。2 入操作數或結果棧。棧頂 + < * , * 入運算符棧。3 入操作數或結果棧。棧頂 * > - , 運算符 * 出棧,操作數 2 3 出棧進行 * 運算。運算的結果 6 入操作數或結果棧。棧頂 + > - , 運算符 + 出棧,操作數 4 6 出棧進行 + 運算。運算的結果 10 入操作數或結果棧。運算符棧頂 # < - , - 入運算符棧。10入操作數或結果棧。運算符棧頂 - < / , / 入運算符棧。5入操作數或結果棧。運算符棧頂 / > # , 運算符 / 出棧,操作數 5 10 出棧進行 / 運算。運算的結果 2 入操作數或結果棧。運算符棧頂 - > # , 運算符 - 出棧,操作數 2 10 出棧進行 - 運算。運算的結果 8 入操作數或結果棧。運算符棧頂 # 遇到 # 相等,表達式求完。操作數或結果棧中是數據元素就是表達式計算完成之后的結果。

代碼實現

總結

以上是生活随笔為你收集整理的顺序栈实现表达式求值(C语言实现)【栈】的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。