參考演算法筆記,資料結構部分棧的內容
計算中綴表示式,先轉換成字尾表示式,再計算
#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 過程如下 建立操作符棧,以及儲存字尾表示式的佇列 從頭到尾掃瞄中綴表示式,首先掃瞄到...