#include
#include
#include
const
char oper[7] = ;
#define ok 1
#define error 0
typedef
char selemtype;
typedef
int status;
typedef
struct snode
snode, *linkstack;
double h;//結果
double e1;//數棧
char e2;//運算子棧
linkstack initstack(linkstack s)
int stackempty(linkstack s)
linkstack push(linkstack s)
p->data = e2;
p->next = s;
s = p;
return s;
}linkstack pushint(linkstack s)
p->data = e1;
p->next = s;
s = p;
return s;
}linkstack pop(linkstack s)
linkstack popint(linkstack s)
double gettop(linkstack s)
int in(char ch) //判斷ch是否為運算子
}return0;}
char precede(char theta1, char theta2) //判斷運算子優先順序
else
if (theta1 == '(' || theta1 == '=' || theta2 == '(' || (theta1
== '+' || theta1 == '-') && (theta2 == '*' || theta2 == '/'))
else
return
'>';
}double operate(double first, char theta, double second) //計算兩數運算結果
return0;}
//演算法3.22 表示式求值
void evaluateexpression() //算術表示式求值的算符優先演算法,設optr和opnd分別為運算子棧和運算元棧
//ch不是運算子則進opnd棧
else
num = 0;
e1 = y;
opnd = pushint(opnd);
}switch (precede(gettop(optr), ch)) //比較optr的棧頂元素和ch的優先順序
//switch
}} //while
h = gettop(opnd); //opnd棧頂元素即為表示式求值結果
}int main()
}
多位數運算表示式回顧
package stack public class calculate2 else if ss.isoper expression.charat index 1 else else if ss.priority ss.top ss.priority ch else index system.out...
c 鏈棧的表示式求值 多位數以及小數求值
部分思想參考了以資料結構教材上的為基礎,進行修改。書上的棧的表示式求值個人認為挺不錯了,比較好理解。總共有三個檔案,分別時code.h code.cpp和main.cpp檔案,這三個檔案需要放在同乙個資料夾下 code.h include include include include using ...
棧的應用計算器(實現多位數字的運算)
package stack 思路分析 1.通過乙個 index 值 索引 來遍歷我們的表示式 2.如果我們發現是乙個數字,就直接入數棧 3.如果發現掃瞄到是乙個符號,就分如下情況 3.1 如果發現當前的符號棧為 空,就直接入棧 3.2 如果符號棧有操作符,就進行比較,如果當前的操作符的優先順序小於或...