1樓:網友
思路:輸入readln(str1)
輸入以後,str1的值就是"1+12-7+19"
然後再用pos和delete將數字與符號分開來,並且儲存於a和b陣列裡,假設a陣列裡數字的數量為k1,b陣列裡符號的數量為k1+1
for i:=1 to k1+1 do
case i of
:a[i+1]:=a[i]+a[i+1];
:a[i+1]:=a[i]-a[i+1];
end;writeln(a[k1]);
這樣就行了。
資料結構,用逆波蘭表示式求四則混合運算的值,使用c/c++
2樓:愛笑的筆跡
3全部你可以直接利棧來寫吧!將中綴表示式轉換成字尾表示式!
然後還是利用棧來計算!這個二叉樹遞迴來遞迴去搞得人都不好了!
將中綴表示式轉換為字尾表示式的搞法:
與棧頂元素比較。
優先順序高的進棧。
否者出棧到字尾表示式中。
表示式中有+,-/( )
現在我們來看他們的優先順序。
毋庸置疑括號的優先順序最高。
所以『(' 進棧,當字元為')'時。
只要棧頂元素不等於』(『就出棧。
然後跳過括號。
只剩下加減乘除的運算子了。
那麼+-的級別最低。
所以直接把前面的字元出棧,然後再把現在的加或者減運算子入棧。
時因為這兩個的優先順序高所以。
棧頂元素等於* /時出棧。
直到棧頂元素優先順序比。
小 時 *或者/進棧。
數字字元直接輸出。
#define maxlen 1000
void getexp(char *str,char*exp)s;;
char ch=str[0];
int i=1,t=0;
while(ch!='\0')
/跳過括號。
break;
case' ':
break;
case'+':
case'-':;;
break;
case'*':
case'/':
while('*'||'/');;
break;
default:
while(ch>='0'&&ch<='9')i--;
exp[t]='#
t++;ch=str[i];
i++;while(!=-1)}
二叉樹的先序序列恰好是逆波蘭表示式麼
3樓:網友
逆波蘭表示式又叫字尾表示式,對應於二叉樹的後序遍歷;
急求高分!!!!如何建立二叉樹?什麼是中綴字首字尾表示式?
4樓:網友
(1)表示式的三種形式:
中綴表示式:運算子放在兩個運算物件中間,如:(2+1)*3;
字尾表示式:不包含括號,運算子放在兩個運算物件的後面,所有的計算按運算子出現的順序,嚴格從左向右進行(不再考慮運算子的優先規則,如:2 1 + 3 *;
字首表示式:同字尾表示式一樣,不包含括號,運算子放在兩個運算物件的前面,如:* 2 1 3。
2)表示式的計算:
由於字尾表示式中沒有括號,不需判別優先順序,計算嚴格從左向右進行,故計算乙個字尾表示式要比計算機一箇中綴表示式簡單得多。
將中綴表示式轉換為字尾表示式的演算法思想:
當讀到數字直接送至輸出佇列中。
當讀到運算子t時,a.將棧中所有優先順序高於或等於t的運算子彈出,送到輸出佇列中;
進棧·讀到左括號時總是將它壓入棧中。
讀到右括號時,將靠近棧頂的第乙個左括號上面的運算子全部依次彈出,送至輸出佇列後,再丟棄左括號。
運用字尾表示式進行計算的具體做法:
建立乙個棧s
從左到右讀字尾表示式,讀到數字就將它轉換為數值壓入棧s中,讀到運算子則從棧中依次彈出兩個數分別到y和x,然後以「x 運算子 y」的形式計算機出結果,再壓加棧s中。
如果字尾表示式未讀完,就重複上面過程,最後輸出棧頂的數值則為結束。
pascal 字尾表示式轉中綴表示式 20分急求
program p1293 const maxl 1000000 type node record ch char l,r longint end var s ansistring list array 1.maxl of node t longint function getlevel x cha...
二階導數的表示式分母為什麼是dx
d就表示的是微分,其實實質是一種運算,求導運算,根據高等數學的說法被求導的平方加到y上,求導的平方加到x上。dy 2 dx 2 就是對函式y求兩次導 微分符號d 2y dx 2 為何二階導數如此表示 50 一階導數符號是dy dx,求導函式是y,因此這個符號中d dx就相當於求導符號.既然d dx是...
下列對牛頓第二定律的表示式F ma及其變形公式的理解,正確的是A由F ma可知,物體所受的合外力
a 物體的合外力與物體的質量和加 速度無關,由物體本身的決定,故a錯誤 b 物體的專質量與合外力以及屬加速度無關,由本身的性質決定,故b錯誤 cd 根據牛頓第二定律a f m,可知,物體的加速度與其所受合外力成正比,與其質量成反比,故c正確 d錯誤 故選 c 下列對牛頓第二定律的表示式f ma及其變...