C語言中綴轉字尾四則運算 For初學者

2021-08-28 11:23:22 字數 1809 閱讀 2071

點這裡

戳這裡現在大家都知道了什麼是中綴表示式,字尾表示式。好,進正題。本文主要是用c語言,來做簡單的程式設計實現轉化功能。

例如,輸入 :(5+3)*2+(6+3)

轉化後的結果:5 3 + 2 * 6 3 + +(後附有圖)

原理:建立乙個棧,對於中綴表示式,①如果遇到左括號"(",直接入棧。②如果遇到數字直接列印到螢幕上。③如果遇到右括號")",將棧中的元素依次出棧直到遇見左括號"("。④其他情況就通過優先順序比較,設定乙個二維陣列和乙個一維陣列,如下:

//x1代表棧頂的元素,x2代表字串中,當前讀到的

//x1高於x2的優先順序,將x1輸出,接著比較新的棧頂元素

// 運算子優先順序關係表

// x2 + - * / ( ) # //x1

int link[7]

[7]=

;//1--高,2--不存在,0--相等,-1--低

elemtype link2[7]

=;//一維陣列搜尋字元的位置

額,本人能力有限,所以難免有bug,讀者在執行**的時候,括號的輸入是英文的(可以自行加上中文),注意輸入格式。

**如下:

編譯環境是(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 ...