中綴表示式轉逆波蘭式並計算

2021-10-12 18:47:46 字數 1609 閱讀 6944

#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 後序序...