8569 利用棧實現表示式求值

2021-09-28 07:26:48 字數 4144 閱讀 7730

#include

using

namespace std;

typedef

struct nnode nsnode,

* nslink;

typedef

struct cnode csnode,

* cslink;

typedef

struct nstacklink nstack;

typedef

struct cstacklink cstack;

void

initnstacklist

(nstack& st)

void

initcstacklist

(cstack& st)

void

nstackpush

(nstack& st,

int data)

void

cstackpush

(cstack& st,

char data)

intnstackpop

(nstack& st)

return n;

}int

cstackpop

(cstack& st)

return n;

}int

calculate_func

(int n1,

char opt,

int n2)

}int

main()

')':

//提出運算子

ctemp =

cstackpop

(optstack)

;while

(ctemp !=

'break

;case

']':

//提出運算子

ctemp =

cstackpop

(optstack)

;while

(ctemp !=

'[')

break

;case

')':

//提出運算子

ctemp =

cstackpop

(optstack)

;while

(ctemp !=

'(')

break;}

}else

if(ch <=

'9'&& ch >=

'0')

else

else

//將原運算子與新運算子壓入棧頂

cstackpush

(optstack, ctemp)

;cstackpush

(optstack, ch);}

break

;case

'-':

//提出運算子

ctemp =

cstackpop

(optstack);if

(ctemp ==

'('|| ctemp ==

'else

if(ctemp == ch)

//將原運算子與新運算子壓入棧頂

cstackpush

(optstack, ctemp)

;cstackpush

(optstack, ch);}

break

;case

'*':

cstackpush

(optstack, ch)

;break

;case

'/':

cstackpush

(optstack, ch)

;break;}

} ch =

getchar()

;}/* //檢查棧內容

while (optstack.top!=optstack.bottom)

while (numstack.top!=numstack.bottom)

*/while

(optstack.top-

>data !=

'#')

cout << numstack.top-

>data << endl;

return0;

}

#include

#include

using

namespace std;

intcalculate_func

(int n1,

char opt,

int n2)

;int

main()

if(ch ==

'('|| ch ==

')'|| ch ==

'['|| ch ==

']'|| ch ==

'*'|| ch ==

'/'|| ch ==

'+'|| ch ==

'-'|| ch =='')

'://提出運算子

ctemp = optstack.

top();

optstack.

pop();

while

(ctemp !='if

(ctemp ==

'['|| ctemp ==

'(')

break

;case

']':

//提出運算子

ctemp = optstack.

top();

optstack.

pop();

while

(ctemp !=

'[')

if(ctemp ==

'break

;case

')':

//提出運算子

ctemp = optstack.

top();

optstack.

pop();

while

(ctemp !=

'(')

if(ctemp ==

'break

;case

'+':

//提出運算子

ctemp = optstack.

top();

optstack.

pop();

if(ctemp ==

'('|| ctemp ==

'else

//將原運算子與新運算子壓入棧頂

optstack.

push

(ctemp)

; optstack.

push

(ch);}

break

;case

'-':

//提出運算子

ctemp = optstack.

top();

optstack.

pop();

if(ctemp ==

'('|| ctemp ==

'else

if(ctemp == ch)

//將原運算子與新運算子壓入棧頂

optstack.

push

(ctemp)

; optstack.

push

(ch);}

break

;case

'*':

optstack.

push

(ch)

;break

;case

'/':

optstack.

push

(ch)

;break;}

} ch =

getchar()

;}//檢查棧內容

/*while (!optstack.empty())

while (!numstack.empty()) */

while

(optstack.

top()!=

'#')

cout << numstack.

top(

)<< endl;

return0;

}int

calculate_func

(int n1,

char opt,

int n2)

}

表示式求值 棧的利用

棧的功能 棧的順序儲存 include include define maxsize 100 typedef char elemtype typedef struct sqstack sqstack void init s sqstack s 檢測完畢 void out s sqstack s pr...

利用棧對表示式求值

輸入中綴表示式空格分隔 例如 2 3 展示如下 順序從右向左,無優先順序順序,圖中順序 4 5 20,20 4 24,結果為24 考慮優先順序的運算表示式求值 以上為不考慮優先順序的表示式求值方法,那麼接下來考慮優先順序時,將考慮 換成程式設計思路 執行表示式運算時,總是將結果壓入numstack棧...

表示式求值 棧實現

宣告 僅個人小記 演算法思想 一 設定乙個運算子棧,設定乙個字尾表示式字串 二 從左到右依次對中綴表示式中的每個字元ch分別進行一下處理,直至表示式結束 1.若ch是左括號 將其入棧 2.若 ch 是數字,將其後連續若干數字新增到字尾表示式字串之後,在新增空格作為分割符 3.若ch是運算子,先將棧頂...