顺序栈实现表达式求值(C语言实现)【栈】
生活随笔
收集整理的這篇文章主要介紹了
顺序栈实现表达式求值(C语言实现)【栈】
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
- 原理說明
- 代碼實現
原理說明
表達式求值一定會出現表達式中運算符的優先級問題。
運算規則:
先乘除,后加減;
從左算到右;
先括號內,后括號外;
運算符優先表:
上面表格中有一些比較特殊的位置:
① 相等 = 左括號遇到右括號相等說明左右括號匹配。
① # 和 # 遇到的時候也是 = ,我們在表達式的左邊人為的加上一個 # ,在表達式掃描完成之后再加上一個 # 表示表達式掃描完了。
③ 上面表格中出現的空白部分表示運算符遇到之后是毫無邏輯的,括號必須是相互匹配的,# 也必須是成對出現。
求表達式 4 + 2 * 3 - 10 / 5 的值。
計算順序為:
4 + 2 * 3 - 10 / 5 =
4 + 6 - 10 / 5 =
10 - 10 / 5
= 10 - 2
= 8
上面的計算結果我們不去考慮,主要去考慮上面表達式運算的過程。
先定義一個棧用來存儲操作數或結果:
定義另一個棧來存儲運算符:
過程:
讀入的運算符優先級比運算符棧頂元素的優先級高就入棧。
讀入的運算符優先級比運算符棧頂元素的優先級低就彈出棧頂元素,然后彈出兩個操作數進行計算,然后把計算結果入操作數或結果棧,然后繼續向后讀取進行判斷。
代碼實現
總結
以上是生活随笔為你收集整理的顺序栈实现表达式求值(C语言实现)【栈】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 队列的链式存储和实现(C语言)【队列】(
- 下一篇: 顺序栈实现括号匹配的检验(C语言实现)【