利用堆棧進行表達式求值的方法(二)

利用堆棧進行表達式求值的方法(一)中描述的方法並不能解決「(1+((2*3+4)*(4*5))」該問題,現將2個堆棧變成1個堆棧,方法以下:正則表達式

一、將表達式從左到右開始逐個將左括號、數值和操做符壓入棧中;數組

二、遇到右括號時,將棧中元素逐個彈出,直到彈出左擴號爲止;.net

三、將彈出的元素存放置一個臨時的線性集合中(數組、鏈表或者堆棧中),若是是數組和鏈表從後向前依次遍歷出子表達式,並按照加減乘除的優先級計算表達式的值,而後再將值壓入棧中;blog

四、重複1~3的步驟,最後計算的值爲表達式的最終結果。get

使用該方法能夠解決相似於a  and  b  not  c這樣的邏輯運算問題,後面的重點仍是討論如何將該方法用於正則表達式轉換成非肯定性有限自動機NFA!遍歷

相關文章
相關標籤/搜索