四則運算表示式求值 中綴轉字尾然後求值 (有括號)

2021-10-08 19:03:50 字數 1577 閱讀 5427

參考演算法筆記,資料結構部分棧的內容
計算中綴表示式,先轉換成字尾表示式,再計算

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace std;

typedef

long

long ll;

struct node};

string str;

//數字放在queue中,利用stack調整運算子的位置,最終字尾表示式放在q中

stack s;

queue q;

map<

char

,int

> op;

void

transform()

while

(isdigit

(str[i]))

;//數字放在queue中,利用s調整運算子的位置

q.push

(node

(num,

'\0'

,true))

;continue;}

else

if(str[i]

=='('

)else

if(str[i]

==')'

) s.

pop();

}else

s.push

(node(0

,str[i]

,false))

;}++i;

}while

(!s.

empty()

)}void

print()

else

printf

("%c "

,f.op)

; q2.

pop();

}printf

("\n");

}//利用棧計算字尾表示式

double

cal(

)else

}return s.

top(

).num;

}int

main

(void

)else

++iter;

}//清空s

while

(!s.

empty()

) s.

pop();

//清空q

while

(!q.

empty()

) q.

pop();

//中綴表示式轉換成字尾

transform()

;print()

;//列印字尾表示式

//計算字尾表示式結果

double ans=

cal();

cout<}}

四則運算表示式求值

03 四則運算表示式求值 輸入輸入為四則運算表示式,僅由陣列 四則運算符 左右括號組成,不含空格。假設運算子結果都是整數。輸出輸出這個表示式的值 分析首先我們要搞清楚表示式的定義是什麼 表示式 由乙個或者多個項組成,多個項的表示式由 連線 項 由乙個或者多個因子組成,多個因子由 連線 因子 由 表示...

四則運算表示式求值

表示式求值是關於棧的應用,涉及到中綴與字尾式的轉換,本文關於10以內不帶括號的四則運算。9 3 4 x 3 24 1 x 9 5 9 9 5 x 9 4 6 2 x 3 1 42 思路 遇到數字直接入數字棧。遇到運算子,第乙個運算子直接入符號棧,後面的需要與符號棧棧頂元素比較優先順序。若當前優先順序...

中綴 字尾表示式 四則運算

中綴表示式轉化為字尾表示式,並通過字尾表示式計算值 轉化規則 出棧 出棧後元素新增到字尾表示式的末尾 中綴表示式掃瞄完畢後,若棧內元素不為空,依次出棧直到棧為空,出棧元素新增到字尾表示式後 舉例 3 2 5 4 2 過程如下 建立操作符棧,以及儲存字尾表示式的佇列 從頭到尾掃瞄中綴表示式,首先掃瞄到...