女人被躁到高潮嗷嗷叫游戏,久久久久亚洲av成人人电影,久久久精品人妻一区二区三区四,久久久久无码精品国产app,免费人成视频在线播放

留求藝—您的留學規(guī)劃師

C語言 逆波蘭表達式

251次

問題描述:

C語言 逆波蘭表達式求高手給解答

最佳答案

推薦答案

這個問題可以分為3部分1、輸入一個字符串,將其格式化的儲存在一個數(shù)組中,以方便的記錄表達式中數(shù)和各個符號的出現(xiàn)順序約定在數(shù)組中記錄時,每個數(shù)或符號用兩個整數(shù)來記錄第一個整數(shù)記錄該位是什么東西,0表示是一個數(shù),1表示是括號,2表示反括號,3、4、5、6分別表示乘除加減號如果該位是一個數(shù),那么第二個整數(shù)記錄著個數(shù)的具體取值,否則記錄該位的符號的ASCII碼比如字符串"(1-23)"會被轉化成二位數(shù)組 ,,,, }這個轉化過程每什么技巧性,對原字符串各位順次判斷并處理即可原先的字符串中可能出現(xiàn)一元運算符正號'+'和負號'-',為了處理方便,一律在其前面加個0,改寫成"0+..."或者"0-..."另外為了之后轉化逆波蘭表達式方便,處理過程中會在轉化出的數(shù)組的首尾一律添加一對括號2、將之前所提到的格式數(shù)組轉化為逆波蘭表達式約定依然用二位數(shù)組記錄一個逆波蘭表達式,并且格式與之前的數(shù)組相同,除了沒有括號以外比如逆波蘭表達式 1 2 - 35 +,會被記錄成{,,,, }轉化時,需要用一個棧具體轉化操作如下:順次處理格式數(shù)組的每一位,對其作判斷如果該位是一個數(shù)或者是括號'(',,將其入棧如果該位是乘號'*'或者除號'/',不斷進行出棧操作直到棧頂元素是個括號'('或者加號'+'或者減號'-',然后將這個乘號或者除號入棧如果該位是加號'+'或者減號'-',不斷進行出棧操作直到棧頂元素是個括號'(',然后將這個加號或者減號入棧如果該位是反括號')',那么不斷進行出棧操作直到有一個括號'('出棧在上述操作中,所有的出棧元素,除了括號'('以外,都被順次添加到所要生成的逆波蘭表達式的末尾這樣就轉化出了一條逆波蘭表達式3、對逆波蘭表達式求值求值時,也需要用到一個棧求值步驟如下:順次處理逆波蘭表達式的每一位,對其作判斷如果該位是一個數(shù),將這個數(shù)入棧如果該位是一個運算符,那么連續(xù)進行兩次出棧操作,可以得到棧頂?shù)膬蓚€元素,對這兩個元素用該位的運算符做運算,將所得的結果入棧比如,如果當時棧頂元素是3,次棧頂?shù)脑厥?,運算符是減號'-',那么連續(xù)兩次出棧得到3和2兩個元素,再將2-3的運算結果1入棧注意有些運算符(減號和除號)不符合交換律,因此運算時必須是次棧頂元素在前、棧頂元素在后,順序不能反當每一位都處理完了之后,只要輸入的是一個合法的逆波蘭表達式,必然棧中只剩下一個元素,這個元素就是逆波蘭表達式求值的結果源代碼如下:#include #include void transform(char *str,int a[],int *n)//將輸入的字符串轉化為格式化的數(shù)組以記錄輸入的表達式,str為輸入的字符串,a為目標數(shù)組,n記錄數(shù)組a的大小 {int i;*n=1;a[0][0]=1;a[0]='(';//在表達式首添加一個括號for (i=0;str[i];){if (isdigit(str[i])){a[*n][0]=0;a[*n]=0;while (isdigit(str[i])){a[*n]=a[*n]*10+str[i]-'0';i++;}}else{if (str[i]=='(') a[*n][0]=1;else if (str[i]==')') a[*n][0]=2;else if (str[i]=='*') a[*n][0]=3;else if (str[i]=='/') a[*n][0]=4;else if (str[i]=='+' || str[i]=='-'){if (i==0 || (!isdigit(str[i-1]) && str[i-1]!=')')){a[*n][0]=0;a[*n]=0;(*n)++;}if (str[i]=='+') a[*n][0]=5;else a[*n][0]=6;}a[*n]=str[i];i++;}(*n)++;}a[*n][0]=2;a[*n]=')';//在表達式尾添加一個反括號(*n)++;}void poland(int a[],int n,int p[],int *m)//將格式化數(shù)組轉化為逆波蘭表達式,a為輸入的數(shù)組,n為其長度,p為輸出逆波蘭表達式的目標,m記錄逆波蘭表達式的長度 {int i;int stack[1000];//轉化所用的棧int depth;//棧的深度depth=0;*m=0;for (i=0;i

C語言 逆波蘭表達式

為你推薦

網(wǎng)站首頁  |  關于我們  |  聯(lián)系方式  |  用戶協(xié)議  |  隱私政策  |  在線報名  |  網(wǎng)站地圖