//表示式求值(輸入、輸出和中間結果均只能是0~9)運算子僅限+-*/。
#include
#include
#include
#define stack_init_size 80 //棧初始化時的長度
#define stackincrement 10 //棧長度的增量
#define error 0
#define ok 1
typedef int status;
typedef char selemtype;
typedef struct sqstack //定義乙個順序棧
sqstack;
status initstack(sqstack *s) //棧的初始化
status push(sqstack *s,selemtype e) //棧元素進棧函式
if(!(*s).base)
*((*s).top)++=e;
return ok;
}status pop(sqstack *s,selemtype *e) //棧元素出棧函式
else
return ok;
}selemtype gettop(sqstack s) //取棧頂元素的函式
status in(selemtype c) //判斷c是否是操作符的函式
}selemtype precede(selemtype ch1,selemtype ch2) // 判斷兩個運算子的優先順序的函式
else
f='<';
break;
case')':switch(ch1)
break;
case'#':switch(ch1)
}return f;
}status operate(int a,selemtype theta,int b)
return c;
}selemtype evaluateexpression()
//不是運算子則進棧
else
}//else
}//end_of_while
return gettop(opnd);
}//end_of_evaluateexpression
int main()
利用棧對表示式求值
輸入中綴表示式空格分隔 例如 2 3 展示如下 順序從右向左,無優先順序順序,圖中順序 4 5 20,20 4 24,結果為24 考慮優先順序的運算表示式求值 以上為不考慮優先順序的表示式求值方法,那麼接下來考慮優先順序時,將考慮 換成程式設計思路 執行表示式運算時,總是將結果壓入numstack棧...
表示式 棧的實現 資料結構
這段 對一些讀入的非法資料判斷存在錯誤 比如像出現 a b 就無法判斷了 另外需要注意的是我覺得棧裡面儲存的是char型的,但是在運算元值的時候,會很不方便 還有一點在主函式裡面如果想用while來多次讀入資料的話,那麼你要考慮上一次輸入資料失敗後,那後面的字元該怎麼操作 上面出現的問題大家可以嘗試...
(複習)資料結構 棧 表示式求值
很久都沒有寫棧的程式了呢 由腦補可以字尾式求值是要用到棧的。所有說表示式求值可以分為兩部分 1.把中綴式轉換為字尾式 2.字尾式求值 include include include include include include include using namespace std char s ...