簡單的逆波蘭式 c語言

2021-08-09 09:51:49 字數 1229 閱讀 6053

#include#include#include#define ok 1

#define error 0

const int maxn = 20;

typedef struct stackstack;

void init(stack *s, int size)

int push(stack *s, char value)

s->top_index++;

s->elements[s->top_index]=value;

return ok;

}void pop(stack *s)

s->top_index--;

}int top(stack *s)

void clear(stack *s)

int isoperator(char c)

int priority(char c)

if (c == '+' || c == '-')

else

}int op(int a, int b, char c)

else if (c == '-')

else if (c == '*')

else if (c == '/')

return res;

}int main()

while (isoperator(s[i]))

else

} }while (stack->top_index != -1)

for (int i = 0; i < sizeof(change); i++)

else if (isoperator(change[i]))

} printf("%d", top(stack)-'0');

clear(stack);

return 0;

}

參考部落格

對於將乙個式子轉換為逆波蘭式。

首先要明確的是,輸入為乙個字串,需要乙個棧作為輔助空間,輸出為乙個字串。

1.首先,從左向右掃瞄字串,對於每乙個字元

2.若為數字

直接輸出到輸出字串

3.while(當掃瞄到的為操作符時)

4.返回第一步

5.迴圈輸出棧至輸出字串

結束對於字尾表示式求值

將字串不斷壓棧 。當遇到操作符時,彈出兩次棧頂,並計算結果,將結果入棧。並繼續計算。

注意事項,當計算結果時注意運算元順序,防止運算元顛倒。

波蘭式和逆波蘭式

字首 中綴 字尾表示式是對表示式的不同記法,其區別在於運算子相對於運算元的位置不同,字首表示式的運算子位於運算元之前.中綴和字尾同理 雖然人的大腦很容易理解與分析中綴表示式,但對計算機來說中綴表示式卻是很複雜的,因此計算表示式的值時,通常需要先將中綴表示式轉換為字首或字尾表示式,然後再進行求值。對計...

C 實現逆波蘭式

a b c的逆波蘭式為ab c,假設計算機把ab c按從左到右的順序壓入棧中,並且按照遇到運算子就把棧頂兩個元素出棧,執行運算,得到的結果再入棧的原則來進行處理,那麼ab c的執行結果如下nkqnqmthw 1 a入棧 0位置 2 b入棧 1位置 3 遇到運算子 將a和b出棧,執行a b的操作,得到...

字尾式 逆波蘭式

逆波蘭式 是波蘭邏輯學家盧卡西維奇 lukasiewicz 發明的一種表示 表示式的方法。這種表示方式把運算子寫在運算物件的後面,例如,把a b寫成ab 所以也稱為字尾式。這種表示法的優點是根據運算物件和算符的出現次序進行計算,不需要使用括號,也便於用械實現求值。對於 表示式x a b c d 其字...