數(shù)據(jù)結(jié)構(gòu)第三章習(xí)題答案解析_第1頁(yè)
數(shù)據(jù)結(jié)構(gòu)第三章習(xí)題答案解析_第2頁(yè)
數(shù)據(jù)結(jié)構(gòu)第三章習(xí)題答案解析_第3頁(yè)
數(shù)據(jù)結(jié)構(gòu)第三章習(xí)題答案解析_第4頁(yè)
數(shù)據(jù)結(jié)構(gòu)第三章習(xí)題答案解析_第5頁(yè)
已閱讀5頁(yè),還剩17頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、2.設(shè)隊(duì)列中有A、B、C、D、E這5個(gè)元素,步操作:1)2)3)4)直到隊(duì)列成為空隊(duì)列為止,得到輸出序列:(1) A、C、E、C、C(3) A、 C、 E、 C、 C、第三章習(xí)題1. 按圖3.1 (b)所示鐵道(兩側(cè)鐵道均為單向行駛道)進(jìn)行車廂調(diào)度,回答:(1)如進(jìn)站的車廂序列為123,則可能得到的出站車廂序列是什么?如進(jìn)站的車廂序列為123456,能否得到435612和135426的出站序列,并說(shuō)明原因。(即寫(xiě)出以表示進(jìn)棧、以“ X”表示出棧的棧操作序列)。其中隊(duì)首元素為A。如果對(duì)這個(gè)隊(duì)列重復(fù)執(zhí)行下列4輸出隊(duì)首元素;把隊(duì)首元素值插入到隊(duì)尾;刪除隊(duì)首元素;再次刪除隊(duì)首元素。(2) A、C、EC

2、 (4) A、C、 E、 C3. 給出棧的兩種存儲(chǔ)結(jié)構(gòu)形式名稱,在這兩種棧的存儲(chǔ)結(jié)構(gòu)中如何判別棧空與棧滿?4. 按照四則運(yùn)算加、減、乘、除和幕運(yùn)算(T)優(yōu)先關(guān)系的慣例,畫(huà)出對(duì)下列算術(shù)表達(dá)式求值時(shí)操作數(shù)棧和運(yùn)算符棧的變化過(guò)程:A - B *C/D+EfF5. 試寫(xiě)一個(gè)算法,判斷依次讀入的一個(gè)以為結(jié)束符的字母序列,是否為形如“序列1 &序列2,模式的字符序歹ij。其中序列1和序列2中都不含字符&且,序列2是序列1的逆序列。例如,P+b&b+a *是屬該模式的字符序列,而工+ 3 & 3 T則不是。6. 假設(shè)表達(dá)式由單字母變量和雙目四則運(yùn)算算符構(gòu)成。試寫(xiě)一個(gè)算法,將一個(gè)通常書(shū)寫(xiě)形式且書(shū)寫(xiě)正確的表達(dá)式

3、轉(zhuǎn)換 為逆波蘭式。7. 假設(shè)以帶頭結(jié)點(diǎn)的循環(huán)鏈表表示隊(duì)列,并且只設(shè)一個(gè)指針指向隊(duì)尾元素結(jié)點(diǎn)(注意不設(shè)頭指針),試編寫(xiě)相應(yīng)的隊(duì)列 初始化、入隊(duì)列和出隊(duì)列的算法。8. 要求循環(huán)隊(duì)列不損失一個(gè)空間全部都能得到利用,設(shè)置一個(gè)標(biāo)志域tag ,以tag為0或1來(lái)區(qū)分頭尾指針相同時(shí)的隊(duì)列狀態(tài)的空與滿,請(qǐng)編寫(xiě)與此結(jié)構(gòu)相應(yīng)的入隊(duì)與出隊(duì)算法。9. 簡(jiǎn)述以下算法的功能(其中棧和隊(duì)列的元素類型均為int):(1 ) void proc_1 (Stack S)int i, n, A255;n=0;while(!EmptyStack(S)n+; Pop(&S, &An);for(i=1; iv=n; i+)Push(&S

4、, Ai);2 ) void proc_2(Stack S, int e) Stack T; int d;lnitStack(&T); while(!EmptyStack(S) Pop(&S, &d);if (d!=e) Push( &T,d);while(!EmptyStack(T) Pop(&T, &d);Push( &S, d);)3 ) void proc_3(Queue *Q) Stack S; int d;lnitStack(&S);while(!EmptyQueue(*Q)DeleteQueue(Q, &d);Push( &S,d);while(!EmptyStack(S) Po

5、p(&S, &d);EnterQueue(Q , d)實(shí)習(xí)題1回文判斷。稱正讀與反讀都相同的字符序列為“回文”序列。試寫(xiě)一個(gè)算法,判斷依次讀入的一個(gè)以為結(jié)束符的字母序列,是否為形如序列1 &序列21模式的字符序列。其中序列1和序列2中都不含字符&且序列2是序列1的逆序列。例如,Q+b&b+a *是屬該模式的字符序列,而1+ 3 & 3d則不是。2停車場(chǎng)管理。設(shè)停車場(chǎng)是一個(gè)可停放n輛車的狹長(zhǎng)通道,且只有一個(gè)大門(mén)可供汽車進(jìn)出。在停車場(chǎng)內(nèi),汽車按到達(dá)的先后 次序,由北向南依次排列(假設(shè)大門(mén)在最南端)。若車場(chǎng)內(nèi)已停滿n輛車,則后來(lái)的汽車需在門(mén)外的便道上等候, 當(dāng)有車開(kāi)走時(shí),便道上的第一輛車即可開(kāi)入。當(dāng)

6、停車場(chǎng)內(nèi)某輛車要離開(kāi)時(shí),在它之后進(jìn)入的車輛必須先退出車場(chǎng)為 它讓路,待該輛車開(kāi)出大門(mén)后,其它車輛再按原次序返回車場(chǎng)。每輛車離開(kāi)停車場(chǎng)時(shí),應(yīng)按其停留時(shí)間的長(zhǎng)短交費(fèi) (在便道上停留的時(shí)間不收費(fèi))。試編寫(xiě)程序,模擬上述管理過(guò)程。要求以順序棧模擬停車場(chǎng),以鏈隊(duì)列模擬便道。從終端讀入汽車到達(dá)或離去的數(shù)據(jù),每組數(shù)據(jù)包括三項(xiàng):是“到達(dá)”還是“離去”;汽車牌照號(hào)碼;“到達(dá)”或“離去” 的時(shí)刻。與每組輸入信息相應(yīng)的輸出信息為:如果是到達(dá)的車輛,則輸出其在停車場(chǎng)中或便道上的位置;如果是離去 的車輛,則輸出其在停車場(chǎng)中停留的時(shí)間和應(yīng)交的費(fèi)用。(提示:需另設(shè)一個(gè)棧,臨時(shí)停放為讓路而從車場(chǎng)退出的 車。)3商品貨架管理。

7、商品貨架可以看成一個(gè)棧,棧頂商品的生產(chǎn)日期最早,棧底商品的生產(chǎn)日期最近。上貨時(shí),需要倒貨架,以保證生產(chǎn)日期 較近的商品在較下的位置。用隊(duì)列和棧作為周轉(zhuǎn),實(shí)現(xiàn)上述管理過(guò)程。第三章答案3.1按3.1 (b)所示鐵道(兩側(cè)鐵道均為單向行駛道)進(jìn)行車廂調(diào)度,回答:(1)如進(jìn)站的車廂序列為123,則可能得到的出站車廂序列是什么?(2)如進(jìn)站的車廂序列為123456 ,能否得到435612和135426的出站序列,并說(shuō)明原因(即寫(xiě)出以“ S”表示進(jìn)棧、“ X”表示出棧的棧序列操作)。解答】1 )可能得到的出站車廂序列是:123、132、213、231、321(2)不能得到435612的出站序列。因?yàn)橛蠸(

8、1)S(2)S(3)S(4)X(4)X(3)S(5)X(5)S(6)S(6),此時(shí)按照“后進(jìn)先出”的原則,序必須出棧的順 為 X(2)X(1)。能得到135426的出站序列。因?yàn)橛?S(1)X(1)S(2)S(3)XSS(5)X(5)X(4)X(2)X(1)。3.3給出棧的兩種存儲(chǔ)結(jié)構(gòu)形式名稱,在這兩種棧的存儲(chǔ)結(jié)構(gòu)中如何判別??张c棧滿?【解答】(1 )順序棧(top用來(lái)存放棧頂元素的下標(biāo))判斷棧S空:如果S-top=-1表示棧空。判斷棧S滿:如果S-top=Stack_Size-1表示棧滿。鏈棧(top為棧頂指針,指向當(dāng)前棧頂元素前面的頭結(jié)點(diǎn))判斷??眨喝绻鹴op-next=NULL表示???。

9、判斷棧滿:當(dāng)系統(tǒng)沒(méi)有可用空間時(shí),申請(qǐng)不到空間存放要進(jìn)棧的元素,此時(shí)棧滿3. 4照四則運(yùn)算加、減、乘、除和幕運(yùn)算的優(yōu)先慣例,畫(huà)出對(duì)下列表達(dá)式求值時(shí)操作數(shù)棧和運(yùn)算符 棧的變化過(guò)程:AB9/D+ETF【解答】OVS OPTPOPTPrAOPTR1*1生成09運(yùn)篡結(jié)果T(1)OVS OPTRD+,AOPTRT生感TOTP1T(1)A/運(yùn)筐結(jié)果T(2)1&CPTRVS OPTRf=0PTR:生成A-T(2)FA運(yùn)算結(jié)果T(3)T(3)OPTRu 進(jìn)校OVS 右邊界護(hù)9PTR; f主成曰F運(yùn)登緒巣T(4)1 丁OPTR右迫畀樸OFTR+鋰T訂OVS OPTR3. 5寫(xiě)一個(gè)算法,判斷依次讀入的一個(gè)以為結(jié)束符

10、的字母序列,是否形如序列1&序列2 的字符序列。序列1和序列2中都不含& *,且序列2是序列1的逆序列。例如,a+b&b+a 是屬于該模式的字符序列,而1+3&3則不是?!窘獯稹克惴ㄈ缦?int IsHuiWe n()Stack *S;Char ch,temp;return(FALSE); printf(unNO,J );lnitStack(&S);Printf ( “n請(qǐng)輸入字符序列:”);Ch=getchar();/*序列1入棧7While( ch!=&) Push(&S,ch); ch=getchar();do/*判斷序列2是否是序列1的逆序列7 ch=getchar();if(ch!=

11、 temp)/*序列2不是序列1的逆序列7return(FALSE); printf( nNO ); while(ch!= & !lsEmpty(&S)if(ch = = & lsEmpty(&S)/*序列2是序列1的逆序列*/return(TRUE); printf( “nYES” );else/*lsHuiWen()*/3.8要求循環(huán)隊(duì)列不損失一個(gè)空間全部都能得到利用,設(shè)置一個(gè)標(biāo)志指針相同 tag,以tag為0或1來(lái)區(qū)分頭尾 時(shí)的隊(duì)列狀態(tài)的空與滿,請(qǐng)編寫(xiě)與此相應(yīng)的入隊(duì)與出隊(duì)算法。x)int EnterQueue(SeqQueue *Q, QueueElementType/*將元素x入隊(duì)*/

12、if(Q-front=Q-front& tag=1)/*隊(duì)滿*/return(FALSE);if(Q-front=Q-front& tag=O)/*x入隊(duì)前隊(duì)空,x入隊(duì)后重新設(shè)置標(biāo)志7tag=1;Q elememtQ rear=x;廣設(shè)置隊(duì)尾指針7Q-rear=(Q-rear+1 )%MAXSIZE;Return(TRUE);出隊(duì)算法:int DeleteQueue( SeqQueue *Q , QueueElementType *x)/*刪除隊(duì)頭元素,用x返回其值*/if(Q-front=Q-rear & tag=O)/* 隊(duì)空 */return(FALSE);*x=Q-elementQ-f

13、ront;Q-front=(Q-front+1 )%MAXSIZE; /* 重新設(shè)置隊(duì)頭指針 7if(Q-front=Q-rear) tag=O; /*隊(duì)頭元素出隊(duì)后隊(duì)列為空,重新設(shè)置標(biāo)志域7 Return(TUUE);編寫(xiě)求解Hanoi問(wèn)題的算法,并給出三個(gè)盤(pán)子搬動(dòng)時(shí)的遞歸調(diào)用過(guò)程?!窘獯稹克惴ǎ簐oid hanoi (int n ,char x, char y, char z)1到n的n個(gè)圓盤(pán)按規(guī)則搬到塔座Z上,廠將塔座X上按直徑由小到大且至上而下編號(hào)為 丫可用做輔助塔座*/if(n = =1) move(x,1 ,z); else Hanoi(n-1 ,x5z,y); move(x, n

14、, z); Hanoi(, y,x,z);Hanoi(3ABC)的遞歸調(diào)用過(guò)程:Hanoi(2,A,C,B):Hanoi(1 ,A,B,C)move(A-C) 1 號(hào)搬到 CMove(A-B)2號(hào)搬到BHanoi(1 ,C ,A,B)move(C-B)1 號(hào)搬到 B3 ) A、C、E、C C、C4) A、C . E、CHanoi(2,B ,A,C)Hanoi(1,B,C,A)move(B-A)1 號(hào)搬到 AMove(B-C)2號(hào)搬到CHanoi(1 ,A,B,C)move(A-C) 1 號(hào)搬到 C提不:第3章限定性線性表?xiàng):完?duì)列習(xí)題1.按圖3.1(b)所示鐵道(兩側(cè)鐵道均為單向行駛道)進(jìn)行車廂

15、調(diào)度,回答:(1)如進(jìn)站的車廂序列為123 ,則可能得到的出站車廂序列是什么?123、213、132、231、321 (312)如進(jìn)站的車廂序列為123456 ,能否得到435612和135426的出站序列,并說(shuō)明原因。(即寫(xiě)出以“S”表示進(jìn)棧、以“ X ”表示出棧的棧操作序列)。2.,其中隊(duì)首元素為Ao如果對(duì)這個(gè)隊(duì)列重復(fù)執(zhí)行下列4步操作:SXSS XSSX XXSX 或 S1X1S2S3X3S4S5X5X4X2S6X61)A、C、E、C、C2) A、C、E設(shè)隊(duì)列中有 A、B、C、 D、E這5個(gè)元素1)輸出隊(duì)首元素;2)把隊(duì)首元素值插入到隊(duì)尾;3)刪除隊(duì)首元素;4)再次刪除隊(duì)首元素。直到隊(duì)列成

16、為空隊(duì)列為止,則是否可能得到輸出序列:A、B、C、D、E (輸出隊(duì)首元素A)A、B、C、D、E、A (把隊(duì)首元素A插入到隊(duì)尾)B、C、D、E、A (刪除隊(duì)首元素A )c、D、E、(再次刪除隊(duì)首元素B)C、D、E、(輸出隊(duì)首元素C)c、D、E、A、C (把隊(duì)首元素C插入到隊(duì)尾)D、E、A、(刪除隊(duì)首元素C)E、A、(再次刪除隊(duì)首元素D )3. 給出棧的兩種存儲(chǔ)結(jié)構(gòu)形式洛稱,在這兩種棧的存儲(chǔ)結(jié)構(gòu)中如何判別棧空與棧滿?4. 按照四則運(yùn)算加、減、乘、除和幕運(yùn)算(f)優(yōu)先關(guān)系的慣例,畫(huà)出對(duì)下列算術(shù)表達(dá)式求值時(shí)操作數(shù)棧和運(yùn)算符棧的變化過(guò)程:A B *C/D+EfF5. 試寫(xiě)一個(gè)算法,判斷依次讀入的一個(gè)以為

17、結(jié)束符的字母序列,是否為形如序列1 &序列2模式的字符序列。其中序列1和序列2中都不含字符&,且序列2是序列1的逆序列。例如,a+b&b+a是屬該模式的字符序列,而T+ 3 & 3 1則不是。提示:(1 )邊讀邊入棧,直到&(2 )邊讀邊出棧邊比較,直到通常書(shū)寫(xiě)形式(中綴)且書(shū)寫(xiě)正確6. 假設(shè)表達(dá)式由單字母變量和雙目四則運(yùn)算算符構(gòu)成。試寫(xiě)一個(gè)算法,將一個(gè)的表達(dá)式轉(zhuǎn)換為逆波蘭式(后綴)。提示:例:中綴表達(dá)式:a+b后綴表達(dá)式:ab +中綴表達(dá)式:a + b x c后綴表達(dá)式:abc x +中綴表達(dá)式:a + bxc-d后綴表達(dá)式:abc x+d-中綴表達(dá)式:a + b x c-d/ e后綴 表達(dá)

18、式:abc x+ de/中綴表達(dá)式:a + b x (c-d)-e/f后綴表達(dá)式:abedx+ef/后綴表達(dá)式的計(jì)算過(guò)程:(簡(jiǎn)便)順序掃描表達(dá)式,(1 )如果是操作數(shù),直接入棧;(2)如果是操作符op,則連續(xù)退棧兩次,得操作數(shù)X, 丫,計(jì)算Xop Y,并將結(jié)果入棧。如何將中綴表達(dá)式轉(zhuǎn)換為后綴表達(dá)式?順序掃描中綴表達(dá)式,(1) 如果是操作數(shù),直接輸出;(2) 如果是操作符op2,則與棧頂 操作符opi比較:女口果O p 2 Op 1,貝U 0卩2入棧;如果0P 2 = Op 1,則脫括號(hào);如果Op 2 Op 1,則輸出OPl;7. 假設(shè)以帶頭結(jié)點(diǎn)的循環(huán)鏈表表示隊(duì)列,并且只設(shè)一個(gè)指針指向隊(duì)尾元素結(jié)

19、點(diǎn)(注意不設(shè)頭指針),試編寫(xiě)相應(yīng)的隊(duì)列初始化、入隊(duì)列和出隊(duì)列的算法。提示:參P.56P.70先畫(huà)圖.typedef LinkListCLQueue ;int Ini tQueue( CLQueue * Q)int En terQueue( CLQueue Q, QueueEleme ntType x)int DeleteQueue( CLQueue Q, QueueEleme ntType *x)8. 要求循環(huán)隊(duì)列不損失一個(gè)空間全部都能得到利用,設(shè)置一個(gè)標(biāo)志域tag ,以tag為0或1來(lái)區(qū)分頭尾指針相同時(shí)的隊(duì)列狀態(tài)的空與滿,請(qǐng)編寫(xiě)與此結(jié)構(gòu)相應(yīng)的入隊(duì)與出隊(duì)算法。提示:初始狀態(tài):front=0,

20、rear=O, tag=O隊(duì)空條件:front=rear,tag=0隊(duì)滿條件:front=rear,tag=1其它狀態(tài):front !=rear,tag=0 (或 1、2 )入隊(duì)操作: (入隊(duì))if (front=rear) tag= 1 ;(或直接 tag= 1)出隊(duì)操作:(出隊(duì))tag= 0 ;問(wèn)題:如何明確區(qū)分隊(duì)空、隊(duì)滿、非空非滿 三種情況?9. 簡(jiǎn)述以下算法的功能(其中棧和隊(duì)列的元素類型均為int)(1 ) void proc_1 (Stack S)int i, n, A255;n=0;while(!EmptyStack(S)n+; Pop(&S, &An);for(i=1; iv=n

21、; i+)Push(&S, Ai);將棧S逆序。 Stack T; int d;InitStack(ST);while(!EmptyStack(S) Pop(&S, &d);if (d!=e) Push( &T, d);while(!EmptyStack (T) Pop(&T, &d); Push( &S, d);)刪除棧S中所有等于e的元素。3) void proc_3(Queue *Q) Stack S; int d; lnitStack(&S);while(!EmptyQueue(*Q)1 DeleteQueue(Q, &d); Push( &S, d);1 while(!EmptyStack(S) P

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 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ì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論