c语言中缀表达式求值_数据结构考研笔记之栈与队列(四)栈与队列应用括号匹配、中缀表达式转前缀后缀问题...
文字:獨(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)題。
- 上一篇: 深度学习 占用gpu内存 使用率为0_深
- 下一篇: python 对话框的创建及调用_单击按