表示式轉字尾表示式:
#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 現在,給你乙個中綴表示式,這個中綴表示式用變數來表示 不含數字 請你將這個中綴表示式用表示式二叉樹的形式輸出出來。輸入輸入分...