#include
#include
#include
#include
#include
#include
#include
#include
#include
using
namespace std;
//對於輸入串,處理分離出數字串,將其轉換成數字,分離運算子,
//中綴轉字尾 若當前處理的單位是數字,將其入隊(字串佇列),如果是運算子若棧《字元棧》當前為空或者棧頂運算子
//優先順序比其低則入棧,若棧頂運算子優先順序比其高或等於,則棧頂一直出棧直到棧頂運算子優先順序比其低
//字尾表示式中位置處於右邊的運算子後運算,即優先順序低,相同優先順序的按從左到右的優先順序來處理
//例如對於a+b*c/d,abc*d/+
//逆波蘭式佇列中存的是字串
//計算逆波蘭式,從左到右遍歷該串,是數字則入棧《數字棧》,是運算子則取出棧兩個元素運算,並將結果入棧,直到掃瞄
//結束,此時棧頂元素即為結果
//字串轉整數函式
stack<
char
>s1;
stack<
double
>s2;
queueq;
string str;
map<
char
,int
>m1;
void
tosuffix()
q.push
(temp);}
else
if(str[i]
!=' '
)else
s1.push
(str[i]);
} i++;}
i++;}
while
(!s1.
empty()
)}void
read
(string& str)
}void
fun(string str)
//轉換成double併入棧
s2.push
(sum);}
void
process
(char x)
else
if(x==
'-')
else
if(x==
'*')
else
if(x==
'/')
}int
main()
while
(!s1.
empty()
)while
(!q.
empty()
)//read(str);之前的輸入放在codeup評判會超時
//if(str[0]=='0'&&str.length()==1)
tosuffix()
;while
(!q.
empty()
)else
q.pop();
}printf
("%.2f\n"
,s2.
top())
;}return0;
}
中綴表示式轉逆波蘭表示式
op icp064 21isp015 36思路假設表示式為string ex a b c d 將表示式處理為 a b c d 以 做末尾標識,初始時 棧s 中放入乙個 int i 0 icp表示表示式當前掃瞄項的字元的優先順序,isp表示棧頂操作符的優先順序 優先順序表如上 當 棧非空 或 當前掃瞄...
逆波蘭中綴轉字尾表示式並求值
建立鏈棧 linkstack.h pragma once typedef int elemtype typedef struct node node typedef struct linkstack linkstack,ptrstack 初始化 void init ptrstack stack 入棧...
表示式樹建立與計算(中綴表示式轉逆波蘭式)
給定一串計算表示式 例如 1 2 4 2 3 4 2 4 2 計算此表示式的值,並輸出此表示式樹的前序中序後序序列。首先,給定的表示式為正常邏輯的中綴表示式,我們需要將其轉化為逆波蘭式 字尾表示式 如下給出理由 例如 a b c 它的二叉樹如下 前序序列為 a b c 中序序列為 a b c 後序序...