棧求解中綴表示式

2021-09-24 15:10:58 字數 1581 閱讀 5526

表示式求值是進行資料處理的最基本操作。請編寫程式完成乙個簡單算術表示式的求值。要求如下: 

(1) 運算子包括:+、-、*、-、^(乘方)、括號

(2)運算量為數值常量,根據自己的能力可以對運算量做不同的約束,例如1位整數、多位整數、實數等(會有不同的測試用例);

輸入:一行,即表示式,以「=」結束。例如:

5*(8-3)+6/5=

輸出:一行,即表示式的值。結果值為整數時輸出為整數,如果有小數時保留5位小數。

26.20000

#define stack_init_size 100

#define stack_add 10

#include #include #include #include #include #include using namespace std;

typedef struct

sqstack1;

typedef struct

sqstack2;

void initstack(sqstack1 &s)

void initstack(sqstack2 &s)

void push(sqstack1 &s,char e)

*s.top++=e;

return;

}void push(sqstack2 &s,double e)

*s.top++=e;

return;

}bool pop(sqstack1 &s,char &e)

bool pop(sqstack2 &s,double &e)

char gettop(sqstack1 &s)

double gettop(sqstack2 &s)

bool in(char c)

double todouble(char s)

if(s[i] == '.')

i++;

for(power = 1.0; isdigit(s[i]); i++)

return sign * val / power;

}double power(double a,double b)

; char ch[8]= ;

int i,j;

for(i=0; i<8; i++)

if(m==ch[i])

break;

for(j=0; j<8; j++)

if(n==ch[j])

break;

return prior[i][j];

}void perfect(char s)

s1[j++]=s[i++];

}s1[j]='\0';

i=0;

while(s1[i])

s[i]='\0';

}double evaluateexpression()

push(opnd,todouble(z[k]));

k++;

}else

switch(precede(gettop(optr),s[j]))

}return gettop(opnd);

}int main()

棧 中綴 字尾表示式

利用棧計算字尾表示式 include include include using namespace std int main s.push num i cout i else if str i str i str i str i s.push res cout result 0 利用棧,把中綴表示...

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

題目 給乙個中綴表示式 即標準形式的表示式 列印該表示式的字尾表示式。中綴表示式最大的不同就是去掉了表示運算子優先順序的括號。運算元為26個小寫或大寫的英文本母 注意不包括數字和其他字元 操作符為 一共八個。具體見例子見下圖 如下 include include include using name...

棧 中綴表示式轉字尾表示式

中綴轉字尾的演算法 遍歷中綴表示式中的數字和符號 對於數字 直接輸出 對於符號 左括號 進棧 運算符號 與棧頂符號進行優先比較 若棧頂符號優先順序低 此符號進棧 預設棧頂若是左括號,則左括號的優先順序最低 若棧頂符號優先順序高 將棧頂符號彈出 並輸出 直到棧頂的符號優先順序低,然後進棧 右括號 將棧...