1. 程式人生 > 其它 >字尾表示式求值

字尾表示式求值

技術標籤:資料結構資料結構演算法字串

一、題目

輸入一行表示字尾表示式,數與數之間一定有空格隔開(可能不只一個空格),最後輸入@表示輸入結束

二、分析
字尾表示式,特點為運算子在兩個運算元後,所可以用棧來實現。
用一個棧來儲存數,遇到運算子則彈出兩個數來進行計算,然後將結果入棧。
三、演算法實現
(主要程式碼)
資料結構:棧。這裡我用的是一個整型陣列:a[1000].

    char s[1000];
    int i,x,f,e,d,tag,j=0,n;
    int a[1000]={0,};
    gets(s);
    n=strlen(s);//讀取時直接用字串陣列讀取。
    for
(i=0; s[i];) { tag=0,x=0;//關鍵步驟:包含多位數的處理方式。 while(i<n&&'0'<=s[i]&&s[i]<='9') { x=x*10,x=x+s[i]-'0',i++,tag=1; } if(tag)//入棧 a[j++]=x; else if(s[i]=='+'||s[i]=='-'||s[i]=='*'||s[i]=='/')//運算 { d=
a[--j]; e=a[--j]; switch(s[i]) { case '+': f=e+d; break; case '-': f=e-d; break; case '*': f=e*d; break; case '/': f=
e/d; break; } a[j++]=f; i++; } else i++; } printf("%d",a[0]);

四、演算法分析
演算法分析:其實就是遍歷了字串陣列一趟,所以大致的時間複雜度為O(N)。
空間複雜度為O(N)。此題靈活運用了棧的“後進先出”的特點。很有代表意義。