1樓:程式設計師面試寶典
我已發過來了,全手工。
中綴表示式轉字尾表示式怎麼轉?
2樓:小小綠芽聊教育
中綴表示式a + b*c + d * e + f) *g,其轉換成字尾表示式則為a b c * d e * f + g *
轉換過程需要用到棧,具體過程如下:
1)如果遇到運算元,我們就直接將其輸出。
2)如果遇到操作符,則我們將其放入到棧中,遇到左括號時我們也將其放入棧中。
3)如果遇到乙個右括號,則將棧元素彈出,將彈出的操作符輸出直到遇到左括號為止。注意,左括號只彈出並不輸出。
4)如果遇到任何其他的操作符,如(「+等,從棧中彈出元素直到遇到發現更低優先順序的元素(或者棧為空)為止。彈出完這些元素後,才將遇到的操作符壓入到棧中。有一點需要注意,只有在遇到" )的情況下我們才彈出" (其他情況我們都不會彈出" (
5)如果我們讀到了輸入的末尾,則將棧中所有元素依次彈出。
中綴表示式如何轉換為前字尾表示式?
3樓:海天盛
1.中綴表示式字尾演算法:遇到運算元,直接輸出。
2.棧是空的,遇到操作符,直接推棧。
3.當遇到開括號時,按下它,如下圖所示。
4.當遇到右括號時,執行out操作並開始輸出out元素。直到彈出堆疊的元素是乙個開括號。
5.當遇到其他操作符時,彈出該操作符大於或等於堆疊頂部的所有優先順序元素,然後將該操作符推入堆疊。最後,將堆疊中的元素推出堆疊。
4樓:網友
1、中綴表示式變字尾的演算法:遇到運算元,直接輸出。
2、棧為空是,遇到運算子,直接入棧。
3、遇到左括號時,將其入棧。
4、遇到右括號時,執行出棧操作,並且開始將出棧的元素輸出。直到彈出棧的元素是左括號為止。
5、遇到其他運算子的時候,彈出所有優先順序大於等於該運算子棧頂元素,然後將該運算子入棧。最終將棧中的元素依次出棧。
5樓:
中綴轉字尾表示式:設計兩個棧,乙個是字元型的,存放運算子,用以將算數表示式變成無括號的表示式;另乙個是浮點型的,存放運算元,用以對無符號的表示式求值。要先假設運算子的優先順序:
首先將乙個左括號『(』進棧,作為棧底元素;接著從左到右對算數表示式進行掃瞄,每次讀乙個字元,若遇到左括號『(』則進棧; 若遇到的是運算元,則立即輸出; 若又遇到運算子,如果他的優先順序比棧頂元素的優先順序高的話,則直接進棧,否則輸出棧頂元素,直到新的棧頂元素的優先順序比他低的時候,將他壓棧; 若遇到的是右括號『)』則將棧頂的運算子輸出,知道棧頂的元素為『(』談後,左右括號互相抵消; 如果最終,我們要掃瞄的表示式結束,就將棧中的運算子全部輸出,消除棧底的左括號『(』
我也是剛學,資料結構上用到的,你看看對你有沒有幫助吧。
6樓:求求你啦幫忙
我可以幫個小忙,樹學過嗎?把字尾表示式換成中綴我會,把表示式換成樹的形式和順序;樹其實很簡單,看看就好了,用樹比較好理解。
7樓:網友
一箇中綴式到其他式子的轉換方法~~
這裡我給出一箇中綴表示式~
a+b*c-(d+e)
第一步:按照運算子的優先順序對所有的運算單位加括號~式子變成拉:((a+(b*c))-d+e))第二步:轉換字首與字尾表示式。
字首:把運算子號移動到對應的括號前面。
則變成拉:-(a *(bc)) de))把括號去掉:-+a*bc+de 字首式子出現字尾:把運算子號移動到對應的括號後面。
則變成拉:((a(bc)* de)+ 把括號去掉:abc*+de+- 字尾式子出現。
將中綴表示式轉換為字尾表示式
8樓:亞浩科技
數學裡面的公式就是中綴表示式,是我們生活中裡面常用的表示式,比如說 a*(b+c) ,中綴表示式可以用括號來調整優先順序。
運算子放在兩個運算物件的後面,所有的計算按運算子出現的順序,嚴格從左向右進行(不用考慮運算子的優先順序),如 a*(b+c) ,轉化為字尾表示式 即 a b + 3 *
從頭到尾讀取中綴表示式中的每個物件, 對不同物件按不同情況處理。
例如將中綴表示式 2 * 9 + 6 / 3 - 5) +4 轉化為字尾表示式 2 9 6 3 / 5 - 4 + 轉換步驟如下:
中綴表示式轉字尾表示式是什麼?
9樓:由由講百科
中綴表示式轉字尾表示式規則:1、初始化兩個棧:運算子棧s1和儲存中間結果的棧s2;
2、從左至右掃瞄中綴表示式;
3、遇到運算元時,將其壓s2;
4、遇到運算子時,比較其與s1棧頂運算子的優先順序:
1)如果s1為空,或棧頂運算子為左括號「(」則直接將此運算子入棧;
2)否則,若優先順序比棧頂運算子的高,也將運算子壓入s1;
3)否則,將s1棧頂的運算子彈出並壓入到s2中,再次轉到(與s1中新的棧頂運算子相比較;
5、遇到括號時:
1)如果是左括號"("則直接壓入s1 ;
2)如果是右括號")"則依次彈出s1棧頂的運算子,並壓入s2,直到遇到左括號為止,此時將這一對括號丟棄,重複步驟2至5,直到表示式的最右邊;
6、將s1中剩餘的運算子依次彈出並壓入s2;
7、依次彈出s2中的元素並輸出,結果的逆序即為中綴表示式對應的字尾表示式。
中綴表示式怎麼轉換為字尾表示式
10樓:匿名使用者
1. 初始化一空棧,用來對符號進出棧使用。
2. 第乙個字元是數字9,輸出9,後面是符號「+」進棧。
3. 第三個字元是「(」依然是符號,因其只是左括號,還未配對,故進棧。
4. 第四個字元是數字3,輸出,總表示式為9 3,接著是「-」進棧。
5. 接下來是數字1,輸出,總表示式為9 3 1,後面是符號「)」此時,我們需要去匹配此前的「(」所以棧頂依次出棧,並輸出,直到「(」出棧為止。此時左括號上方只有「-」因此輸出「-」總的輸出表示式為9 3 1 -
6. 接著是數字3,輸出,總的表示式為9 3 1 - 3 。緊接著是符號「*」因為此時的棧頂符號為「+」號,優先順序低於「*」因此不輸出,進棧。
7. 之後是符號「+」此時當前棧頂元素比這個「+」的優先順序高,因此棧中元素出棧並輸出(沒有比「+」號更低的優先順序,所以全部出棧),總輸出表示式為 9 3 1 - 3 * 然後將當前這個符號「+」進棧。
也就是說,前6張圖的棧底的「+」是指中綴表示式中開頭的9後面那個「+」而下圖中的棧底(也是棧頂)的「+」是指「9+(3-1)*3+」中的最後乙個「+」
8. 緊接著數字10,輸出,總表示式變為9 3 1-3 * 10。
9. 最後乙個數字2,輸出,總的表示式為 9 3 1-3*+ 10 2
10. 因已經到最後,所以將棧中符號全部出棧並輸出。最終輸出的字尾表示式結果為 9 3 1-3*+ 10 2/+
從剛才的推導中你會發現,要想讓計算機具有處理我們通常的標準(中綴)表示式的能力,最重要的就是兩步:
將中綴表示式轉化為字尾表示式(棧用來進出運算的符號)。
將字尾表示式進行運算得出結果(棧用來進出運算的數字)。
整個過程,都充分利用了找的後進先出特性來處理,理解好它其實也就理解好了棧這個資料結構。
11樓:陽萱函梓玥
從演算法來說,要考慮中綴的運算子優先順序,括號等,可以使用簡單語法制導翻譯,去專看編譯原理書屬吧,從資料結構來說,可以使用二元樹和棧。使用二元樹就是先建立表示式的樹,然後後根遍歷即可。難點在建立樹。
使用棧的演算法也很多,說個好想的。假設表示式的字元來自輸入流in,建立棧a存放運算子,b存放結果,從in讀入乙個運算元壓進b,讀入乙個運算子壓進a,如此反覆。
1.讀入乙個元素e
2.如果e是運算元或者(,壓入b,跳轉到1
3.如果e是運算子(不包含括號),跳轉到。
4.如果e是),跳轉到。
5.如果e是eof,即輸入流結束,反覆彈出a棧頂壓入b,直到a為空,演算法結束,b從棧底到棧頂的符號即為字尾表示式(需要把b翻個個兒^_^
判斷a的棧定符號t,如果t不為(,且優先順序大於等於e,則彈出t壓入b,跳轉到4,如果t為空,即棧中為空,或其他情況直接把e壓入a,跳轉到1
彈出a的棧頂壓入到b,如此反覆直到彈出的符號為(,(和)不要壓入b,跳轉到1
這是我臨時想的,可能還有bug,或描述不清的地方,如果上網搜的話應該有很多源**的,如果學過編譯原理的話還可以有更好的演算法,這個演算法沒考慮容錯性。
中綴表示式的中綴轉字尾
12樓:海星1219是嚦
逆波蘭算梁逗法。
見字尾表鉛備達式橡激賣。
中綴表示式轉換成字尾表示式時運算子是如何進出棧
13樓:網友
中綴表示式,是正常書寫的方式,如公式a+b*c字尾表示式也稱(逆波蘭表示式),對中綴的表示為abc*+轉換方法,對公式字串進行逐位判斷。遇到公式中的變數直接輸出,執行符入棧。
入棧時,比較棧頂運算子與入棧運算子的高低,再行出棧和入棧。
舉例:公式:a+b*c
1,輸出a2,入棧+(棧為空)
3,輸出b4,*入棧(*與棧頂元素+比較,如果棧頂優先順序高,則先輸出棧頂元素,否則入棧當前運算子)
5,輸出c6,出棧*
7,出棧+
編寫c語言程式要求用結構體,編寫一個C語言程式,要求用結構體。
我給你寫一個 先給你寫一部分吧 include include typedef struct lnode lnode void createlnode int student number void sort main structstudent n 參賽學生總數,每人一個檔案 陣列 unsigne...
c 編寫日期類,c 編寫一個日期類
include include static char static char month 12 static day 12 int leap int year int week int year void main while year 1900 要求輸入的年份必須大於1900 if leap y...
C語言編寫程式計算C語言編寫一個程式計算。。。
親,你的程式迴圈copy永遠不會停止 bai此句for i 1 fabs 1 i i 1 1e 6 i i永遠大於0 所以不會停du止 所以沒輸出入 沒錯zhi誤計算機只能計算有限的數值,這dao種無限逼近型的不能用這種方法算的 fabs 1 i i 1 有錯誤,bai 1 i i 1 1 i i ...