在逆波蘭表示法中,所有運算子都跟在運算元的後面。比如,下列中綴表示式:
(1-2)*(4+5)
採用逆波蘭表示法表示為
1 2 - 4 5 + *
while
(下乙個運算子或運算元不是檔案結束指示符)
if(是數)
將該數壓入到棧中
else
if(是運算子)
彈出所需數目的運算元執行運算
將結果壓入到棧中
else
if(是換行符)
彈出並列印棧頂的值
else
出錯
#define bufsize
100char buf[
bufsize];
int bufp=
0;
快取區無字元,從外界讀取字元 getchar()
快取區有自付,從快取區讀取字元
int getch
(void
)
將不屬於當前輸入的元素存入快取區,以便後續利用
void
ungetch
(int c)
#define maxval
100int sp=0;
double val[
maxval
];
彈出並返回棧頂的值
double pop
(void
)}
void
push
(int c)
#include
#define number
'0'int getch
(void);
void
ungetch
(int)
;int getop
(s)
#include
#include
/*為了使用atof()函式*/
#include
/*為了使用isdigit()函式*/
#define maxop
100/*運算元或運算子的最大長度*/
#define number
'0'/*標識找到乙個數*/
#define maxval
100/*棧val的最大深度*/
#define bufsize
100/*快取區*/
double val[
maxval];
/*運算元寄存的棧*/
int sp =0;
/*下乙個空閒棧的位置*/
char buf[
bufsize];
/*字元的快取區*/
int bufp =0;
/*下乙個緩衝的位置*/
int getch
(void);
/*讀(緩衝區/外界)字元*/
void
ungetch
(int)
;/*將非數字字元壓入緩衝區*/
int getop
(char s)
;/*下一字串類別*/
void
push
(double)
;/*將轉化後的double壓入棧*/
double pop
(void);
/*彈出返回棧頂*/
int main()
}return0;
}int getch
(void
)void
ungetch
(int c)
double pop
(void)}
void
push
(double f)
int getop
(char s)
逆波蘭計算器
include include include define stack init size 20 初始化棧的空間 define stackincrement 10 擴充套件空間 define maxbuffer 10 最大緩衝區 typedef double elemtype 建立乙個棧 type...
逆波蘭計算器
1.逆波蘭表示式用途 逆波蘭表示式是一種十分有用的表示式,它將複雜表示式轉換為可以依靠簡單的操作得到計算結果的表示式。例如 a b c d 轉換為ab cd 2.逆波蘭表示式邏輯實現 如果當前字元為變數或者為數字,則壓棧,如果是運算子,則將棧頂兩個元素彈出作相應運算,結果再入棧,最後當表示式掃瞄完後...
逆波蘭計算器
遍歷表示式。碰到數字將其放到棧中。遇到計算符 從棧中彈出兩個數用計算然後再從新入棧。a 在棧中的最後乙個數即為結果 轉換前 2 9 6 3 5 4轉換後 2963 5 4 使用逆波蘭計算結果為 16.0public class rpncalculator 如果是不是計算符,直接入棧 stack.pu...