資料結構順序棧對表示式求知演算法

2021-07-23 11:27:27 字數 1140 閱讀 8117

//表示式求值(輸入、輸出和中間結果均只能是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 ...