#include
#include
#include
typedef struct inodeinode;//數值棧
typedef struct cnodecnode;//符號棧
typedef struct stackstack;//包含兩個數值棧和符號棧的父結構體
void initstack(struct stack *s)//初始化棧
i->next=null;
s->inode=i;
struct cnode *c=(struct cnode *)malloc(sizeof(struct cnode));
if(!c)
c->next=null;
s->cnode=c;
}void push(struct stack *s,int num)//入棧(數值棧)
(*t).operand=num;
t->next=s->inode;
s->inode=t;
}void push(struct stack *s,char token)//入棧(符號棧)
(*t).op=token;
t->next=s->cnode;
s->cnode=t;
}void pop(struct stack *s,struct inode *i)//出棧(數值棧)
void pop(struct stack *s,struct cnode *c)//出棧(符號棧)
int gettop(struct inode *i,int *num)//獲取棧頂元素(數值棧)
int gettop(struct cnode *c,char *cha)//獲取棧頂元素(符號棧)
void evaluateexp();//計算表示式
int getnum(char *,int);//根據當前數字字元獲取相應的數字//向右找
int isoperator(char *,int);//是否是合法表示式的運算子
char priority(char,char);//根據第二個運算子和上乙個運算子來判斷優先順序
int getvalue(int,char,int);//計算表示式
struct stack stack;
char exp[100]="3*(5+(6+9))*(5-(6*(2+5)/2))#";
int main(void)
void evaluateexp()//計算表示式
else
}else if(state==2)//是負號
;else
}gettop(stack.cnode,&chstack);
if(chexp!='#')
chexp=exp[++i];}}
int getvalue(int numone,char op,int numtwo)//計算表示式
return value;
}char priority(char oldtoken,char newtoken)//根據第二個運算子和上乙個運算子來判斷優先順序
break;
case '*':
case '/':
switch(newtoken)
break;
case '(':
switch(newtoken)
break;
case ')':
printf("5運算子錯誤");
exit(-1);
case '#':
switch(newtoken)
break;
}return flag;
}int isoperator(char *exp,int pos)//是否是合法表示式的運算子
return 0;
}int getnum(char *exp,int pos)//根據當前數字字元獲取相應的數字//向右找
return num;
}
南橋杯演算法訓練 表示式計算(有點low)
問題描述 輸入乙個只包含加減乖除和括號的合法表示式,求表示式的值。其中除表示整除。輸入格式 輸入一行,包含乙個表示式。輸出格式 輸出這個表示式的值。樣例輸入 1 2 3 4 5 樣例輸出 4資料規模和約定 表示式長度不超過100,表示式運算合法且運算過程都在int內進行。題解 比較low的乙個演算法...
表示式求值
程式的說明見清華大學出版社 資料結構 c語言版 include include define stack init size 40 define stackincrement 20 define ok 1 define false 0 typedef structs stack typedef st...
表示式求值
既然是表示式求值,自然需要在記憶體中儲存計算結果以及中間值。在 用c語言寫直譯器 一 中提過 變數要求是若型別,而 c 語言中的 view plaincopy to clipboardprint?in basic io.h define memery size 26 typedef enum var...