一般算數表示式轉換為「字尾式」

2022-04-29 07:15:08 字數 2159 閱讀 5595

time limit: 1000ms   memory limit: 65536k  有疑問?點這裡^_^

對於乙個基於二元運算子的算術表示式,轉換為對應的字尾式,並輸出之。

輸入乙個算術表示式,以『#』字元作為結束標誌。

輸出該表示式轉換所得到的字尾式。

a*b+(c-d/e)*f#

ab*cde/-f*+

所謂 字尾式表示式 即是:計算機內部對算式的處理先後順序式!

此題寫了半個小時哈,資料結構課本裡的**實在是難看。故,本人只是參看了演算法,自己手敲的**,運用棧的思想,

我的**需要注意的地方是:當遇到 ' ) '時,該怎麼搞?!!

本人的一貫做法,對於棧只是我用來儲存的陣列,每次我都是用乙個e的下表指標來進行資料處理,遇到該出棧的資料,

我就把它給賦值掉,或者改變指標的位置,訪問不到那個資料哈!

將中綴式轉換為字尾式,需要考慮運算子的優先性。比如:a+b*c 不能轉換為:ab+c*,這是錯誤的。

應該轉換成:abc*+  這樣才是對的。*的優先順序大於+,所以意味著先做*運算,再做+運算。

#include #include char a[1000];

char s[1000];

int main()

else //如果是運算子

else if( e>0 ) //如果棧裡已有運算子出現了

if(a[i] == '+') //如果遇到的是+,運算優先順序低(+-*/ 均可在其前面運算)

else if(s[e-1]=='*' || s[e-1]=='/' ||s[e-1]=='+' || s[e-1]=='-' )

}if(a[i] == '-') //如果當前遇到的運算子是-

else if(s[e-1]=='-' || s[e-1]=='*' || s[e-1]=='/' || s[e-1]=='+' )

}if( a[i] == '*') // 他如果當前遇到的是*

else if(s[e-1]=='*' || s[e-1]=='/' ) // 如果是這些運算子,>=(*)的優先順序

}if( a[i] == '/') // 和*運算子的做法一致

else if(s[e-1]=='*' || s[e-1]=='/' )

}if( a[i] == ')') // 如果是右括號呢???

else}}

}}

i++;

}for(k=e-1; k>=0; k--)

printf("\n");

}return 0;

}

stl 的寫法:

#include #include #include #include #include #include using namespace std;

int main()

else

else

if(e>0

)

case'+

':else

if(s[e-1]=='

*' || s[e-1]=='

/' ||s[e-1]=='

+' || s[e-1]=='-'

)

}case'-

':else

if(s[e-1]=='

-' || s[e-1]=='

*' || s[e-1]=='

/' || s[e-1]=='+'

)

}case'*

':else

if(s[e-1]=='

*' || s[e-1]=='/'

)

}case'/

':else

if(s[e-1]=='

*' || s[e-1]=='/'

)

}case')

':else}}

}}

}i++;

}for(k=e-1; k>=0; k--)

printf("\n

");}

}

一般算術表示式轉換成字尾式

time limit 1000ms memory limit 65536k 有疑問?點這裡 對於乙個基於二元運算子的算術表示式,轉換為對應的字尾式,並輸出之。輸入乙個算術表示式,以 字元作為結束標誌。輸出該表示式轉換所得到的字尾式。a b c d e f ab cde f includeusing ...

棧之一般表示式轉換成字尾式

對於乙個基於二元運算子的算術表示式,轉換為對應的字尾式,並輸出之。輸入乙個算術表示式,以 字元作為結束標誌。輸出該表示式轉換所得到的字尾式。a b c d e f ab cde f include include include define maxsize 10000 define sizenum...

表示式轉換 中綴表示式轉換為字尾表示式

算術表示式有字首表示法 中綴表示法和字尾表示法等形式。日常使用的算術表示式是採用中綴表示法,即二元運算子位於兩個運算數中間。請設計程式將中綴表示式轉換為字尾表示式。輸入格式 輸入在一行中給出不含空格的中綴表示式,可包含 以及左右括號 表示式不超過20個字元。輸出格式 在一行中輸出轉換後的字尾表示式,...