版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第4章棧和隊(duì)列4.1棧4.2隊(duì)列4.3遞歸目的:使用?;蜿?duì)列求解應(yīng)用問(wèn)題。要求:棧和隊(duì)列的順序和鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)實(shí)現(xiàn)。重點(diǎn):棧和隊(duì)列的設(shè)計(jì)和應(yīng)用。難點(diǎn):?;蜿?duì)列的使用場(chǎng)合,以及如何使用 棧和隊(duì)列求解應(yīng)用問(wèn)題。4.1棧4.1.1棧抽象數(shù)據(jù)類(lèi)型
棧(stack)是一種線(xiàn)性表,插入和刪除操作只允許在線(xiàn)性表的一端進(jìn)行。先進(jìn)后出。圖4.1棧(順序棧)及其狀態(tài)變化{A,B,C,D}{入棧,入棧,出棧,入棧,入棧,出棧,出棧,出棧}【思考題4-1】入棧{A,B,C,D},出棧{A,B,C,D}、{D,C,B,A}?還有哪些?有哪些不可能的出棧序列?為什么?棧抽象數(shù)據(jù)類(lèi)型ADT,棧接口publicinterfaceStack<T>{publicabstractbooleanisEmpty();//判空
publicabstractvoidpush(Tx);//x入棧
publicabstractTpeek();//返回棧頂,未出棧
publicabstractTpop();//出棧,返回棧頂}習(xí)題4-3習(xí)4-3
能否使用一個(gè)線(xiàn)性表對(duì)象作為棧,或?qū)B暶鳛槔^承線(xiàn)性表?入棧調(diào)用insert(0,x)函數(shù),出棧調(diào)用remove(0)函數(shù)?為什么?【習(xí)題解答】都不能。4.1.2順序棧//順序棧類(lèi),最終類(lèi),實(shí)現(xiàn)棧接口,T表示元素類(lèi)型publicfinalclassSeqStack<T>implementsStack<T>{privateSeqList<T>list;//順序表publicSeqStack(intcapacity)//構(gòu)造空棧publicSeqStack()//構(gòu)造空棧publicbooleanisEmpty()//判空publicvoidpush(Tx)//x入棧publicTpeek()//返回棧頂(未出棧)publicTpop()//出棧,返回棧頂元素}習(xí)題解答4-4使用順序表對(duì)象作為棧成員變量的操作效率分析4.1.3鏈?zhǔn)綏D4.3鏈?zhǔn)綏5娜霔:统鰲2僮鳌稊?shù)據(jù)結(jié)構(gòu)(Java版)(第4版)》第4章8鏈?zhǔn)綏n?lèi)LinkedStack<T>//鏈?zhǔn)綏n?lèi),最終類(lèi),實(shí)現(xiàn)棧接口,T表示元素類(lèi)型publicfinalclassLinkedStack<T>
implementsStack<T>{privateSinglyList<T>list;//單鏈表
publicLinkedStack()//構(gòu)造空棧publicbooleanisEmpty()//判空publicvoidpush(Tx)//x入棧publicTpeek()//返回棧頂(未出棧)publicTpop()//出棧,返回棧頂元素}《數(shù)據(jù)結(jié)構(gòu)(Java版)(第4版)》第4章9習(xí)題解答4-4使用單鏈表對(duì)象作為棧成員變量的操作效率分析《數(shù)據(jù)結(jié)構(gòu)(Java版)(第4版)》第4章104.1.4棧的應(yīng)用棧是嵌套調(diào)用機(jī)制的實(shí)現(xiàn)基礎(chǔ)使用棧以非遞歸方式實(shí)現(xiàn)遞歸算法《數(shù)據(jù)結(jié)構(gòu)(Java版)(第4版)》第4章11【例4.1】括號(hào)匹配的語(yǔ)法檢查。圖4.5表達(dá)式中圓括號(hào)匹配的語(yǔ)法檢查《數(shù)據(jù)結(jié)構(gòu)(Java版)(第4版)》第4章12【例4.2】使用棧計(jì)算算術(shù)表達(dá)式值中綴表達(dá)式:1+2*(3-4)+5《數(shù)據(jù)結(jié)構(gòu)(Java版)(第4版)》第4章13習(xí)題4-5【習(xí)題解答】ABCDEF+*G/-H+*+IJ+K*-習(xí)4-5
中綴表達(dá)式如下,寫(xiě)出后綴表達(dá)式。
A+B*(C-D*(E+F)/G+H)-(I+J)*K《數(shù)據(jù)結(jié)構(gòu)(Java版)(第4版)》第4章14(1)將中綴表達(dá)式轉(zhuǎn)換為后綴表達(dá)式《數(shù)據(jù)結(jié)構(gòu)(Java版)(第4版)》第4章15(2)后綴表達(dá)式求值《數(shù)據(jù)結(jié)構(gòu)(Java版)(第4版)》第4章16ExpressionpublicclassExpression{StringBuffertoPostfix(Stringinfix)//返回將infix中綴表達(dá)式轉(zhuǎn)換成的后綴表達(dá)式inttoValue(StringBufferpostfix) //計(jì)算后綴表達(dá)式的值}【思考題4-2】《數(shù)據(jù)結(jié)構(gòu)(Java版)(第4版)》第4章174.2隊(duì)列4.2.1隊(duì)列抽象數(shù)據(jù)類(lèi)型隊(duì)列(queue)是一種特殊的線(xiàn)性表,其插入和刪除操作分別在線(xiàn)性表的兩端進(jìn)行。先進(jìn)先出?!稊?shù)據(jù)結(jié)構(gòu)(Java版)(第4版)》第4章184.2.1隊(duì)列抽象數(shù)據(jù)類(lèi)型//隊(duì)列接口,描述隊(duì)列抽象數(shù)據(jù)類(lèi)型,T表示元素類(lèi)型publicinterfaceQueue<T>{
publicabstractbooleanisEmpty();//判空
publicabstractbooleanadd(Tx);//x入隊(duì)
publicabstractTpeek();//返回隊(duì)頭,沒(méi)有刪除publicabstractTpoll();//出隊(duì),返回隊(duì)頭}《數(shù)據(jù)結(jié)構(gòu)(Java版)(第4版)》第4章19習(xí)題4-8習(xí)4-8
能否使用一個(gè)線(xiàn)性表對(duì)象作為隊(duì)列,或?qū)㈥?duì)列聲明為繼承線(xiàn)性表,入棧調(diào)用insert(x)函數(shù),出棧調(diào)用remove(0)函數(shù)?為什么?【習(xí)題解答】都不能?!稊?shù)據(jù)結(jié)構(gòu)(Java版)(第4版)》第4章204.2.2順序隊(duì)列順序隊(duì)列(1)使用順序表,出隊(duì)效率低《數(shù)據(jù)結(jié)構(gòu)(Java版)(第4版)》第4章21(2)使用數(shù)組,存在假溢出不移動(dòng)數(shù)據(jù)元素《數(shù)據(jù)結(jié)構(gòu)(Java版)(第4版)》第4章222.順序循環(huán)隊(duì)列front=(front+1)%length;rear=(rear+1)%length;《數(shù)據(jù)結(jié)構(gòu)(Java版)(第4版)》第4章233.順序循環(huán)隊(duì)列類(lèi)//順序循環(huán)隊(duì)列類(lèi),最終類(lèi),實(shí)現(xiàn)隊(duì)列接口,T元素類(lèi)型publicfinalclassSeqQueue<T>implementsQueue<T>{
privateObjectelement[];//數(shù)組
privateintfront,rear;//隊(duì)列頭尾下標(biāo)
publicSeqQueue(intcapacity)//構(gòu)造空隊(duì)列publicSeqQueue()//構(gòu)造空隊(duì)列publicbooleanisEmpty();//判空publicbooleanadd(Tx);//x入隊(duì)publicTpeek();//返回隊(duì)頭,沒(méi)有刪除publicTpoll();//出隊(duì),返回隊(duì)頭}
《數(shù)據(jù)結(jié)構(gòu)(Java版)(第4版)》第4章244.2.3鏈?zhǔn)疥?duì)列(1)使用單鏈表,入隊(duì)效率低《數(shù)據(jù)結(jié)構(gòu)(Java版)(第4版)》第4章25(2)單鏈表設(shè)計(jì),增加尾指針《數(shù)據(jù)結(jié)構(gòu)(Java版)(第4版)》第4章26鏈?zhǔn)疥?duì)列類(lèi)LinkedQueue<T>//鏈?zhǔn)疥?duì)列類(lèi),最終類(lèi),實(shí)現(xiàn)隊(duì)列接口,T元素類(lèi)型publicfinalclassLinkedQueue<T>implementsQueue<T>{privateNode<T>front,rear;//隊(duì)頭和隊(duì)尾結(jié)點(diǎn)
publicLinkedQueue()//構(gòu)造空隊(duì)列
publicbooleanisEmpty();//判空publicbooleanadd(Tx);//x入隊(duì)publicTpeek();//返回隊(duì)頭,沒(méi)有刪除publicTpoll();//出隊(duì),返回隊(duì)頭}《數(shù)據(jù)結(jié)構(gòu)(Java版)(第4版)》第4章274.2.4隊(duì)列的應(yīng)用【例4.3】求解素?cái)?shù)環(huán)問(wèn)題?!稊?shù)據(jù)結(jié)構(gòu)(Java版)(第4版)》第4章28【例4.3】求解素?cái)?shù)環(huán)問(wèn)題。publicclassPrimeRing
{publicPrimeRing(intmax)publicSortedSeqList<Integer>
createPrime(intmax)}【思考題4-3】①使用循環(huán)雙鏈表存儲(chǔ)素?cái)?shù)集合和素?cái)?shù)環(huán)。②使用棧?《數(shù)據(jù)結(jié)構(gòu)(Java版)(第4版)》第4章29實(shí)驗(yàn)4-13走迷宮(a)棧存儲(chǔ)經(jīng)過(guò)的點(diǎn),出棧返回上一個(gè)點(diǎn),再尋找其他路徑《數(shù)據(jù)結(jié)構(gòu)(Java版)(第4版)》第4章30實(shí)驗(yàn)4-13走迷宮《數(shù)據(jù)結(jié)構(gòu)(Java版)(第4版)》第4章31實(shí)驗(yàn)4-14騎士游歷《數(shù)據(jù)結(jié)構(gòu)(Java版)(第4版)》第4章32實(shí)驗(yàn)4-14
騎士游歷8×8棋盤(pán),從(0,0)開(kāi)始的一次游歷路徑5×5棋盤(pán),一次不成功游歷路徑《數(shù)據(jù)結(jié)構(gòu)(Java版)(第4版)》第4章334.2.5優(yōu)先隊(duì)列優(yōu)先隊(duì)列(PriorityQueue),隊(duì)列中的每個(gè)元素都有一個(gè)優(yōu)先級(jí),每次出隊(duì)的是具有最高優(yōu)先級(jí)的元素。優(yōu)先隊(duì)列的存儲(chǔ)結(jié)構(gòu)。分別使用一個(gè)順序表、排序順序表、單鏈表、排序單鏈表、循環(huán)雙鏈表、排序循環(huán)雙鏈表作為優(yōu)先隊(duì)列的成員變量,分析優(yōu)先隊(duì)列的入隊(duì)和出隊(duì)操作的效率?!稊?shù)據(jù)結(jié)構(gòu)(Java版)(第4版)》第4章34習(xí)題4-13優(yōu)先隊(duì)列優(yōu)先隊(duì)列,分別使用各種線(xiàn)性表。{(E,4),(D,3),(A,1),(F,3),(B,2),(C,1)}習(xí)題解答《數(shù)據(jù)結(jié)構(gòu)(Java版)(第4版)》第4章35習(xí)題4-13《數(shù)據(jù)結(jié)構(gòu)(Java版)(第4版)》第4章36優(yōu)先隊(duì)列類(lèi)PriorityQueue<TextendsComparable<T>>//優(yōu)先隊(duì)列類(lèi)(升或降),最終類(lèi),實(shí)現(xiàn)隊(duì)列接口,T是元素類(lèi)型publicfinalclassPriorityQueue<TextendsComparable<?superT>>implementsQueue<T>{privateSortedCirDoublyList<T>list;//排序循環(huán)雙鏈表
privatebooleanasc;
//asc指定升序(true)或降序
publicPriorityQueue(booleanasc)//構(gòu)造空隊(duì)列publicPriorityQueue()//構(gòu)造空隊(duì)列,默認(rèn)升序
publicbooleanisEmpty();//判空publicbooleanadd(Tx);//x入隊(duì)publicTpeek();//返回隊(duì)頭,沒(méi)有刪除publicTpoll();//出隊(duì),返回隊(duì)頭}《數(shù)據(jù)結(jié)構(gòu)(Java版)(第4版)》第4章37【例4.4】進(jìn)程按優(yōu)先級(jí)調(diào)度管理//進(jìn)程類(lèi)publicclassProcessimplementsComparable<Process>{privateStringname;//進(jìn)程名
privateintpriority; //優(yōu)先級(jí)
publicProcess(Stringname,intpriority)publicProcess(Stringname)
publicStringtoString()publicintcompareTo(Processp)}《數(shù)據(jù)結(jié)構(gòu)(Java版)(第4版)》第4章38遞歸定義遞歸算法f(n)=n×f(n-1)【思考題4-4】publicstaticintfactorial(intn) //求階乘n!,遞歸方法4.3遞歸《數(shù)據(jù)結(jié)構(gòu)(Java版)(第4版)》第4章39【思考題4-4】求階乘n!publicstaticintfactorial(intn)//遞歸方法{if(n<0)//拋出無(wú)效參數(shù)異常
thrownewIllegalArgumentException("n="+n);
if(n==0||n==1)//邊界條件,遞歸結(jié)束條件
return1;returnn*factorial(n-1);//遞歸調(diào)用,遞推通式}《數(shù)據(jù)結(jié)構(gòu)(Java版)(第4版)》第4章40【例4.5】求Fibonacci序列?!稊?shù)據(jù)結(jié)構(gòu)(Java版)(第4版)》第4章41打印數(shù)字塔publicstaticvoidline(inti){if(i<10)line(i+1);System.out.print(String.format("%3d",i));}執(zhí)行l(wèi)ine(1)結(jié)果?輸出10987654321《數(shù)據(jù)結(jié)構(gòu)(Java版)(第4版)》第4章42習(xí)題解答例4.1打印數(shù)字塔
112112321123432112345432112345654321123456765432112345678765432112345678987654321《數(shù)據(jù)結(jié)構(gòu)(Java版)(第4版)》第4章43【例4.6】計(jì)算算術(shù)表達(dá)式的值,遞歸算法?!此阈g(shù)表達(dá)式〉∷=〈項(xiàng)〉|〈項(xiàng)〉+〈項(xiàng)〉|〈項(xiàng)〉-〈項(xiàng)〉〈項(xiàng)〉∷=〈因子〉|〈因子〉×〈因子〉|〈因子〉/〈因子〉| 〈因子〉%〈因子〉〈因子〉∷=〈常數(shù)〉|(〈算術(shù)表達(dá)式〉)〈整數(shù)〉∷=〈數(shù)字〉|+〈數(shù)字〉|-〈數(shù)字〉|〈整數(shù)〉〈數(shù)字〉〈數(shù)字〉∷=0|1|2|3|4|5|6|7|8|9《數(shù)據(jù)結(jié)構(gòu)(Java版)(第4版)》第4章44算術(shù)表達(dá)式語(yǔ)法圖《數(shù)據(jù)結(jié)構(gòu)(Java版)(第4版)》第4章45算術(shù)表達(dá)式類(lèi)ArithmeticExpression//算術(shù)表達(dá)式(整數(shù)、不包括位運(yùn)算)publicclassArithmeticExpression{privateStringinfix;//中綴算術(shù)表達(dá)式
privateintindex;//當(dāng)前字符序號(hào)
publicArithmeticExpression(Stringinfix)publicintintValue()//計(jì)算表達(dá)式,返回整數(shù)
privateintterm()//計(jì)算〈項(xiàng)〉privateintfactor()//計(jì)算〈因子〉
privateintconstant()//計(jì)算〈常數(shù)〉}《數(shù)據(jù)結(jié)構(gòu)(Java版)(第4版)》第4章463.單鏈表的遞歸算法(1)遍歷單鏈表的遞歸算法publicStringtoString(){return"("+this.toString(this.head.next)+")";}privateStringtoString(Node<T>p)//遞歸算法{if(p==null)return"";//遞歸結(jié)束條件Stringstr=p.data.toString();if(p.next!=null)str+=",";returnstr+toString(p.next);//遞歸調(diào)用}《數(shù)據(jù)結(jié)構(gòu)(Java版)(第4版)》第4章47(2)構(gòu)造單鏈表的遞歸算法publicSinglyList(T[]values){this();//創(chuàng)建空單鏈表
this.head.next=create(values,0);}privateNode<T>create(T[]values,inti)//遞歸算法{Node<T>p=null;if(i<values.length)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 棗陽(yáng)運(yùn)力課堂考試題目及答案
- 養(yǎng)老院老人康復(fù)理療服務(wù)質(zhì)量管理制度
- 養(yǎng)老院老人健康監(jiān)測(cè)人員激勵(lì)制度
- 養(yǎng)老院環(huán)境衛(wèi)生制度
- 高一數(shù)學(xué)套卷題目及答案
- 辦公室員工健康與安全管理制度
- 邊防協(xié)管員培訓(xùn)制度
- 試析民商事仲裁中的證據(jù)制度
- 行政單位廉潔自律制度
- 2025年新泰17年事業(yè)單位考試及答案
- 韭菜的自我修養(yǎng)(李笑來(lái))-2018
- 高一上學(xué)期期末考試英語(yǔ)試卷及答案兩套(附聽(tīng)力錄音稿)
- 勞務(wù)派遣標(biāo)書(shū)服務(wù)方案(全覆蓋版本)
- 視覺(jué)傳播概論 課件全 任悅 第1-12章 視覺(jué)傳播的研究- 視覺(jué)傳播中的倫理與法規(guī)
- 溝通技巧與情商提升
- 2024屆新疆維吾爾自治區(qū)烏魯木齊市高三上學(xué)期第一次質(zhì)量監(jiān)測(cè)生物試題【含答案解析】
- 公司基層黨建問(wèn)題清單
- 《廣西歷史建筑保護(hù)修繕及檢測(cè)技術(shù)標(biāo)準(zhǔn)》
- 福州港羅源灣港區(qū)碧里作業(yè)區(qū)4號(hào)泊位擴(kuò)能改造工程環(huán)境影響報(bào)告
- 八年級(jí)物理下冊(cè)《滑輪》練習(xí)題及答案-人教版
- 江蘇省建設(shè)工程施工項(xiàng)目部關(guān)鍵崗位人員變更申請(qǐng)表優(yōu)質(zhì)資料
評(píng)論
0/150
提交評(píng)論