C語言 將中綴表示式轉換為字尾表示式並計算結果

2021-07-13 01:15:39 字數 2181 閱讀 7580

本**有嚴重bug!!!

本**有嚴重bug!!!

本**有嚴重bug!!!

重要的事情說三遍!!!!

請移步到:c語言課設:中綴表示式轉字尾表示式並求值(續)

#include#include#include#include#define elemtype int

using namespace std;

typedef struct stacksqstack;

int in_op(char a); //判斷是否為運算子

int pop(sqstack * s,elemtype e); //出棧

int gettop(sqstack * s,elemtype e); //獲得棧頂元素

int createstack(sqstack * s); //初始化棧

int push(sqstack * s,elemtype e); //壓棧

void createexpression(char * str); //建立中綴表示式

char * transmitexpression(char * a);//將中綴表示式轉換為字尾表示式

int is_pop(char x,char y); //根據運算子優先順序判斷是否出棧

elemtype evaluateexpression(char *a);//根據字尾表示式計算結果

elemtype theta(int l,char m,int r); //計算的元操作

int main()

//獲得棧頂元素

elemtype gettop(sqstack * s)

//壓棧

int push(sqstack * s,elemtype e)

*s->top=e;

s->top++;

return 1;

}//彈出

int pop(sqstack * s,elemtype * e)

//建立中綴表示式

void createexpression(char * str)

//判斷是否為運算子

int in_op(char a)}/*

函式功能:將中綴表示式轉換為字尾表示式

引數:中綴表示式

返 回 值:字尾表示式

*/char * transmitexpression(char * a);

sqstack optr;

elemtype e;

createstack(&optr);

push(&optr,'#');

for(i=0;a[i];i++)else

if(is_pop(gettop(&optr),a[i]))

pop(&optr,&e); //將左括號彈出

}else

push(&optr,a[i]);//將新運算子入棧

}}else

} }//中綴表示式掃瞄完成後,彈出所有剩下的運算子

while(gettop(&optr)!='#')

//新分配乙個記憶體,用於返回

char * result = (char *)malloc(sizeof(char)*20);

strcpy(result,b);//將b中的元素結果複製到新分配記憶體中

return result;

}//判斷棧內與棧外運算子的優先順序,然後再次判斷是否將棧內元素彈出

/* 棧外

棧 + - * / ( )

內 + 1 1 0 0 0 1

- 1 1 0 0 0 1

* 1 1 0 0 0 1

/ 1 1 1 1 0 1

( 0 0 0 0 0 0

) 1 1 1 1 1 1

*/ int is_pop(char x,char y)

return 1;

}//根據字尾表示式計算結果

elemtype evaluateexpression(char *a)else

} return gettop(&opnd);

}//基本的元運算

elemtype theta(int l,char m,int r)

}

Python將中綴表示式轉換為字尾表示式

遵循以下步驟 1 初始化兩個棧 運算子棧s1和儲存中間結果的棧s2 2 從左至右掃瞄中綴表示式 3 遇到運算元時,將其壓入s2 4 遇到運算子時,比較其與s1棧頂運算子的優先順序 4 1 如果s1為空,或棧頂運算子為左括號 則直接將此運算子入棧 4 2 否則,若優先順序比棧頂運算子的高,也將運算子壓...

中綴表示式轉換為字尾表示式

今天我們課前談一談,要說點什麼好呢?最近小甲魚發現,很多魚油在學習資料結構和演算法的時候積極性已經開始有點下降了。甚至很多朋友懷疑資料結構和演算法到底有沒有用?實話說,在大廈的防震設計 消除疾病 防止水源枯竭這些實際問題中,很遺憾,資料結構和演算法幾乎起不到任何直接作用。那為什麼我們要學呢?很簡單,...

中綴表示式轉換為字尾表示式

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