




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第Golang棧結(jié)構(gòu)和后綴表達(dá)式實(shí)現(xiàn)計(jì)算器示例目錄引言問(wèn)題中綴、后綴表達(dá)式的計(jì)算人利用中綴表達(dá)式計(jì)算值計(jì)算機(jī)利用后綴表達(dá)式計(jì)算值計(jì)算后綴表達(dá)式的代碼實(shí)現(xiàn)中綴表達(dá)式轉(zhuǎn)后綴表達(dá)式轉(zhuǎn)換過(guò)程轉(zhuǎn)換的代碼實(shí)現(xiàn)總結(jié)
引言
只進(jìn)行基本的四則運(yùn)算,利用棧結(jié)構(gòu)和后綴表達(dá)式來(lái)計(jì)算數(shù)學(xué)表達(dá)式的值。
本文代碼:GitHub
運(yùn)行效果:
問(wèn)題
如果只能進(jìn)行兩個(gè)值的加減乘除,如何編程計(jì)算一個(gè)數(shù)學(xué)表達(dá)式的值?
比如計(jì)算1+2*3+(4*5+6)*7,我們知道優(yōu)先級(jí)順序()大于*/大于+-,直接計(jì)算得1+6+26*7=189
中綴、后綴表達(dá)式的計(jì)算
人利用中綴表達(dá)式計(jì)算值
數(shù)學(xué)表達(dá)式的記法分為前綴、中綴和后綴記法,其中中綴就是上邊的算術(shù)記法:1+2*3+(4*5+6)*7,人計(jì)算中綴表達(dá)式的值:把表達(dá)式分為三部分12+3(4*5+6)*7分別計(jì)算值,求和得189。但這個(gè)理解過(guò)程在計(jì)算機(jī)上的實(shí)現(xiàn)就復(fù)雜了。
計(jì)算機(jī)利用后綴表達(dá)式計(jì)算值
中綴表達(dá)式1+2*3+(4*5+6)*7對(duì)應(yīng)的后綴表達(dá)式:123*+45*6+7*+,計(jì)算機(jī)使用棧計(jì)算后綴表達(dá)式值:
計(jì)算后綴表達(dá)式的代碼實(shí)現(xiàn)
funccalculate(postfixstring)int{
stack:=stack.ItemStack{}
fixLen:=len(postfix)
fori:=0;ifixLen;i++{
nextChar:=string(postfix[i])
//數(shù)字:直接壓棧
ifunicode.IsDigit(rune(postfix[i])){
stack.Push(nextChar)
}else{
//操作符:取出兩個(gè)數(shù)字計(jì)算值,再將結(jié)果壓棧
num1,_:=strconv.Atoi(stack.Pop())
num2,_:=strconv.Atoi(stack.Pop())
switchnextChar{
case"+":
stack.Push(strconv.Itoa(num1+num2))
case"-":
stack.Push(strconv.Itoa(num1-num2))
case"*":
stack.Push(strconv.Itoa(num1*num2))
case"/":
stack.Push(strconv.Itoa(num1/num2))
result,_:=strconv.Atoi(stack.Top())
returnresult
}
現(xiàn)在只需知道如何將中綴轉(zhuǎn)為后綴,再利用棧計(jì)算即可。
中綴表達(dá)式轉(zhuǎn)后綴表達(dá)式
轉(zhuǎn)換過(guò)程
從左到右逐個(gè)字符遍歷中綴表達(dá)式,輸出的字符序列即是后綴表達(dá)式:
遇到數(shù)字直接輸出
遇到運(yùn)算符則判斷:
棧頂運(yùn)算符優(yōu)先級(jí)更低則入棧,更高或相等則直接輸出棧為空、棧頂是(直接入棧運(yùn)算符是)則將棧頂運(yùn)算符全部彈出,直到遇見(jiàn))中綴表達(dá)式遍歷完畢,運(yùn)算符棧不為空則全部彈出,依次追加到輸出
轉(zhuǎn)換的代碼實(shí)現(xiàn)
//中綴表達(dá)式轉(zhuǎn)后綴表達(dá)式
funcinfix2ToPostfix(expstring)string{
stack:=stack.ItemStack{}
postfix:=""
expLen:=len(exp)
//遍歷整個(gè)表達(dá)式
fori:=0;iexpLen;i++{
char:=string(exp[i])
switchchar{
case"":
continue
case"(":
//左括號(hào)直接入棧
stack.Push("(")
case")":
//右括號(hào)則彈出元素直到遇到左括號(hào)
for!stack.IsEmpty(){
preChar:=stack.Top()
ifpreChar=="("{
stack.Pop()//彈出"("
break
postfix+=preChar
stack.Pop()
//數(shù)字則直接輸出
case"0","1","2","3","4","5","6","7","8","9":
j:=i
digit:=""
for;jexpLenamp;amp;unicode.IsDigit(rune(exp[j]));j++{
digit+=string(exp[j])
postfix+=digit
i=j-1//i向前跨越一個(gè)整數(shù),由于執(zhí)行了一步多余的j++,需要減1
default:
//操作符:遇到高優(yōu)先級(jí)的運(yùn)算符,不斷彈出,直到遇見(jiàn)更低優(yōu)先級(jí)運(yùn)算符
for!stack.IsEmpty(){
top:=stack.Top()
iftop=="("||isLower(top,char){
break
postfix+=top
stack.Pop()
//低優(yōu)先級(jí)的運(yùn)算符入棧
stack.Push(char)
//棧不空則全部輸出
for!stack.IsEmpty(){
postfix+=stack.Pop()
returnpostfix
//比較運(yùn)算符棧棧頂top和新運(yùn)算符newTop的優(yōu)先級(jí)高低
funcisLower(topstring,newTopstring)bool{
//注意a+b+c的后綴表達(dá)式是ab+c+,不是abc++
switchtop{
case"+","-":
ifnewTop=="*"||newTop=="/"{
returntrue
case"(":
returntrue
returnfalse
}
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 新能源汽車(chē)電子級(jí)多晶硅料年度采購(gòu)與供應(yīng)協(xié)議
- 藝術(shù)類(lèi)教育機(jī)構(gòu)全面承包與教學(xué)質(zhì)量保障協(xié)議
- 網(wǎng)絡(luò)直播平臺(tái)主播品牌代言授權(quán)合同
- 綠色物流電商平臺(tái)倉(cāng)儲(chǔ)動(dòng)線(xiàn)規(guī)劃與實(shí)施合同
- 離婚失蹤配偶財(cái)產(chǎn)安全處置及代管合同
- 《醫(yī)療救護(hù)基礎(chǔ)》課件
- 大型國(guó)企資金集中管理體系建設(shè)
- 《T培訓(xùn)教程》課件
- 醫(yī)學(xué)研究進(jìn)度匯報(bào)
- 《張華護(hù)士長(zhǎng)》課件
- 圓錐-圓柱齒輪減速器課程設(shè)計(jì)說(shuō)明書(shū)
- 高級(jí)財(cái)務(wù)管理(第三版)第03章-信息不對(duì)稱(chēng)與代理沖突
- 滅火和應(yīng)急疏散流程圖
- 重大危險(xiǎn)源評(píng)估標(biāo)準(zhǔn)
- 施工材料供應(yīng)保障措施
- 2022年《道德經(jīng)》全文+拼音
- 統(tǒng)編版《道德與法治》四年級(jí)下冊(cè)第10課《我們當(dāng)?shù)氐娘L(fēng)俗》精品課件
- 家具廠首件檢驗(yàn)記錄表
- 太上碧落洞天慈航靈感度世寶懺
- 國(guó)家標(biāo)準(zhǔn)硬度轉(zhuǎn)換表參考模板
- 輪胎式裝載機(jī)檢測(cè)報(bào)告(共5頁(yè))
評(píng)論
0/150
提交評(píng)論