表示式問題 C

2021-10-04 20:25:28 字數 1823 閱讀 1714

表示式轉字尾表示式:

#include#include#include#include#define initsize  20

#define increment 10

#define maxbuffer 20

#define len sizeof(elemtype)

/*棧的動態分配儲存結構*/

typedef char elemtype;

typedef structsqstack;

/*初始化棧*/

void initstack(sqstack *s)

/*壓棧操作*/

void pushstack(sqstack *s,elemtype c)

*s->top++ = c;

}/*求棧長*/

int stacklength(sqstack *s)

/*彈棧操作*/

int popstack(sqstack *s,elemtype *c)

*c=*--s->top;

return 1;

}/*中綴轉字尾函式*/

void change(sqstack *s,elemtype str)

} if(str[i]=='+'||str[i]=='-') else else

} while( stacklength(s) && e != '(' );

pushstack(s,str[i]);

}} /*當遇到右括號是,把括號裡剩餘的運算子彈出,直到匹配到左括號為止

左括號只彈出不列印(右括號也不壓棧)*/

else if(str[i]==')')

} else if(str[i]=='*'||str[i]=='/'||str[i]=='(') else if(str[i]=='\0') else

i++;

} /*最後把棧中剩餘的運算子依次彈棧列印*/

while(stacklength(s))

}int main()

字尾表示式的計算:

#include#include#include#include#define initsize  20

#define increment 10

#define maxbuffer 10

#define len sizeof(elemtype)

/*棧的動態分配順序儲存結構*/

typedef double elemtype;

//結構體

typedef structsqstack;

//初始化棧

void initstack(sqstack *s)

//壓棧

void pushstack(sqstack *s,elemtype e)

*s->top =e;

s->top++;

} //出棧

void popstack(sqstack *s,elemtype *e)

//計算-關鍵函式

void calfunction(sqstack *s,char str)

if(str[i]==' ')

} switch(str[i])

pushstack(s,d/e);

break;

} i++;

} popstack(s,&e);

printf("計算結果為:%lf",e);

}//主函式

int main()

表示式求值問題之表示式樹

include include include include define m 1005 define clr arr,now memset arr,now,sizeof arr using namespace std stackshu typedef struct node tire,t cha...

C 中綴表示式轉字尾表示式

一 中綴表示轉字尾表示的規則 1.遇到操作符時,如果該操作符優先順序高於op stack棧頂的操作符,則直接壓入op stack,如果同級或低於棧頂操作符,則將棧中操作符依次彈出 同時壓入輸出棧 直到遇到比當前操作符優先順序低的,或者遇到了 2.和 都不能進入輸出棧。3.對於操作符 只有 才能將其彈...

表示式 表示式樹 表示式求值

總時間限制 1000ms 記憶體限制 65535kb 描述 眾所周知,任何乙個表示式,都可以用一棵表示式樹來表示。例如,表示式a b c,可以表示為如下的表示式樹 a b c 現在,給你乙個中綴表示式,這個中綴表示式用變數來表示 不含數字 請你將這個中綴表示式用表示式二叉樹的形式輸出出來。輸入輸入分...