#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 其字...