怎麼轉換
數學雜談這個東西。。。我好像已經很久沒有更新了吧。。。qwq
當然,今天作為某道題的基礎,這當然是必不可少的了。
乙個式子能分成三種:字首表示式,中綴表示式,字尾表示式。
正如其名,字首表示式就是所有的符號都在前面;中綴表示式呢,就是我們平時用到的式子了;字尾表示式就是所有的運算子都在後面。
一般來說,計算機用到的都是字首表示式和字尾表示式(反正不會是中綴就行了)
話說好奇怪啊,人類發明的東西,竟然不是按照人類的思維來做??
當然字首和字尾有個好處,他們的式子中不可能會有括號存在。因為在這兩個表示式中,在中綴優先的,這裡也能優先,並且不需要括號來限制。
當然,這樣說著很抽象,看個式子: 4∗5
+4∗(
6+7∗
(2+3
−5))
∗5
4 * 5 + 4 * (6 + 7 * (2 + 3 - 5)) * 5
4∗5+4∗
(6+7
∗(2+
3−5)
)∗5,轉換成字尾是這樣的:45∗
4672
3+5−
∗+∗5
∗+
4 \ 5 * 4\ 6\ 7\ 2\ 3 + 5 - * + *\ 5 * +
45∗467
23+5
−∗+∗
5∗+,字首就先放一邊吧,今天主要是研究中綴轉字尾。。。其實是我太蒟了 (逃
字尾表示式的機制呢就是碰到乙個運算子後,在找他前面遇到的第1、2
1、 2
1、2個數字,將其進行運算,然後再找下乙個,直到表示式算完。
#include
#include
#include
using
namespace std;
stack<
int> a;
char s[10]
;int x,y,z;
intmain()
else
} x=a.
top();
printf
("%d"
,x);
}
差不多就是這樣,看得懂思路就行(我都覺得寫得很稚嫩),畢竟是一年前寫得嘛
這才是最重要的說
前面已經說了字尾表示式計算的機制了,那麼接下來就來講講具體轉換的步驟:
1. 如果說遇到的是數字的話,那麼就可以直接輸出,判斷下乙個當然,如果還沒太懂得可以看看(康康2. 如果說遇到的是左括號的話,先存進去等遇到右括號後再處理
3. 如果說遇到的是運算子的話,那麼先存進棧,等碰到下乙個運算子時在判斷優先順序的大小,左括號的優先順序最低,加減次之,乘除最高(此處不考慮冪)。如果說棧裡的那個運算子比當前這個運算子大的話,就說明可以優先輸出棧裡的了,用while迴圈判斷,如果說棧裡的優先順序大於等於該運算子的話,就一直輸出,否則將該運算子入棧
4. 如果說遇到的右括號的話,就說明這個括號裡的運算操作都已經做完了,可以直接一股腦的將棧裡左括號之後的輸出就okok
ok了。5. 如果說這個串讀完了,而棧裡還有的話,也就直接輸出就可以了。還有乙個注意是所有的括號均不輸出。
)這篇部落格 和這篇也行
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using
namespace std;
#define reg register
#define ll long long
#define inf 0x3f3f3f3f
template
<
typename t>
void re (t &x)
while
(c >=
'0'&& c <=
'9')
x *= f;
}template
<
typename t>
void pr (t x)
if(x /
10) pr (x /10)
; putchar (x %10+
48);}
string a, b;
int lena;
stack<
char
> s;
int cmp (
char s)
void transfer (string a)
else
if(a[i]
=='x'
)else
if(a[i]
=='('
) s.push (a[i]);
else
if(a[i]
=='+'
|| a[i]
=='-'
|| a[i]
=='*'
)int lev1 = cmp (a[i]
), lev2 = cmp (s.top ())
;if(lev1 > lev2) s.push (a[i]);
else
s.push (a[i]);
}}else
s.pop ();
}}while
(!s.empty ())
}int main (
)
將中綴表示式轉換成字尾表示式
我們人腦很容易理解中綴表示式,但是中綴表示式在計算機並不好計算,所有我們要將中綴表示式轉換成字尾表示式,因為字尾表示式是很容易計算的。為什麼要寫乙個這樣的程式呢?原因是我一開始想寫乙個計算機,它能夠將輸入的表示式的值計算出來。一開始覺得這樣子的程式應該是很簡單的,然後開始動手寫,開始寫了之後才發現並...
中綴表示式轉換成字尾表示式
一 基礎知識 中綴表示式 人們常用的表示式就叫做中綴表示式,如a b c d 字尾表示式 又叫做逆波蘭表示式,由一名波蘭數學家提出,方便進棧操作 字尾表示式也叫逆波蘭表示式,其求值過程可以用到棧來輔助儲存。假定待求值的字尾表示式為 6 5 2 3 8 3 則其求值過程如下 1 遍歷表示式,遇到的數字...
中綴表示式轉換成字尾表示式
中綴表示式轉字尾表示式 思路 三個方法 將中綴表示式轉換成 中綴表示式對應的 list 自定義運算子優先順序 將中綴表示式對應的 list 轉換成 字尾表示式.1.1 使用 list 更好的和 stack 配合,list 比 字串的遍歷更加靈活.將中綴表示式對應的 list 轉換成 字尾表示式 2....