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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

c语言中缀表达式求值_数据结构考研笔记之栈与队列(四)栈与队列应用括号匹配、中缀表达式转前缀后缀问题...

發(fā)布時(shí)間:2025/3/19 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c语言中缀表达式求值_数据结构考研笔记之栈与队列(四)栈与队列应用括号匹配、中缀表达式转前缀后缀问题... 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文字:獨(dú)木

排版:獨(dú)木

圖片:獨(dú)木

棧與隊(duì)列

  • 1.括號(hào)匹配問(wèn)題

      • 例題1

      • 例題2-----不匹配例題1

      • 例題3-----不匹配例題2

  • 2. 表達(dá)式求值問(wèn)題

    • 例題

      • 1.中綴表達(dá)式轉(zhuǎn)前綴表達(dá)式

      • 2.中綴表達(dá)式轉(zhuǎn)后綴表達(dá)式

      • 實(shí)現(xiàn)過(guò)程:

  • 3. 遞歸:

    • 遞歸產(chǎn)生的問(wèn)題:

1.括號(hào)匹配問(wèn)題

例題1

算法思想:1)初始一個(gè)空棧,順序讀入括號(hào)。
若是右括號(hào),則與棧頂元素進(jìn)行匹配
·若匹配,則彈出棧頂元素并進(jìn)行下一個(gè)元素
·若不匹配,則該序列不合法
3)若是左括號(hào),則壓入棧中
4)若全部元素遍歷完畢,棧中非空則序列不合法

???解題:1.首先1、2都是左括號(hào),直接進(jìn)棧

2.第3個(gè)括號(hào)是右括號(hào)‘)’并且和2’(‘匹配,所以彈出當(dāng)前棧頂元素,如下圖

例題2-----不匹配例題1

?解題:1.和剛才一樣,左括號(hào)進(jìn)棧2.第3個(gè)括號(hào)是右括號(hào)且與當(dāng)前棧頂左括號(hào)2不匹配,所以此題不匹配

例題3-----不匹配例題2

題目:

?解題:1.左括號(hào)1、2進(jìn)棧,如下圖2.第三個(gè)括號(hào)為右括號(hào)且與當(dāng)前棧頂2 左括號(hào)匹配,所以彈出此時(shí)棧頂2 左括號(hào),然后括號(hào)4‘?]’,與當(dāng)前棧頂1 左括號(hào)’[‘,相匹配,所以彈出此時(shí)棧頂1’[‘第5個(gè)為左括號(hào)進(jìn)棧,如下圖3.棧非空,不合法。

2. 表達(dá)式求值問(wèn)題

前綴表達(dá)式:+AB
中綴表達(dá)式:A+B
后綴表達(dá)式:AB+符號(hào)分別在式子的前中后

例題

題目:[(A+B)*C]- [E-F]

1.中綴表達(dá)式轉(zhuǎn)前綴表達(dá)式

1.最先運(yùn)算的A+B ,‘+’提前,如下圖
2.然后是()*c, 轉(zhuǎn)換前綴就是將*提前 ,如下圖
3,E-F, 將‘-’提前。如下圖
4.最后一步就是【】-【】,兩個(gè)中括號(hào)相減, 改為前綴就是將減號(hào)提前,如下圖
[(A+B)*C]- [E-F] 轉(zhuǎn)成下圖

2.中綴表達(dá)式轉(zhuǎn)后綴表達(dá)式

1,式子首先運(yùn)算A+B,將’+‘后移,如下圖:A B +
2,*計(jì)算( )*c,轉(zhuǎn)為后綴是將’*‘后移,為()C?,如下圖:
3,計(jì)算[E-F],將’-’后移,E F - ,如下圖
4,計(jì)算[ ] -[ ],將‘-’后移 [ ] [ ] - , 如下圖
最終:A B + C * E F - -

實(shí)現(xiàn)過(guò)程:

算法思想:zho數(shù)字直接加入后綴表達(dá)式
運(yùn)算符時(shí):
a.若為‘(’,入棧;
b.若為‘)’,則依次把棧中的運(yùn)算符加入后綴表達(dá)式,直到出現(xiàn)’(’,并從棧中刪除’(’;
c.若為’+’,‘-’,‘*’,’/‘,
·棧空,入棧;
·棧頂元素為’(’,入棧;
·高于棧頂元素優(yōu)先級(jí),入棧;
·否則,依次彈出棧頂運(yùn)算符,直到一個(gè)優(yōu)先級(jí)比它低的運(yùn)算符或‘('為止;
d.遍歷完成,若棧非空依次彈出所有元素。

1.都為左括號(hào),入棧(算法思想中情況a),如下圖
2,數(shù)字A直接加入表達(dá)式
3.加號(hào)‘+’,且此時(shí)棧頂為左括號(hào),入棧操作,(算法思想中c)如下圖
4.數(shù)字B直接加入表達(dá)式
5.符號(hào)‘)’,(算法思想b)依次將此時(shí)棧中元素彈出加入后綴表達(dá)式直到遇到左括號(hào)‘(’,并從棧中刪除“(”,如下圖,
刪除后,棧中只有第一個(gè)‘(’
6.符號(hào)‘’,(算法思想c)此時(shí)棧頂為‘(’ ,直接入棧,如下圖
7.減號(hào)‘-’,不高于此時(shí)棧頂‘’的優(yōu)先級(jí),彈出棧中元素,直到‘(’,(算法思想c).

8.減號(hào)‘-’,此時(shí)棧為空,直接入棧(算法思想C)
左括號(hào)‘(’,直接入棧
數(shù)字E直接加入后綴(算法思想a)
減號(hào)‘-’,因?yàn)榇藭r(shí)棧頂為左括號(hào)‘(’,所以減號(hào)直接入棧(算法思想C)
數(shù)字F直接加入后綴(算法思想a)
9.右括號(hào)‘)’,依次彈出棧頂加入到后綴,直到遇到左括號(hào)‘(’(算法思想b)。
10.遍歷完了,若棧不為空,將棧中數(shù)據(jù)依次彈出加入到后綴。(算法思想d)

3. 遞歸:

遞歸若在一個(gè)函數(shù)、過(guò)程或數(shù)據(jù)結(jié)構(gòu)的定義中又應(yīng)用了它自身,則稱它為遞歸定義的,簡(jiǎn)稱遞歸

int

遞歸的精髓在于能否將原始問(wèn)題轉(zhuǎn)換為屬性相同但規(guī)模較小的問(wèn)題

遞歸產(chǎn)生的問(wèn)題:

*在遞歸調(diào)用過(guò)程中,系統(tǒng)為每一層的返回點(diǎn)、局部變量、傳入實(shí)參等開(kāi)辟了遞歸工作棧來(lái)進(jìn)行數(shù)據(jù)存儲(chǔ),遞歸次數(shù)過(guò)多容易造成棧溢出。
*通常情況下遞歸的效率并不高

***遞歸轉(zhuǎn)換算法轉(zhuǎn)換為非遞歸算法,往往需要借助棧來(lái)進(jìn)行

End

1

發(fā)現(xiàn)更多精彩

關(guān)注公眾號(hào)

總結(jié)

以上是生活随笔為你收集整理的c语言中缀表达式求值_数据结构考研笔记之栈与队列(四)栈与队列应用括号匹配、中缀表达式转前缀后缀问题...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。