本文針對資料結構基礎系列網路課程(3):棧和佇列中第5課時棧的應用1-表示式求值。
例:使用者輸入乙個包含「+」、「-」、「*」、「/」、正整數和圓括號的合法數學表示式,計算該表示式的運算結果。
解答:
#include
#include
#define maxop 100
#define maxsize 100
struct
//設定運算子優先順序
lpri= ,,,,,,},
rpri= ,,,,,,};
int leftpri(char op) //求左運算子op的優先順序
int rightpri(char op) //求右運算子op的優先順序
bool inop(char ch) //判斷ch是否為運算子
int precede(char op1,char op2) //op1和op2運算子優先順序的比較結果
void trans(char *exp,char postexp)
//將算術表示式exp轉換成字尾表示式postexp
op; //定義運算子棧
int i=0; //i作為postexp的下標
op.top=-1;
op.top++; //將'='進棧
op.data[op.top]='=';
while (*exp!='\0') //exp表示式未掃瞄完時迴圈
postexp[i++]='#'; //用#標識乙個數值串結束
}else
//為運算子的情況
switch(precede(op.data[op.top],*exp))
} //while (*exp!='\0')
while (op.data[op.top]!='=')
//此時exp掃瞄完畢,退棧到'='為止
postexp[i]='\0'; //給postexp表示式新增結束標識
}float compvalue(char
exp) //計算字尾表示式的值
st; //定義數值棧
float d;
char ch;
int t=0; //t作為exp的下標
st.top=-1;
ch=exp[t];
t++;
while (ch!='\0') //exp字串未掃瞄完時迴圈
st.top--;
break;
default:
d=0; //將數字字元轉換成數值存放到d中
while (ch>='0' && ch<='9') //為數字字元
st.top++;
st.data[st.top]=d;
}ch=exp[t];
t++;
}return st.data[st.top];
}int main()
資料結構例程 表示式求值(用棧結構)
本文針對資料結構基礎系列網路課程 3 棧和佇列中第5課時棧的應用1 表示式求值。例 使用者輸入乙個包含 正整數和圓括號的合法數學表示式,計算該表示式的運算結果。解答 include include define maxop 100 define maxsize 100 struct 設定運算子優先順...
資料結構例程 表示式求值(用棧結構)
例 使用者輸入乙個包含 正整數和圓括號的合法數學表示式,計算該表示式的運算結果。解答 include include define maxop 100 define maxsize 100 struct 設定運算子優先順序 lpri rpri int leftpri char op 求左運算子op的...
(複習)資料結構 棧 表示式求值
很久都沒有寫棧的程式了呢 由腦補可以字尾式求值是要用到棧的。所有說表示式求值可以分為兩部分 1.把中綴式轉換為字尾式 2.字尾式求值 include include include include include include include using namespace std char s ...