資料結構 算術表示式 算符優先法

2021-07-06 02:49:24 字數 2593 閱讀 7564

**還新增了乘方的優先順序,自行參考

一開始我寫的只能輸入個位數,後來想了好久才解決,主要是在判斷是否為運算子後,若不是運算子,別急著入棧,用乙個標記陣列記著,若下乙個字元還不是運算子,則利用strcat函式鏈結之前標記陣列和這乙個字元,直到下乙個字元是運算子為止,才入棧。

至於負數的運算,則要判斷是否連續兩個都為運算子,且前乙個運算子為『(』後乙個運算子為『-』,若是就加個0入棧即可。

#include 

#include

#include

#include

#define m 10

#define add 10

/*字元棧*/

typedef

struct

sqstack;

int init(sqstack &s)

s.top = 0;

s.stacksize = m;

return1;}

int push(sqstack &s, char e)

s.base = newbase;

s.stacksize += add;

}s.base[s.top++] = e;

return1;}

int pop(sqstack &s, char &e)

e = s.base[--s.top];

return1;}

int gettop(sqstack s, char &e)

e = s.base[s.top - 1];

return1;}

/*運算元棧*/

typedef

struct

datastack;

int init_data(datastack &s)

s.top = 0;

s.stacksize = m;

return1;}

int push_data(datastack &s, float e)

s.base = newbase;

s.stacksize += add;

}s.base[s.top++] = e;

return1;}

int pop_data(datastack &s, float &e)

e = s.base[--s.top];

return1;}

int gettop_data(datastack s, float &e)

e = s.base[s.top - 1];

return1;}

/*判斷算符優先關係*/

char judge(char a, char b)

else

case

'-':

if (b == '+' || b == '-' || b == ')' || b == '#')

else

case

'*':

if (b == '(' || b == '^')

else

case

'/':

if (b == '(' || b == '^')

else

case

'#':

if (b == '#')

else

if (b == ')')

else

case

'(':

if (b == ')')

else

if (b == '#')

else

case

')':

if (b == '(')

else

case

'^':

if (b == '(')

else

default:

return

' ';

}}/*計算操作*/

float action(float a, char k, float b)

}/*判斷運算子or運算元*/

int isysf(char c)

return0;}

/*正片*/

float hehe(char *input)

; char *c;

init(optr);

init_data(opnd);

push(optr, '#');

c = strcat(input, ap);

strcpy(tempdata, "\0");

gettop(optr, e);

while (c[i] != '#' || e != '#')

flag = 0;

}else

else

/*連續兩個都是運算子卻不是負數*/}}

else

}flag = 1;

}gettop(optr, e);

}gettop_data(opnd, ans);

return ans;

}int main()

return

0;}

算術表示式求值 「算符優先順序法」 「字尾表示式法」

該方法來自嚴蔚敏版資料結構,基本思路是 設定兩個工作棧,乙個運算元棧,乙個操作符棧,在 自左至右 掃瞄算術表示式時,遇到運算元直接入運算元棧,若遇到操作符,則根據操作符優先順序判斷下一步操作 操作符優先順序規則 若其優先順序高於棧頂操作符,則入棧,否則 相等或小於 彈出棧頂算符並從運算元棧彈出兩個運...

簡單表示式求值 算符優先法

周五加班的時候,在九度oj上練習了一道簡單表示式求值的題目,用到了 算符優先法 這裡簡單的記錄一下 讀入乙個只包含 的非負整數計算表示式,計算該表示式的值。測試輸入包含若干測試用例,每個測試用例佔一行,每行不超過200個字元,整數和運算子之間用乙個空格分隔。沒有非法表示式。當一行中只有0時輸入結束,...

算術表示式求值 資料結構 C語言

1.實驗目的 熟練掌握棧的基本操作,深入了解棧的特性,能在實際問題的背景下靈活運用他們,並加深對這種結構的理解。2.實驗內容 設計乙個程式,演示用算符優先法對算術表示式求值的過程。以字串行的形式從終端輸入語法正確的 不含變數的整數表示式。利用教科書表3.1給出的算符優先關係,實現對算術四則運算混合運...