資料結構例程 表示式求值(用棧結構)

2021-07-05 07:27:31 字數 1607 閱讀 8809

本文針對資料結構基礎系列網路課程(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 ...