今天做了一題的題目是這樣的:假設表達式由單子母變量和雙目四則運算算法構成。試寫一算法,將以通常書寫形式且書寫正確的表達式轉換為逆波蘭式。
下面是我做這題的思想以及具體程序,不知道大家覺得這樣做好不好,我是用遞歸做的.
/*思想:
1.第一個字符肯定先放到新數組.
2.假如碰到'*',或者'/'的話就先把這個符號後面的那個字符放入新數組,然後再將符號壓進去.
3.假如碰到'+','-'的話,假如下一個符號的優先級和它們一樣就用同上的方法,假如後面符號的優先級比它們
高的話就用for循環來查找下一個與它們優先級一樣的符號.假如查到的話在完成後面的符號全都放入新數組後就把這個符號放入新數組,然後再執行後面的遞歸.假如前面沒查到相同優先級符號的話就把後面的符號都放入新數組後再把這個符號放進去.做這一步中因為牽涉到後面'*','/'符號都放入後要回到原來的位置,所以就用了個yes變量來判定是否碰到這種要返回的情況,假如yes=1,就表示有這種情況,有些地方需要非凡判定.
4.假如要再加入括號的話我覺得可以再用一個類似yes類型的變量就可以完成.
*/
#define N 80
int i=0,yes=0;/*i是新數組的下標指示,yes變量用來判定'+','-'後面假如有'*','/'的情況*/
void Input(char *x);/*輸入表達式*/
void Output(char *x);/*輸出逆波蘭*/
int Fun(char *x,char *y,int n);/*遞歸函數*/
void main(void)
{
char x[N],y[N];
Input(x);
Fun(x,y,1);
Output(y);
}
int Fun(char *x,char *y,int n)/*遞歸函數*/
{int j;
if(x[n]=='