點這裡
戳這裡現在大家都知道了什麼是中綴表示式,字尾表示式。好,進正題。本文主要是用c語言,來做簡單的程式設計實現轉化功能。
例如,輸入 :(5+3)*2+(6+3)
轉化後的結果:5 3 + 2 * 6 3 + +(後附有圖)
原理:建立乙個棧,對於中綴表示式,①如果遇到左括號"(",直接入棧。②如果遇到數字直接列印到螢幕上。③如果遇到右括號")",將棧中的元素依次出棧直到遇見左括號"("。④其他情況就通過優先順序比較,設定乙個二維陣列和乙個一維陣列,如下:
額,本人能力有限,所以難免有bug,讀者在執行**的時候,括號的輸入是英文的(可以自行加上中文),注意輸入格式。//x1代表棧頂的元素,x2代表字串中,當前讀到的
//x1高於x2的優先順序,將x1輸出,接著比較新的棧頂元素
// 運算子優先順序關係表
// x2 + - * / ( ) # //x1
int link[7]
[7]=
;//1--高,2--不存在,0--相等,-1--低
elemtype link2[7]
=;//一維陣列搜尋字元的位置
**如下:
編譯環境是(code::blocks)。
嗯。。執行結果#include
#include
#include
#define max 100
typedef
char elemtype;
typedef
struct node stacknode;
void
initstack
(stacknode *
*p)int
stackempty
(stacknode *p)
void
push
(stacknode *
*top, elemtype x)
void
pop(stacknode *
*top, elemtype *x)
}void
top(stacknode *
*top, elemtype *x)
void
change
(elemtype *str)
//中綴轉字尾
;//1--高,2--不存在,0--相等,-1--低
elemtype link2[7]
=;//一維陣列搜尋字元的位置
elemtype x;
int i=
0,j,k;
stacknode *p;
initstack
(&p)
;push
(&p,
'#')
;//棧內存放#,用於比較(與頭結點的建立原理相似)
while
(str[i]
)pop
(&p,
&x);
}else
if(link[k]
[j]==-1
)push
(&p,str[i]);
} i++;}
while
(stackempty
(p)&&p->date!=
'#')
//如果棧不是空的,依次輸出
}int
main()
中綴 字尾表示式 四則運算
中綴表示式轉化為字尾表示式,並通過字尾表示式計算值 轉化規則 出棧 出棧後元素新增到字尾表示式的末尾 中綴表示式掃瞄完畢後,若棧內元素不為空,依次出棧直到棧為空,出棧元素新增到字尾表示式後 舉例 3 2 5 4 2 過程如下 建立操作符棧,以及儲存字尾表示式的佇列 從頭到尾掃瞄中綴表示式,首先掃瞄到...
四則運算(c語言)
這個作業屬於哪個課程 這個作業要求在 homework 11376 作業目標 寫乙個能自動生成小學四則運算題目的程式 學號 3190704109 源 int right 0 int wrong 0 void add else void minu else void mul else void di ...
C 四則運算
一 問題及 檔名稱 兩個浮點數的四則運算 02.作 者 李欽 03.完成日期 2016 年 3 月 12 日 04.版 本 號 v1.0 05.對任務及求解方法的描述部分 06.輸入描述 07.問題描述 略 08.程式輸出 略 09.問題分析 略 10.演算法設計 略 11.includevoid ...