中綴 字首 字尾表示式 相互轉換

2021-08-08 21:40:00 字數 3652 閱讀 4542

1.中綴表示式:便於人看

2.字首表示式(波蘭式):運算子在前面,運算數在後面

3.字尾表示式(逆波蘭式):運算數在前面,運算子在後面

中綴- - - ->字首

優先順序先乘除再加減,入棧方向從右往左,棧外的符號想進棧,棧內的符號想出棧。棧外左括號不能進棧,棧外右括號優先順序最高。棧內右括號優先順序最低。

中綴- - - ->字尾

簡單規則:優先順序先乘除再加減,入棧方向從左往右,棧外的符號想進棧,棧內的符號想出棧。棧外右括號不能進棧,棧外左括號優先順序最高。棧內左括號優先順序最低。

例題:中綴表示式為3+4*(5-3)/(4-2)

轉換為字首表示式為+3*4/-53-42

轉換為字尾表示式為3453-*42-/+

第一種方法:加括號法

字首:把符號放在本級的括號前

字尾:把符號放在本級的括號後

如中綴表示式加括號後:(3+((4*(5-3))/(4-2)))

把符號放在本級的括號前:+(3/(*(4-(53))-(42)))

去掉括號,字首表示式即:+3/*4-53-42

如中綴表示式加括號後:(3+((4*(5-3))/(4-2)))

把符號放在本級的括號前:(3((4(53)-)*(42)-)/)+

去掉括號,字尾表示式即:3453-*42-/+

第二種方法:堆疊法

c語言**:

中綴- - - - >字首:

//1.先定義巨集,優先順序對應的數字,數字越大,優先順序越低

#define opera_prio_plus_in_front 4 //棧內+

#define opera_prio_minus_in_front 4 //棧內-

#define opera_prio_multiply_in_front 2 //棧內*

#define opera_prio_division_in_front 2 //棧內 /

#define opera_prio_right_brackets_in_front 10 //棧內 ) //棧內時右括號優先順序最低

//左括號不能進棧

#define opera_prio_plus_out_front 5 //棧外+

#define opera_prio_minus_out_front 5 //棧外-

#define opera_prio_multiply_out_front 3 //棧外*

#define opera_prio_division_out_front 3 //棧外 /

#define opera_prio_left_brackets_out_front 10 //棧外( //棧外時左括號優先順序最低

#define opera_prio_right_brackets_out_front 1 //棧外) //棧外時右括號優先順序最高

#define opera_prio_err_front -1 //

//字首

//2.利用巨集得出每個運算子的優先順序代表的數字,便於比較

int priority_midtofirst(char opera, bool instack)

}else

//false 棧外

}return prio;

}//3.把中綴表示式改為字首表示式

int midtofirst(char *last,const

char *mid)

else

//運算子

else

//棧不空,比較優先順序

else

if(prioout > prioin)//棧外優先順序低

else

//優先順序相等,()匹配,直接刪除}}

}last[i++]=*mid;//中綴表示式第乙個運算元一定是數字

while(!isempty(&s))

last[i]='\0';//字串以『\0』結尾

return i;//返回last元素個數

}//4、測試

int main()

printf("mid:%s\nlast:%s\n",mid,last);

return

0;}

中綴- - - - >字尾:

//字尾

//1.定義巨集

#define opera_prio_plus_in_back 4 //棧內+

#define opera_prio_minus_in_back 4 //棧內-

#define opera_prio_multiply_in_back 2 //棧內*

#define opera_prio_division_in_back 2 //棧內 /

#define opera_prio_left_brackets_in_back 10 //棧內 ( //棧內時左括號優先順序最低

//右括號不能進棧

#define opera_prio_plus_out_back 5 //棧外+

#define opera_prio_minus_out_back 5 //棧外-

#define opera_prio_multiply_out_back 3 //棧外*

#define opera_prio_division_out_back 3 //棧外 /

#define opera_prio_left_brackets_out_back 1 //棧外( //棧外時左括號優先順序最高

#define opera_prio_right_brackets_out_back 10 //棧外) //棧外時右括號優先順序最低

#define opera_prio_err_back -1 //

//2.利用巨集得出每個運算子的優先順序代表的數字,便於比較

int priority_midtoback(char opera, bool instack)

}else

//false 棧外

}return prio;

}//3.把中綴表示式改為字尾表示式

void midtolast(char *last,const

char *mid)

else

//運算子

else

//棧不空,比較優先順序

else

if(prioout > prioin)//棧外優先順序低

else

//優先順序相等,()匹配,直接刪除}}

}while(!isempty(&s))

last[i]='\0';

}//4、測試

int main()

堆疊方法的**較長,若有更簡潔的**,歡迎指正。

算術表示式的字首,中綴,字尾相互轉換

中綴表示式 中綴記法 中綴表示式是一種通用的算術或邏輯公式表示方法,操作符以中綴形式處於運算元的中間。中綴表示式是人們常用的算術表示方法。雖然人的大腦很容易理解與分析中綴表示式,但對計算機來說中綴表示式卻是很複雜的,因此計算表示式的值時,通常需要先將中綴表示式轉換為字首或字尾表示式,然後再進行求值。...

字首 中綴 字尾表示式的相互轉換方法

乙個中綴式到其他式子的轉換方法 這裡我給出乙個中綴表示式 a b c d e 第一步 按照運算子的優先順序對所有的運算單位加括號 式子變成 a b c d e 第二步 轉換字首與字尾表示式 把運算符號移動到對應的括號前面 則變成 a b c d e 把括號去掉 a b c d e 字首式子出現 把運...

字首,中綴,字尾表示式轉換

title 字首,中綴,字尾表示式轉換 date 2017 09 10 19 45 09 categories technology tags 在計算機中表示式有三種,字首表示式 波蘭式 中綴表示式,字尾表示式 逆波蘭式 如表示式 a b c d e f 字首表示式 a b cd ef 中綴表示式 ...