#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是運算子,先將棧頂...