999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

逆波蘭表達式在VB中的算法設(shè)計與實現(xiàn)

2011-04-10 02:22:26
制造業(yè)自動化 2011年9期

楊 忠

YANG Zhong

(淄博職業(yè)學(xué)院,淄博 255013)

0 引言

在高級語言中出現(xiàn)的算術(shù)表達式,如a+(b-c)d,其運算符一般出現(xiàn)在操作數(shù)之間,此為中綴表達式,而編譯系統(tǒng)不考慮表達式的優(yōu)先級別,只是對表達式從左到右進行掃描,當(dāng)遇到運算符時,就把其前面的兩個操作數(shù)取出進行操作。為達到上述目的,就要將中綴表達式改成abc-d+樣式,操作符均在操作數(shù)的后面,此為逆波蘭表達式。

在逆波蘭表達式中,不再出現(xiàn)括號,運算符放在兩個運算對象的后面,運算嚴格按照從左到右的順序進行,因而計算一個后綴表達式的值,其算法要比計算一個中綴表達式簡單得多。以下以VB為開發(fā)平臺,用順序棧的工作原理完成逆波蘭表達式的算法設(shè)計與實現(xiàn)。

1 確定運算符優(yōu)先級

為了正確實現(xiàn)中綴向逆波蘭表達式轉(zhuǎn)換,必須明確操作符的優(yōu)先級,如表1所示。

表1 算術(shù)操作符優(yōu)先級設(shè)置

如果公式中還有其他的數(shù)學(xué)函數(shù)參與運算,可以相應(yīng)定義優(yōu)先級,實現(xiàn)轉(zhuǎn)換,但必須定義某種規(guī)則用一個字母代替函數(shù)且嚴格按照書寫規(guī)范書寫。比如表達式sin(a)+b,在表達式中含有數(shù)學(xué)運算函數(shù)sin(),我們可以用S表示該函數(shù),然后如表2 所示設(shè)置操作符和函數(shù)的優(yōu)先級即可。

表2 數(shù)學(xué)函數(shù)和算術(shù)操作符優(yōu)先級設(shè)置

以上表中的#作為操作符棧棧底元素,用于第一個入棧操作符。isp表示操作符或函數(shù)在棧內(nèi)優(yōu)先級,icp表示操作符和函數(shù)在棧外優(yōu)先級。每個操作符均有棧內(nèi)和棧外兩種優(yōu)先級,用于決定壓棧還是彈棧。

2 算法設(shè)計

1)在VB中利用數(shù)組實現(xiàn)棧的原理應(yīng)用。定義兩個數(shù)組chaarr和operator,定義一個操作符結(jié)構(gòu)體數(shù)組op。

chaarr用于存儲表達式中所有的操作數(shù)變量和操作符,對于公式中含有常數(shù)情況本文未作考慮。

操作符棧operator用于存儲操作符,根據(jù)優(yōu)先級的大小,實現(xiàn)棧的壓棧和彈棧操作。

op用于存儲操作符號本身,并賦予操作符在棧內(nèi)和棧外優(yōu)先級,用于彈棧和壓棧判斷。

2)利用函數(shù)mid從表達式中分離每個元素,當(dāng)判斷出該元素是操作數(shù)變量時直接把該變量存入chaarr中,當(dāng)分解出的是操作符時,首先定義該操作符的棧內(nèi)棧外優(yōu)先級,存入操作符結(jié)構(gòu)體數(shù)組op,然后判斷該操作符的棧外優(yōu)先級和operator內(nèi)棧頂元素的棧內(nèi)優(yōu)先級的高低,如果是大于關(guān)系則把該操作符壓棧operator,如果是小于關(guān)系,則把operator棧頂元素彈棧并存入chaarr中,原分離出的操作符繼續(xù)與operatro內(nèi)棧頂元素比較優(yōu)先級,可能要重復(fù)進行彈棧、存入chaarr、比較優(yōu)先級過程,直至該操作符壓棧為止。如果括號彈棧,不把它存入chaarr中,因為后綴形式已經(jīng)準確的表明了公式的先后運算次序關(guān)系。

3)利用一個循環(huán),重復(fù)執(zhí)行第2步,直至公式分解完畢,此時chaarr中存儲的所有字符實現(xiàn)連接后就是我們需要的后綴表達式。

3 程序?qū)崿F(xiàn)

根據(jù)前面確定的運算符優(yōu)先級和程序設(shè)計思想,可以如下代碼實現(xiàn)逆波蘭表達式轉(zhuǎn)換為后綴表達式。為了直觀的看到轉(zhuǎn)換結(jié)果,簡單的設(shè)計如圖1所示界面。

圖1 公式解釋器

只要在輸入公式文本框中輸入公式,點擊轉(zhuǎn)化按鈕就可以轉(zhuǎn)化為逆波蘭表達式。

程序?qū)崿F(xiàn)核心代碼如下,只要在轉(zhuǎn)化按鈕單擊事件中調(diào)用該代碼塊即可,其中涉及到的先期部分條件不再一一列出,代碼塊中有部分說明。核心代碼中對于不同操作符的判斷部分已經(jīng)刪除,其編寫原理與開始的“*”操作符類似,只要能合理設(shè)置操作符優(yōu)先級即可保證程序的正確運行,不再贅述。

ReDim chararr(Len(strexp))

'strexp表示通過界面輸入的公式,chararr()是定義的全局數(shù)組。

4 結(jié)束語

為了處理方便,編譯程序常把中綴表達式首先轉(zhuǎn)換成等價的逆波蘭表達式。在VB中,可以利用順序棧的工作原理使用數(shù)組實現(xiàn)表達式的中綴形式向逆波蘭表達式轉(zhuǎn)化,從而完成數(shù)值計算。

[1] 嚴蔚敏,吳偉民.數(shù)據(jù)結(jié)構(gòu)[M].北京:清華大學(xué)出版社,2004.

[2] 林永.Visual Basic程序Widows API編程手冊[M].北京:人民郵電出版社,2002.

主站蜘蛛池模板: 亚洲无码高清一区二区| 国产欧美在线视频免费| 另类专区亚洲| 久久综合五月婷婷| 99久久精品国产精品亚洲| 久草视频一区| 日韩一区二区在线电影| 亚洲精品中文字幕无乱码| 97se亚洲综合不卡| 中文字幕调教一区二区视频| 视频二区中文无码| 538精品在线观看| 97精品国产高清久久久久蜜芽| 国产人成网线在线播放va| 欧美日韩国产精品va| 日韩视频福利| 国产成人a在线观看视频| 毛片在线播放网址| 成人综合久久综合| 国产全黄a一级毛片| 亚洲男人在线| 精品少妇人妻无码久久| 国产尤物视频在线| av一区二区三区高清久久| 欧美综合区自拍亚洲综合天堂| 天天综合天天综合| 国产精品亚洲αv天堂无码| 欧美综合激情| 亚洲综合极品香蕉久久网| 国产精品人人做人人爽人人添| 亚洲日本中文综合在线| 日韩大片免费观看视频播放| 久久精品电影| 国产福利拍拍拍| 亚洲女同欧美在线| 青青青国产在线播放| 久久精品国产国语对白| 亚洲精品国产日韩无码AV永久免费网| 欧美日韩专区| 亚洲视频a| 手机永久AV在线播放| av尤物免费在线观看| 欧美区日韩区| 免费一级成人毛片| 欧美色视频在线| 伊人久久综在合线亚洲2019| 日本一区二区三区精品AⅤ| 国产伦片中文免费观看| 亚洲精品动漫| 中国一级毛片免费观看| 在线观看无码av五月花| 国产 在线视频无码| 国产亚卅精品无码| 国产精品护士| 欧洲日本亚洲中文字幕| 99热这里只有精品5| 香蕉色综合| 99热国产这里只有精品9九 | 亚洲中文字幕23页在线| 99视频在线免费看| 中文字幕在线日本| 亚洲最大在线观看| 亚洲Av综合日韩精品久久久| 国产精品2| 亚洲人成人伊人成综合网无码| 伊人91在线| 日韩精品一区二区三区swag| 国产a网站| 91热爆在线| 中国特黄美女一级视频| 国产大片黄在线观看| 自拍偷拍欧美| 日韩国产精品无码一区二区三区 | 亚洲成人免费看| 国产人人射| 国产精品制服| 日韩福利视频导航| 日韩在线欧美在线| 全部免费特黄特色大片视频| 黄片在线永久| 99这里只有精品免费视频| 日韩高清一区 |