逆波蘭計算器

2021-07-25 21:52:11 字數 1361 閱讀 9138

1.逆波蘭表示式用途

逆波蘭表示式是一種十分有用的表示式,它將複雜表示式轉換為可以依靠簡單的操作得到計算結果的表示式。例如(a+b)*(c+d)轉換為ab+cd+*

2.逆波蘭表示式邏輯實現

如果當前字元為變數或者為數字,則壓棧,如果是運算子,則將棧頂兩個元素彈出作相應運算,結果再入棧,最後當表示式掃瞄完後,棧裡的就是結果。

3.為啥要用逆波蘭表示式

例如(a+b)*(c+d)轉換為ab+cd+*   計算機在計算普通表示式時,要對運算優先順序用遞迴進行判斷,對於更為複雜的表示式會使計算機運算效率變低甚至崩潰。而逆波蘭表示式只需要進行簡單的入棧出棧操作就可以完成任何普通表示式的運算。

4.普通表示式——>逆波蘭表示式

(1)          a+b——>a b +

(2)    a+(b-c)——>a b c - +

(3)a+(b-c)*d——>a b c -  d * + 

5.逆波蘭表示式運用的小例子

#include #include#include //isdigit

#define stack_init_size 20

#define stackincrement 10

#define maxbuffer 10

typedef double elemtype;

typedef struct

sqstack;

void initstack(sqstack *s)

s->top = s->base;

s->stacksize = stack_init_size;

}//push操作

void push(sqstack *s, elemtype e)

s->top = s->base + s->stacksize;

s->stacksize = s->stacksize + stackincrement;

} *(s->top) = e;

s->top++;

}void pop(sqstack *s, elemtype *e)

*e = *--(s->top);

}int stacklen(sqstack s)

int main()

scanf("c", &c);

if (c == ' ')

}switch (c)

else

break;

} scanf("%c", &c);

} pop(&s, &d);

printf("\n最終的計算結果為:%f\n", d);

return 0;

}

逆波蘭計算器

include include include define stack init size 20 初始化棧的空間 define stackincrement 10 擴充套件空間 define maxbuffer 10 最大緩衝區 typedef double elemtype 建立乙個棧 type...

逆波蘭計算器

遍歷表示式。碰到數字將其放到棧中。遇到計算符 從棧中彈出兩個數用計算然後再從新入棧。a 在棧中的最後乙個數即為結果 轉換前 2 9 6 3 5 4轉換後 2963 5 4 使用逆波蘭計算結果為 16.0public class rpncalculator 如果是不是計算符,直接入棧 stack.pu...

逆波蘭計算器原理

字首表示式 符號在前左,數字在右。符號數字位置考慮運算優先順序。中綴表示式 符號在數字中間 即正常書寫的表式結構 1 2 3 4 5 字尾 表示式 將要進行的部分運算的數字在前運算符號在後,接著其它部分的運算。計算表示式一般包含數值,運算子,括號,包括運算子的優先順序計算,以及括號產生的優先順序運算...