用棧實現表示式求值結果總是顯示第乙個輸入的值??

2021-10-25 10:38:25 字數 1672 閱讀 6431

我的想法是判斷優先順序跟計算分開,計算值時候如果操作符棧不為空彈出棧頂元素,同時從運算元棧中彈出棧頂運算元,計算結果後再壓入運算元棧,如果計算完了肯定最後運算元棧裡就有乙個元素直接取出來就是結果。但是編譯的時候他只顯示第乙個輸入的數,寫了測試程式發現push和pop沒錯,大神們看看我**錯了啊?

```c

```#include #include #include char op=;

char rule[7]=,,

,,,,

};typedef struct stack_op

stack_op;

typedef struct stack_on

stack_on;

void initstack_op(stack_op **mystack)

void initstack_on(stack_on **mystack)

void push_op(stack_op **mystack, char data)

void push_on(stack_on **mystack, float data)

int isemptystack_op(stack_op *mystack)

int isemptystack_on(stack_on *mystack)

char pop_op(stack_op **mystack)

temp=(*mystack);

data=temp->data;

(*mystack)=(*mystack)->next;

free(temp);

return data;

}float pop_on(stack_on **mystack)

temp=(*mystack);

data=temp->data;

(*mystack)=(*mystack)->next;

free(temp);

return data;

}char top_op(stack_op *mystack)

float top_on(stack_on *mystack)

void deletestack_op(stack_op **mystack)

free(p);

}void deletestack_on(stack_on **mystack)

free(p);

}int precede(char a, char c)

}for(j=0;j<7;j++)

}if(rule[i][j]=='0')

if(rule[i][j]=='=')

if(rule[i][j]=='>')

if(rule[i][j]=='<')

}float comvalue(float top, float second, char cal)

}void calculate(stack_op **optr, stack_on **opnd)

if (isemptystack_on(q))

}for(int i=0;biaodashi[i]!='#';i++)

else

case -1:

case 0:}}

}float end=q->data;

printf("%f\n", end);

}int main()

表示式求值 棧 用C 實現

1 include 2 3 include 4 5 include 6 7 include 8 9 include 10 11using namespace std 1213 1415 char precede char a,char b 2223 2425 2627 2829 3031 3233 ...

表示式求值 棧實現

宣告 僅個人小記 演算法思想 一 設定乙個運算子棧,設定乙個字尾表示式字串 二 從左到右依次對中綴表示式中的每個字元ch分別進行一下處理,直至表示式結束 1.若ch是左括號 將其入棧 2.若 ch 是數字,將其後連續若干數字新增到字尾表示式字串之後,在新增空格作為分割符 3.若ch是運算子,先將棧頂...

C語言 用棧實現表示式求值 順序棧

棧的基本操作 優先順序函式 precede 求值函式 operate 判斷操作符函式 in 表示式求值函式 evaluateexpression 其他 操作符棧 optr 運算元棧 opnd 請輸入表示式 3 5 2 第一種輸入方式是直接打出表示式進行整體輸入,而第二種則是以乙個乙個的方式讀入,第一...