創(chuàng)作不易,本篇文章如果幫助到了你,還請點贊 關注支持一下?>??<)!!
主頁專欄有更多知識,如有疑問歡迎大家指正討論,共同進步!
??c語言系列專欄:c語言之路重點知識整合 ??
給大家跳段街舞感謝支持!? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
后綴表達式充分利用了棧的知識
棧(Stack)是一種后進先出(LIFO)的數(shù)據(jù)結構
棧通常包括兩個主要操作:入棧(push)和出棧(pop)
以及另外兩個次要操作:查詢棧頂元素(peek)和判斷棧是否為空(isEmpty)
一、概念
后綴表達式,又稱逆波蘭式,指的是不包含括號,運算符放在兩個運算對象的后面,所有的計算按運算符出現(xiàn)的順序,嚴格從左向右進行(不再考慮運算符的優(yōu)先規(guī)則)。
二、計算過程理解
如果在表達式中遇到運算符,就進行運算符前兩個數(shù)使用這個運算符進行計算,結果保留,再進行后續(xù)的計算,再次遇到運算符時,計算過程同上。
三、原理
建立一個空棧
從左到右讀表達式,如果讀到數(shù)據(jù)就將它壓入棧中,如果讀到運算符則取出由棧頂向下的數(shù)據(jù)按操作數(shù)運算
再將運算的結果代替原棧頂?shù)臄?shù)據(jù),壓入棧中
如果后綴表達式未讀完,則重復上面過程,最后輸出棧頂?shù)臄?shù)值則為結束
- 如果當前字符是數(shù)字,則將其轉換為整數(shù)并將其壓入棧
- 如果當前字符是運算符,則彈出堆棧上的最后兩個元素,使用該運算符對這兩個元素進行計算,并將結果壓入棧
堆棧頂部的元素即為表達式的計算結果。
中綴表達式轉換為后綴表達式
- 創(chuàng)建一個空棧和一個空串,用于存放運算符和轉換后的后綴表達式;
- 從左到右遍歷中綴表達式中的每個元素:
- 如果當前元素是操作數(shù),將其添加到輸出串的末尾;
2.如果當前元素是左括號“(”,將其壓入棧中;
3.如果當前元素是右括號“)”,則重復出棧操作直到棧頂元素是左括號,并將所有操作符加入輸出串中;
4.如果當前元素是操作符,并且其優(yōu)先級低于或等于棧頂運算符,則彈出棧頂元素并將其加入輸出串中,然后再將當前操作符壓入棧中;
5.如果當前元素是操作符,并且其優(yōu)先級高于棧頂元素,則直接將當前操作符入棧。
- 當中綴表達式中所有元素被處理完畢后,將棧中剩余的所有操作符都加入輸出串中。
最終得到的輸出串就是中綴表達式對應的后綴表達式
根據(jù)?乘號的優(yōu)先級,補充括號
拆解表達式:
-
左側存放數(shù)據(jù),右側存放符號
-
當遇到右括號時,將左右括號中的符號放到左側,剩下的符號依然在右側
-
重復過程就得到了后綴表達式文章來源:http://www.zghlxwxcb.cn/news/detail-743150.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-743150.html
大家的點贊、收藏、關注將是我更新的最大動力! 歡迎留言或私信建議或問題。 |
大家的支持和反饋對我來說意義重大,我會繼續(xù)不斷努力提供有價值的內容!如果本文哪里有錯誤的地方還請大家多多指出(●'?'●) |
到了這里,關于【數(shù)據(jù)結構】一篇文章帶你徹底學會《后綴表達式》的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!