版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第4章棧和隊(duì)列4.1棧4.2隊(duì)列4.3遞歸目的:使用?;蜿?duì)列求解應(yīng)用問題。要求:棧和隊(duì)列的順序和鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)實(shí)現(xiàn)。重點(diǎn):棧和隊(duì)列的設(shè)計(jì)和應(yīng)用。難點(diǎn):棧或隊(duì)列的使用場合,以及如何使用 棧和隊(duì)列求解應(yīng)用問題。4.1棧4.1.1棧抽象數(shù)據(jù)類型
棧(stack)是一種線性表,插入和刪除操作只允許在線性表的一端進(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ù)類型ADT,棧接口publicinterfaceStack<T>{publicabstractbooleanisEmpty();//判空
publicabstractvoidpush(Tx);//x入棧
publicabstractTpeek();//返回棧頂,未出棧
publicabstractTpop();//出棧,返回棧頂}習(xí)題4-3習(xí)4-3
能否使用一個(gè)線性表對象作為棧,或?qū)B暶鳛槔^承線性表?入棧調(diào)用insert(0,x)函數(shù),出棧調(diào)用remove(0)函數(shù)?為什么?【習(xí)題解答】都不能。4.1.2順序棧//順序棧類,最終類,實(shí)現(xiàn)棧接口,T表示元素類型publicfinalclassSeqStack<T>implementsStack<T>{privateSeqList<T>list;//順序表publicSeqStack(intcapacity)//構(gòu)造空棧publicSeqStack()//構(gòu)造空棧publicbooleanisEmpty()//判空publicvoidpush(Tx)//x入棧publicTpeek()//返回棧頂(未出棧)publicTpop()//出棧,返回棧頂元素}習(xí)題解答4-4使用順序表對象作為棧成員變量的操作效率分析4.1.3鏈?zhǔn)綏D4.3鏈?zhǔn)綏5娜霔:统鰲2僮鳌稊?shù)據(jù)結(jié)構(gòu)(Java版)(第4版)》第4章8鏈?zhǔn)綏n怢inkedStack<T>//鏈?zhǔn)綏n悾罱K類,實(shí)現(xiàn)棧接口,T表示元素類型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使用單鏈表對象作為棧成員變量的操作效率分析《數(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】括號匹配的語法檢查。圖4.5表達(dá)式中圓括號匹配的語法檢查《數(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á)式如下,寫出后綴表達(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ù)類型隊(duì)列(queue)是一種特殊的線性表,其插入和刪除操作分別在線性表的兩端進(jìn)行。先進(jìn)先出。《數(shù)據(jù)結(jié)構(gòu)(Java版)(第4版)》第4章184.2.1隊(duì)列抽象數(shù)據(jù)類型//隊(duì)列接口,描述隊(duì)列抽象數(shù)據(jù)類型,T表示元素類型publicinterfaceQueue<T>{
publicabstractbooleanisEmpty();//判空
publicabstractbooleanadd(Tx);//x入隊(duì)
publicabstractTpeek();//返回隊(duì)頭,沒有刪除publicabstractTpoll();//出隊(duì),返回隊(duì)頭}《數(shù)據(jù)結(jié)構(gòu)(Java版)(第4版)》第4章19習(xí)題4-8習(xí)4-8
能否使用一個(gè)線性表對象作為隊(duì)列,或?qū)㈥?duì)列聲明為繼承線性表,入棧調(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ì)列類//順序循環(huán)隊(duì)列類,最終類,實(shí)現(xiàn)隊(duì)列接口,T元素類型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ì)頭,沒有刪除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ì)列類LinkedQueue<T>//鏈?zhǔn)疥?duì)列類,最終類,實(shí)現(xiàn)隊(duì)列接口,T元素類型publicfinalclassLinkedQueue<T>implementsQueue<T>{privateNode<T>front,rear;//隊(duì)頭和隊(duì)尾結(jié)點(diǎn)
publicLinkedQueue()//構(gòu)造空隊(duì)列
publicbooleanisEmpty();//判空publicbooleanadd(Tx);//x入隊(duì)publicTpeek();//返回隊(duì)頭,沒有刪除publicTpoll();//出隊(duì),返回隊(duì)頭}《數(shù)據(jù)結(jié)構(gòu)(Java版)(第4版)》第4章274.2.4隊(duì)列的應(yīng)用【例4.3】求解素?cái)?shù)環(huán)問題。《數(shù)據(jù)結(jié)構(gòu)(Java版)(第4版)》第4章28【例4.3】求解素?cái)?shù)環(huá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)過的點(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棋盤,從(0,0)開始的一次游歷路徑5×5棋盤,一次不成功游歷路徑《數(shù)據(jù)結(jié)構(gòu)(Java版)(第4版)》第4章334.2.5優(yōu)先隊(duì)列優(yōu)先隊(duì)列(PriorityQueue),隊(duì)列中的每個(gè)元素都有一個(gè)優(yōu)先級,每次出隊(duì)的是具有最高優(yōu)先級的元素。優(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ì)列,分別使用各種線性表。{(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ì)列類PriorityQueue<TextendsComparable<T>>//優(yōu)先隊(duì)列類(升或降),最終類,實(shí)現(xiàn)隊(duì)列接口,T是元素類型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ì)頭,沒有刪除publicTpoll();//出隊(duì),返回隊(duì)頭}《數(shù)據(jù)結(jié)構(gòu)(Java版)(第4版)》第4章37【例4.4】進(jìn)程按優(yōu)先級調(diào)度管理//進(jìn)程類publicclassProcessimplementsComparable<Process>{privateStringname;//進(jìn)程名
privateintpriority; //優(yōu)先級
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)//拋出無效參數(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á)式語法圖《數(shù)據(jù)結(jié)構(gòu)(Java版)(第4版)》第4章45算術(shù)表達(dá)式類ArithmeticExpression//算術(shù)表達(dá)式(整數(shù)、不包括位運(yùn)算)publicclassArithmeticExpression{privateStringinfix;//中綴算術(shù)表達(dá)式
privateintindex;//當(dāng)前字符序號
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. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 生物標(biāo)志物在藥物臨床試驗(yàn)中的臨床前沿進(jìn)展
- 生物標(biāo)志物在臨床試驗(yàn)中的盲法設(shè)計(jì)考量
- 生物墨水中的免疫調(diào)節(jié)因子遞送策略
- 生物制品穩(wěn)定性試驗(yàn)環(huán)境監(jiān)測要求
- 生活質(zhì)量評價(jià)在慢性病藥物精準(zhǔn)醫(yī)療中的定位
- 培訓(xùn)課程效果考試題庫
- 深度解析(2026)《GBT 20013.4-2010核醫(yī)學(xué)儀器 例行試驗(yàn) 第4部分:放射性核素校準(zhǔn)儀》(2026年)深度解析
- 生殖毒性試驗(yàn)的風(fēng)險(xiǎn)分級與防控
- 瓣膜介入術(shù)后抗凝治療策略優(yōu)化
- 環(huán)境農(nóng)藥暴露與代謝綜合征的營養(yǎng)策略
- 老人贍養(yǎng)協(xié)議書
- 污水處理廠運(yùn)行及問題-污水廠的運(yùn)營與維護(hù)方案
- 教科版九年級物理上冊導(dǎo)學(xué)案:7.4.電磁繼電器
- QT400前軸承座上半鑄造工藝設(shè)計(jì)
- 全國中學(xué)語文青年教師教學(xué)展示活動(dòng)一等獎(jiǎng)《三顧茅廬》教學(xué)展示課件
- 工業(yè)區(qū)位因素與區(qū)位選擇課件(1)中圖版版
- 《人工智能基礎(chǔ)及應(yīng)用》 習(xí)題及參考答案 王方石 第1-9章
- 2024屆高考地理一輪復(fù)習(xí)+課件+工業(yè)區(qū)位因素
- 標(biāo)準(zhǔn)作業(yè)指導(dǎo)書模板(SOP)
- 科室質(zhì)控小組活動(dòng)內(nèi)容及要求
- 北京師范大學(xué)珠海校區(qū)
評論
0/150
提交評論