習題3.11 表示式轉換 (25分)
算術表示式有字首表示法、中綴表示法和字尾表示法等形式。日常使用的算術表示式是採用中綴表示法,即二元運算子位於兩個運算數中間。請設計程式將中綴表示式轉換為字尾表示式。
輸入格式:
輸入在一行中給出不含空格的中綴表示式,可包含+、-、*、\以及左右括號(),表示式不超過20個字元。
輸出格式:
在一行中輸出轉換後的字尾表示式,要求不同物件(運算數、運算符號)之間以空格分隔,但結尾不得有多餘空格。
輸入樣例:
2+3*(7-4)+8/4
輸出樣例:
2 3 7 4 - * + 8 4 / +
c語言實現:
#include
#include
#include
#define error - 1
#define maxlenth 100
#define maxsize 20
typedef
char elementtype;
typedef
struct snode* ptrtosnode;
struct snode
;typedef ptrtosnode mystack;
bool isempty
(mystack ms)
;mystack create()
;bool pushdata
(mystack ms, elementtype x)
;elementtype popdata
(mystack ms)
;int
oprtodig
(char ch)
;int
main()
isfirst = false;
if(exrn[i]
=='+'
)printf
("%c"
, exrn[i]);
i++;while
((exrn[i]
>=
'0'&& exrn[i]
<=
'9')
|| exrn[i]
=='.'
)continue;}
else
else
if(exrn[i]
==')')}
else
else
elseif(
oprtodig
(exrn[i]
)<=
oprtodig
(stk->next->data)
)while
((stk->next!=
null)&&
(oprtodig
(exrn[i]
)<=
oprtodig
(stk->next->data)))
;pushdata
(stk,exrn[i]);
}}}}
i++;}
while(!
isempty
(stk)
)system
("pause");
}int
oprtodig
(char ch)
return val;
}mystack create()
bool isempty
(mystack ms)
bool isfull
(mystack ms)
bool pushdata
(mystack ms,elementtype x)
elementtype popdata
(mystack ms)
else
}
中綴表示式轉字尾表示式
using system using system.collections.generic using system.text namespace 中綴表示式轉字尾表示式 class convert public void run top break case case while top 1 st...
中綴表示式轉字尾表示式
將乙個普通的中綴表示式轉換為字尾表示式的一般演算法是 首先需要分配2個棧,乙個作為臨時儲存運算子的棧s1 含乙個結束符號 乙個作為輸入字尾表示式的棧s2 空棧 s1棧可先放入優先順序最低的運算子 注意,中綴式應以此最低優先順序的運算子結束。可指定其他字元,不一定非 不可。從中綴式的左端開始取字元,逐...
中綴表示式轉字尾表示式
演算法 1.設定乙個運算子棧 初始時可以將棧頂運算子置為 2.按順序掃瞄中綴表示式,當輸入為運算元時就將其輸出到字尾表示式中 3.當輸入為運算子時,則比較輸入運算子和棧頂運算子的優先順序。若輸入運算子的優先順序高於棧頂運算子的優先順序,則將輸入運算子入棧 否則,棧頂運算子的優先順序高於或等於輸入運算...