南橋杯 表示式求值

2021-07-29 17:16:42 字數 2061 閱讀 7067

#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...