中綴表示式計算器

2021-06-18 18:33:03 字數 2306 閱讀 6681

假如給定乙個中綴表示式:1+(2-3)*4+10/5利用棧就可以匯出字尾表示式123-4*+105/+

當得到乙個字尾表示式時就很容易的求出表示式的值了,也是用棧計算的,對於123-4*+105/+,從前往後,如果遇到運算元的時候直接入棧,遇到操作符,就從棧中彈出兩個操作,那下面的跟上面的那個預算,就可以得到123-4*+105/+的值為-1了,張銘的資料結構堆疊中講的有。

下面是個中綴表示式的例子:

stack.h

#include #include //棧節點資料結構   

class doublenode

};

//棧,用來儲存採用字尾表示式進行四則運算時的運算元

class doublestack

~doublestack();

void push(double value);

double pop();

bool isempty()

double gettop();

};

//棧節點資料結構

class charnode

};

//棧,用來儲存中綴表示式轉換成字尾表示式時的運算子

class charstack

~charstack();

void push(char value);

char pop();

bool isempty()

char gettop();

void makeempty();

};

stack.cpp

#include "stack.h"

doublestack::~doublestack()

}void doublestack::push(double value)

double doublestack::pop()

}double doublestack::gettop()

charstack::~charstack()

}void charstack::push(char value)

char charstack::pop()

}void charstack::makeempty()

}char charstack::gettop()

arithmetic.h

#include #include #include #include #include "stack.h"   

class data

; class arithmetic

;

arithmetic.cpp

#include "arithmetic.h"   

void arithmetic::midtopost(char *c)

cstack.push(c[k]);

} else if (c[k] == ')')

} }

else if (c[k] == '#')

} else if (c[k] >= '0' && c[k] <= '9')

post[i].num = atof(num);

post[i].op = '#';

i++;

k--;

} else

k++;

} curlen = i;

} //棧內優先順序,棧內優先順序大於棧外優先順序

//'('的棧內優先順序應該比所有的操作符都小(除了#)

//')'的棧內優先順序應該最大

//+-的優先順序一致,*/的優先順序一致

int arithmetic::isp(char op)

return pri;

} //棧外優先順序

int arithmetic::icp(char op)

return pri;

} //根據字尾表示式進行四則運算

double arithmetic::calculate()

else //如果是操作符,就取出兩個數字進行運算

} }

return dstack.pop();

}

main.cpp

#include "arithmetic.h"

int main()

逆波蘭計算器 中綴表示式轉字尾表示式

1 2 3 4 5 2 這就叫中綴表示式,也就是說運算子在兩個運算元中間,這比較符合我們人類正常的計算題書寫規則與習慣.一目了然有木有 1,2,3依次進棧,此時棧內依次為1 2 3 遇到 2 3出棧計算得到5,5再進棧,此時棧內依次為1 5 4進棧,此時棧內依次為1 5 4 遇到 4 5 出棧計算得...

簡單計算器 中綴表示式轉字尾表示式 求值

命題人 外部匯入 時間限制 1.000 sec 記憶體限制 32 mb 解決 1817 提交 4382統計 題目描述 讀入乙個只包含 的非負整數計算表示式,計算該表示式的值。輸入測試輸入包含若干測試用例,每個測試用例佔一行,每行不超過200個字元,整數和運算子之間用乙個空格分隔。沒有非法表示式。當一...

表示式計算器

早在上大學的時候,就想編寫乙個可以計算數學表示式的計算器,因為windowsxp自帶的計算器不支援表示式輸入,當要計算乙個算式時,不太方便。表示式計算器看似簡單,但要想把它做完善,不太容易,經過幾次改進之後,於一年前完成了這個小程式,雖然可能會有一些不足,不過也不打算再投入時間了,價值不大,只是拿來...