1樓:
從演算法來說,要考慮中綴的運算子優先順序,括號等,可以使用簡單語法制導翻譯,去看編譯原理書吧,從資料結構來說,可以使用二元樹和棧。使用二元樹就是先建立表示式的樹,然後後根遍歷即可。難點在建立樹。
使用棧的演算法也很多,說個好想的。假設表示式的字元來自輸入流in,建立棧a存放運算子,b存放結果,從in讀入一個運算元壓進b,讀入一個運算子壓進a,如此反覆。
1.讀入一個元素e
2.如果e是運算元或者(,壓入b,跳轉到1
3.如果e是運算子(不包含括號),跳轉到3.1
4.如果e是),跳轉到4.1
5.如果e是eof,即輸入流結束,反覆彈出a棧頂壓入b,直到a為空,演算法結束,b從棧底到棧頂的符號即為字尾表示式(需要把b翻個個兒^_^)
3.1.判斷a的棧定符號t,如果t不為(,且優先順序大於等於e,則彈出t壓入b,跳轉到4,如果t為空,即棧中為空,或其他情況直接把e壓入a,跳轉到1
4.1.彈出a的棧頂壓入到b,如此反覆直到彈出的符號為(,(和)不要壓入b,跳轉到1
這是我臨時想的,可能還有bug,或描述不清的地方,如果上網搜的話應該有很多源**的,如果學過編譯原理的話還可以有更好的演算法,這個演算法沒考慮容錯性。
2樓:匿名使用者
建議看《資料結構》中關於棧的實現部分即可解決。
C 字尾表示式轉中綴表示式
我公司使用的編碼規範,不方便發太多,你借鑑一下吧 規則 6 2 在表示式中使用括號,使表示式的運算順序更清晰。由於將運算子的優先順序與結合律熟記是比較困難的,為了防止產生歧義並提高可讀性,即使不加括號時運算順序不會改變,也應當用括號確定表示式的操作順序。正例 if iyear 4 0 iyear 1...
c語言字尾表示式求值詳細程序,可執行的
什麼字尾表示式?檔名的字尾?c語言資料結構 字尾表示式求值 char a 10 11 字串自動以 0 結束 c語言資料結構實現字尾表示式求值 這個我會,可以幫你寫!維繫一個棧,表示式一個指標從前遍歷到最後,是數的話,就壓棧。是運算的話,就退棧 計算,並將結果壓縮。計算機算這個很簡單 資料結構c語言版...
pid控制的表示式,pid控制的數學表示式
理想pid和不完全微分pid表示式 pid控制的數學表示式 墨汁諾 pid控制器的輸出為 誤差乘比例係數kp ki 誤差積分 kd 誤差微分。kp e ki edt kd de dt 版 式中的t為時間,即對權時間積分 微分 上式為三項求和。pid控制器由比例單元 p 積分單元 i 和微分單元 d ...