棧運用 逆波蘭表示式 C語言

2021-09-26 23:38:58 字數 1196 閱讀 5156

逆波蘭表示式即字尾表示式

輸入逆波蘭表示式輸出結果

大致思路:

輸入字元,注意字元與字元之間間隔,故建立快取陣列

將字元轉化為浮點數後壓入棧,因逆波蘭表示式會將優先順序表現出來,則將浮點數遇見符號進行計算即可,計算結果再壓入棧等待與後面的浮點數再遇見輸入的符號

#include #include #include //以開發的思路,在mian函式中一步一步完善程式,有定義,宣告,輸入,輸出等,在一步步完善

//字尾表示式 逆波蘭表示式

/**(1-2)*(4+5) --> 1 2 - 4 5 + * 括號優先

1 2入棧,遇運算子計算彈棧,結果入棧,4 5入棧,

遇運算子彈棧計算,結果入棧,再遇運算子彈棧運算.

**/#define stack_init_size 20

#define stackincrement 10

#define maxbuffer 10

typedef double elemtype;//

typedef struct

sqstack;

void initstack(sqstack *s)

void push(sqstack *s,elemtype e)

*(s->top)=e;

s->top++;

}void pop(sqstack *s,elemtype *e)

//會對棧進行修改則傳位址,不修改只是做測試等操作則只傳資料即可

int stacklen(sqstack s)//這裡傳進來的是結構不是指標

int main()

scanf("%c",&c);

if(c==' ')//遇到空格,完成乙個數字的輸入,轉化後進行入棧操作

}switch(c) //可優化,把pop提到前面

else

break;

}scanf("%c",&c);

}pop(&s,&d);

printf("最終結果為:%f\n",d);

return 0;

}// 5 - (6 + 7) * 8 + 9 / 4

// 5 - 13 * 8 + 9 / 4

// 5 - 104 + 2.25

// -99 + 2.25

// 5 6 7 + 8 * - 9 4 / +

波蘭表示式和逆波蘭表示式(棧)

中綴表示式如1 2 2 1 其運算子一般出現在運算元之間,因此稱為中綴表示式,也就是大家程式設計中寫的表達 式。編譯系統不考慮表示式的優先級別,只是對表示式從左到右進行掃瞄,當遇到運算子時,就把其前面的兩 個運算元取出,進行操作。為達到上述目的,就要將中綴表示式進行改寫,變為字尾表示式 如上面的表示...

波蘭表示式 逆波蘭表示式

中綴表示式是最常見的運算表示式,如 3 5 2 6 1 波蘭表示式又稱為字首表示式,它是由中綴表示式經過一定的方式轉換來的 比如中綴表示式為 3 5x 2 6 1 對應的字首表示式為 3 x 5 2 6 1 對於中綴表示式從右向左遍歷轉換為字首表示式,中途要是用棧進行儲存 轉換規則如下 波蘭表示式 ...

棧和逆波蘭表示式

1 2,1 3 2,1 3 2 1 3 這些就是中綴表示式,就是我們 平時經常見到的形式,先算加減再算乘除,有括號的先算括號裡面的,沒有括號按照優先順序順序進行計算。但是,計算機處理中綴表示式卻並不方便,因為沒有一種簡單的資料結構可以方便從乙個表示式中間抽出,一部分算完結果,再放進去,然後繼續後面的...