棧練習 逆波蘭表示式

2021-09-28 23:15:39 字數 1276 閱讀 3268

/*

字尾表示式(逆波蘭表示式)

有效操作只有'+'、'-'、'*'、'/',且運算元是整數

*/#include

#include

#include

#include

using

namespace std;

#define overflow -2

#define ok 1

#define error -1

typedef

int status;

typedef

int selemtype;

typedef

struct stacknode stacknode,

* linkstack;

// 鏈棧初始化

void

initstack

(linkstack& s)

// 判斷鏈棧是否為空

status stackempty

(linkstack s)

// 得到棧頂元素

status gettop

(linkstack s, selemtype& e)

// 判斷棧中是否只有乙個元素

bool

isone

(linkstack s)

if(i ==1)

return

true

;else

return

false;}

// 入棧

status push

(linkstack& s, selemtype e)

// 出棧

status pop

(linkstack& s, selemtype& e)

// 判斷是否為數字

bool

isnum

(char ch)

status f

(const

char

* str, selemtype& e)

}else

pop(s, e)

;int a = e;

// 右運算元

pop(s, e)

;int b = e;

// 左運算元

switch

(str[i]

)else}}

}if(!

isone

(s))

else

}int

main()

結果為: 4

波蘭表示式和逆波蘭表示式(棧)

中綴表示式如1 2 2 1 其運算子一般出現在運算元之間,因此稱為中綴表示式,也就是大家程式設計中寫的表達 式。編譯系統不考慮表示式的優先級別,只是對表示式從左到右進行掃瞄,當遇到運算子時,就把其前面的兩 個運算元取出,進行操作。為達到上述目的,就要將中綴表示式進行改寫,變為字尾表示式 如上面的表示...

波蘭表示式 逆波蘭表示式

中綴表示式是最常見的運算表示式,如 3 5 2 6 1 波蘭表示式又稱為字首表示式,它是由中綴表示式經過一定的方式轉換來的 比如中綴表示式為 3 5x 2 6 1 對應的字首表示式為 3 x 5 2 6 1 對於中綴表示式從右向左遍歷轉換為字首表示式,中途要是用棧進行儲存 轉換規則如下 波蘭表示式 ...

棧和逆波蘭表示式

1 2,1 3 2,1 3 2 1 3 這些就是中綴表示式,就是我們 平時經常見到的形式,先算加減再算乘除,有括號的先算括號裡面的,沒有括號按照優先順序順序進行計算。但是,計算機處理中綴表示式卻並不方便,因為沒有一種簡單的資料結構可以方便從乙個表示式中間抽出,一部分算完結果,再放進去,然後繼續後面的...