日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

四则运算表达式求值(栈的应用)

發布時間:2025/6/15 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 四则运算表达式求值(栈的应用) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.前/中/后綴表達式的轉換(首先需要明白三者之間的轉換)??

???自然表達式轉換為前/中/后綴表達式,其實是很簡單的。首先將自然表達式按照優先級順序,構造出與表達式相對應的二叉樹,然后對二叉樹進行前/中/后綴遍歷,即得到前/中/后綴表達式。 ??? 舉例說明將自然表達式轉換成二叉樹: ??? a×(b+c)-d ??? ① 根據表達式的優先級順序,首先計算(b+c),形成二叉樹 ??? ??? ???然后是a×(b+c),在寫時注意左右的位置關系 ??? ???最后在右邊加上?-d ??? ??? 然后最這個構造好的二叉樹進行遍歷,三種遍歷的順序分別是這樣的: ??? ① 前序遍歷:根-左-右 ????中序遍歷:左-根-右 ????后序遍歷:左-右-根 ??? 所以還是以剛才的這個例子,在最終二叉樹的基礎上可以得出: ??? 前綴表達式:-*a+bcd ??? 中綴表達式:a*b+c-d ??? 后綴表達式:abc+*d- 2.中綴表達式轉后綴表達式(棧的應用)?? ?中綴表達式“9+(3-1)*3+10/2”轉化為后綴表達式為“9 3 1- 3 * + 10 2 / +”.

?? 規則:從左到右遍歷中綴表達式的每一數字和符號,若是數字就輸出,即成為后綴表達式的一部分;若是符號,則判斷其與棧? 頂符號的優先級,是右括號或優先級低于棧頂符號(乘除優先加減)則棧頂元素依次出棧并輸出,并將當前符號進棧,一直到最終輸出后綴表達式為止。

??? a.初始化一空棧,用來對符號進出棧使用。

??? b.第一個字符是數字9,輸出9,后面是符號“+”,進棧。

??? c.第三個字符是“(”,依然是符號,因其只是左括號,還沒有配對,故進棧。

??? d.第四個字符是數字3,輸出,總表達式為9 3,接著是“-”,進棧。

??? e.接下來是數字1,輸出,總表達式為9 3 1,后面是符號“)”,此時,我們需要去匹配此前的“(”,所以棧頂依次出棧,并輸出,直到“(”出棧為止。此時左括號上方只有“-”,因此輸出“-”??偟谋磉_式為9 3 1 -。

??? f.接著是數字3,輸出,總的表達式為9 3 1 - 3.緊接著是符號“*”,因為此時的棧頂符號為“+”號,優先級低于“*”,因此不輸出,“*”進棧。

??? g.之后是符號“+”,此時當前棧頂元素“*”比這個“+”的優先級高,因此棧中元素出棧并輸出(沒有比“+”更低的優先級,所以全部出棧),總輸出表達式為9 3 1 - 3 * +。然后將當前這個符號“+”進棧。

??? h.緊接著數字10,輸出,總表達式為9 3 1 - 3 * + 10。后是符號“/”,所以“/”進棧。

??? i.最后一個數字2,輸出,總的表達式為9 3 1 - 3 * + 10 2。

??? j.因已經到最后,所以將棧中符號全部出棧并輸出。最終輸出的后綴表達式結果為9 3 1 - 3 * + 10 2 / +。

3.后綴表達式計算結果(棧的應用)

???后綴表達式為:9 3 1 - 3 * + 10 2 / +

?? 規則為:從左到右遍歷表達式的每個數字和符號,遇到是數字就進棧,遇到是符號,就將處于棧頂兩個數字出棧,進行運算,運算結果進棧,一直到最終獲得結果。

?? a.初始化一個空棧。此棧用來對要運算的數字進行進出使用。

?? b.后綴表達式中前三個是、都是數字,所以9 3 1 進棧。

?? c.接下來是“-”,所以將棧中的1出棧作為減數,3出棧作為被減數,并運算3-1得到2,再講2進棧。

?? d.接著是數字3進棧。

?? e.后面是“*”,也就意味著棧中3和2出棧,2與3相乘,得到6,并將6進棧。

?? f.下面是“+”,所以棧中6和9出棧,9和6相加,得到15,將15進棧。

?? g.接著是10和2兩數字進棧。

?? h.接下來是符號“/”,因此,棧頂的2與10出棧,10與2相除,得到5,將5進棧。

?? i.最后一個是符號“+”,所以15與5出棧并相加,得到20,講20進棧。

?? j.結果是20出棧,棧變為空。

?

?

[cpp]?view plaincopy
  • //下面的代碼只是支持一些簡單的整數的加減乘除運算,而且不支持浮點數,負數或者數字大于9的數字的運算,只是??
  • //自己簡單的寫一個代碼,將這個過程進行的簡單驗證,如果需要解決復雜的計算問題,可以上網查找資料來實現!???
  • #include<iostream>??
  • #include<cstdio>??
  • #include<string>??
  • #include<stack>??
  • using?namespace?std;??
  • ??
  • stack<char>?s;???
  • stack<int>?ss;???
  • ??
  • int?main()??
  • {??
  • ????int?len1,?len2,?len,?i,?j;??
  • ????string?str1,?str2;//str1為中綴表達式,str2為后綴表達式???
  • ????while?(1){??
  • ??????????//中綴表達式轉換為后綴表達式???
  • ??????????getline(cin,?str1);??
  • ??????????len1?=?str1.length();??
  • ??????????str2.clear();???
  • ??????????for?(i?=?0;?i?<?len1;?i++){??
  • ??????????????if?(str1[i]?>=?'0'?&&?str1[i]?<=?'9')???
  • ?????????????????str2.push_back(str1[i]);??
  • ??????????????else{??
  • ???????????????????if?(s.size()?==?0?||?str1[i]?==?'(')??
  • ???????????????????????s.push(str1[i]);??
  • ???????????????????else{??
  • ????????????????????????char?tmp1?=?s.top();??
  • ????????????????????????if?(str1[i]?==?')'){??
  • ????????????????????????????len?=?s.size();???
  • ???????????????????????????while?(len){??
  • ?????????????????????????????????char?tmp?=?s.top();???
  • ????????????????????????????????s.pop();??
  • ????????????????????????????????if?(tmp?==?'(')??
  • ????????????????????????????????????break;??
  • ????????????????????????????????else???
  • ????????????????????????????????????str2.push_back(tmp);???
  • ????????????????????????????????len--;???
  • ????????????????????????????}???
  • ????????????????????????}???
  • ????????????????????????else{??
  • ?????????????????????????????if?(tmp1?==?'*'?||?tmp1?==?'/'){??
  • ?????????????????????????????????if?(str1[i]?==?'*'?||?str1[i]?==?'/')???
  • ?????????????????????????????????????s.push(str1[i]);??
  • ?????????????????????????????????else{??
  • ??????????????????????????????????????len?=?s.size();???
  • ??????????????????????????????????????while?(len){??
  • ??????????????????????????????????????????char?tmp?=?s.top();???
  • ??????????????????????????????????????????str2.push_back(tmp);??
  • ??????????????????????????????????????????s.pop();???
  • ??????????????????????????????????????????len--;???
  • ??????????????????????????????????????}??
  • ??????????????????????????????????????s.push(str1[i]);????
  • ?????????????????????????????????}???
  • ?????????????????????????????}???
  • ?????????????????????????????else{??
  • ??????????????????????????????????s.push(str1[i]);???
  • ?????????????????????????????}???
  • ????????????????????????}???
  • ???????????????????}????
  • ??????????????}???
  • ??????????}??
  • ??????????if?(s.size()?!=?0){??
  • ??????????????len?=?s.size();???
  • ??????????????while?(len){??
  • ??????????????????char?tmp?=?s.top();???
  • ??????????????????str2.push_back(tmp);??
  • ??????????????????s.pop();???
  • ??????????????????len--;???
  • ??????????????}???
  • ??????????}???
  • ??????????cout?<<?str2?<<?endl;??
  • ??????????//由后綴表達式計算結果???
  • ??????????int?temp1,?temp2,?temp3;???
  • ??????????len2?=?str2.length();??
  • ??????????for?(i?=?0;?i?<?len2;?i++){??
  • ??????????????if?(str2[i]?>=?'0'?&&?str2[i]?<=?'9'){???
  • ??????????????????int?t?=?str2[i]-48;???
  • ??????????????????ss.push(t);???
  • ??????????????}???
  • ??????????????else{??
  • ???????????????????temp1?=?ss.top();??
  • ???????????????????ss.pop();??
  • ???????????????????temp2?=?ss.top();??
  • ???????????????????ss.pop();???
  • ???????????????????if?(str2[i]?==?'+'){??
  • ???????????????????????temp3?=?temp2?+?temp1;???
  • ???????????????????}??
  • ???????????????????else?if?(str2[i]?==?'-'){??
  • ????????????????????????temp3?=?temp2?-?temp1;???
  • ???????????????????}??
  • ???????????????????else?if?(str2[i]?==?'*'){??
  • ????????????????????????temp3?=?temp2?*?temp1;???
  • ???????????????????}??
  • ???????????????????else?if?(str2[i]?==?'/'){??
  • ????????????????????????temp3?=?temp2?/?temp1;???
  • ???????????????????}??
  • ???????????????????ss.push(temp3);???
  • ??????????????}??
  • ??????????}??
  • ??????????cout?<<?ss.top()?<<?endl;???
  • ????}???
  • ??????
  • ????system("pause");??
  • } ?
  • 總結

    以上是生活随笔為你收集整理的四则运算表达式求值(栈的应用)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 色黄网站 | 人妻天天爽夜夜爽一区二区三区 | 超碰中文字幕 | 少妇一级淫片免费放 | 一区视频网站 | 国产91高清 | 少妇av网| 精品成人中文无码专区 | 日韩成人精品一区 | 伊人久久九 | 日本一区免费 | 精品亚洲一区二区三区 | 色偷偷免费费视频在线 | 一区二区三区四区视频在线观看 | 国产在线拍揄自揄拍无码视频 | 精品人妻无码一区二区三区蜜桃一 | 国产精品国产精品国产专区蜜臀ah | 伊人影院在线观看视频 | 亚洲一久久 | 91素人约啪 | 肉色超薄丝袜脚交一区二区图片 | 欧洲视频一区二区 | 五十路中文字幕 | 高h在线观看 | 美日韩毛片| 亚洲你懂得 | 11一12免费毛片 | 亚洲一区二区视频在线观看 | 插插宗合网 | 91搞| 国产剧情久久久 | 久草福利在线视频 | 爱情岛论语亚洲入口 | 天堂新版8中文在线8 | 日本免费观看视频 | 久久久中文网 | 亚洲一久久 | 四虎永久地址 | 成人福利在线播放 | 狠狠狠狠狠狠狠干 | 成人av手机在线观看 | 国产一区二区三区四区精 | 乱lun合集男男高h | av基地 | 亚洲AV无码片久久精品 | 国产高清在线精品 | 亚洲国产97在线精品一区 | 欧洲女同同性吃奶 | 久久久久久久国产精品美女 | 中国一级特黄毛片 | 欧美精品乱码视频一二专区 | 国产美女视频91 | 韩日成人| 国产精品高潮AV无码 | 丁香婷婷久久 | 久久黄视频 | 久草免费在线观看 | 97麻豆| av网站在线观看不卡 | 国产一区麻豆 | 欧美做受69 | 奇米影视中文字幕 | 狼人伊人av | 成年人a级片 | 欧美日韩视频在线观看免费 | 国产一级特黄aaa大片 | 国产精品久久久久久人妻精品动漫 | 黄页网址大全免费观看 | 精品国产伦一区 | 亚洲第一在线播放 | 日韩精品色哟哟 | 亚洲成色在线 | 国产精品高清在线观看 | 久久精品国产99国产 | a在线一区| 91精品观看 | 国产精品操 | 欧美一区二区三区系列电影 | 亚洲精品97久久中文字幕无码 | 天堂av网址 | 无码黑人精品一区二区 | 佐山爱av在线 | 成人免费影片 | 天天射日日操 | 捆绑黑丝美女 | 国产一及片| 羞羞的软件 | 精品人妻一区二区三区免费 | 欧美精品一区二区在线观看 | 久久视 | 一进一出好爽视频 | 欧美另类z0z变态 | 大尺度床戏揉捏胸视频 | 91国产视频在线播放 | 欧洲中文字幕日韩精品成人 | www.夜夜| 永久免费黄色 | 色噜噜狠狠狠综合曰曰曰88av | 香蕉伊人 |