//均已除錯通過,編譯器為dev c++
#include
#include
#include
#include
#define stack_size 100
char operator[7]=; //用6出錯!!!!
int result,ch2;
char opr; //定義全域性變數
//*************優先關係**************************
char prioritytable[7][7]=,,,
,,,,
};//***************運算子結構體*****************
typedef struct sqstack1,*pstack1;
//**************運算元結構*******************
typedef struct sqstack2,*pstack2;
//***************建立堆疊**********************
void initstack1(pstack1 s)
void initstack2(pstack2 s)
//******************入棧******************************
int pushstack1(pstack1 s,char ch)
void pushstack2(pstack2 s,int ch)
//******************出棧*********************
void popstack1(pstack1 s,char *ch)
void popstack2(pstack2 s,int *ch)
//**********取棧頂元素*****************
int gettop1(pstack1 s)
int gettop2(pstack2 s)
//*************銷毀符號棧************************
void destorystack1(pstack1 s)
//*************銷毀資料棧************************
void destorystack2(pstack2 s)
//************查詢優先權並返回*******************
int checkpriority(char operator_1,char operator_2)
//**************計算中間表示式的值*********************
int count(int a,char ch,int b)
else
return b/a;
}}
//*****************計算總表示式的值****************
void sum()
pushstack2(&s2, sum);
}else
switch(checkpriority(gettop1(&s1) ,ch)) //比較優先順序
} result=gettop2(&s2); //取資料棧棧頂元素
destorystack1(&s1);
destorystack2(&s2);
} //******************提示資訊**********************
void message()
//*******************主函式***************************
int main()
表示式求解
表示式求解是棧應用乙個典型的例子,其基本演算法思想為 1.首先初始化1個運算數棧和1個運算子棧,運算子棧填入 表示棧空。2.對輸入表示式進行逐字節解析,如果是運算元,則直接壓入運算數棧,如果是運算子則進行一下比較 1 如果棧頂運算子優先順序低於讀入運算子優先順序,則將運算子壓棧,繼續解析下面的位元組...
表示式求解
構造包含頂指標,底指標和增量的結構體。然後分別構造乙個只包含運算子的棧 optr 和只包含數字的棧 opnd 之後依次讀入所輸入的表示式。判斷是不是數字,如果是數字就將數字放入數字棧 opnd 如果不是即運算子,讓運算子棧棧頂元素和讀入的運算子進行比較。如果優先順序小於將讀入的運算子入棧,優先順序相...
表示式求解
1 解題思路 構造包含頂指標,底指標和增量的結構體。然後分別構造乙個只包含運算子的棧 optr 和只包含數字的棧 opnd 之後依次讀入所輸入的表示式。判斷是不是數字,如果是數字就將數字放入數字棧 opnd 如果不是即運算子,讓運算子棧棧頂元素和讀入的運算子進行比較。如果優先順序小於將讀入的運算子入...