中綴表示式轉字尾表示式,並求值

2021-09-14 04:10:43 字數 1628 閱讀 2729

資料結構之棧的應用

先實現求值這一步吧,已知字尾表示式

轉換這一環節待更新…

上**:

/* 中綴表示式轉字尾表示式(seqstack)以及求值

* version: 1.0(求值,需要自己輸入字尾表示式)

* 2.0(加上轉化功能)

* 演算法: 建立乙個運算元棧,自左向右遍歷字尾表示式,遇到乙個運算元就入棧,

* 遇到乙個操作符就從棧中取出兩個運算元進行當前計算,載把結果入棧,

* 直到表示式末尾, 最後乙個入棧的就是最終結果

*/#include #include #define maxsize 100

#define datatype int

typedef struct seqstack, *pseqstack;

// 初始化順序棧

pseqstack init_seqstack()

// 判斷棧空

int empty_seqstack(pseqstack s)

// 入棧

void push_seqstack(pseqstack s, datatype x)

else

}// 出棧,儲存棧頂元素於*x中,並刪除

void pop_seqstack(pseqstack s, datatype *x)

else

}// 取棧頂元素,只是獲取他的值並存入*x,並沒有取出來(刪除),注意區別

int gettop_seqstack(pseqstack s, datatype *x)

else

}// 銷毀棧,引數為待銷毀順序棧的指標位址

void destory_seqstack(pseqstack *s)

/* 判斷是否是運算元 */

int isnum(char c)

return 0;

}char transfer()

/* 核心函式 */

int calculate(char *a)

else

/* 臨時結果入棧 */

push_seqstack(s, c);

}ch = *a ++;

}gettop_seqstack(s, &result);

destory_seqstack(&s);

return result;

}int main();

printf("計算結果: %d\n",calculate(num));

return 0;

}

輸入:

char num[12] = ;
執行結果:

qian@qian-asus:~/vs code/data_structure/.vscode/examples$ cd "/home/qian/vs code/data_structure/.vscode/examples/" && gcc -g mid_2_suffix.c -o mid_2_suffix && "/home/qian/vs code/data_structure/.vscode/examples/"mid_2_suffix

5

中綴表示式轉字尾表示式求值

1.開始在棧中壓入乙個 然後從中綴表示式的左邊開始遍歷,如果遇到數字直接放入佇列。如果是操作符則和棧頂比較,如果優先順序大於棧頂則入棧,否則將棧頂壓入佇列並將當前操作符入棧。2.如果遇到 則無條件入棧不用和棧頂進行比較。3.如果遇到 不用入棧,從棧頂開始將棧內元素彈出並壓入佇列中,直到遇到 將 彈出...

中綴表示式轉字尾表示式 以及 字尾表示式求值

字尾表示式也叫逆波蘭表示式,其求值過程可以用到棧來輔助儲存。假定待求值的字尾表示式為 6 5 2 3 8 3 則其求值過程如下 1 遍歷表示式,遇到的數字首先放入棧中,此時棧如下所示 2 接著讀到 則彈出3和2,執行3 2,計算結果等於5,並將5壓入到棧中。3 讀到8,將其直接放入棧中。4 讀到 彈...

C 實現中綴表示式轉字尾表示式並求值

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