電大數據結構本形成性考核冊作業(yè)1-4原題帶答案.doc
數據結構(本)課程作業(yè)作業(yè)1(本部分作業(yè)覆蓋教材第1-2章的內容)14一、單項選擇題1在數據結構中,從邏輯上可以把數據結構分為(C )。A動態(tài)結構和靜態(tài)結構 B緊湊結構和非緊湊結構 C線性結構和非線性結構 D內部結構和外部機構2下列說法中,不正確的是( D )。A數據元素是數據的基本單位 B數據項是數據中不可分割的最小可標識單位 C數據可有若干個數據元素構成 D數據項可由若干個數據元素構成3一個存儲結點存儲一個( B )。A數據項 B數據元素 C數據結構 D數據類型4數據結構中,與所使用的計算機無關的是數據的( C )。A存儲結構 B物理結構C邏輯結構 D物理和存儲結構5下列的敘述中,不屬于算法特性的是( D )。A有窮性 B輸入性 C可行性 D可讀性6算法分析的目的是( C )。 A找出數據結構的合理性 B研究算法中的輸入和輸出的關系 C分析算法的效率以求改進 D分析算法的易懂性和文檔性7數據結構是一門研究計算機中(B )對象及其關系的科學。A數值運算 B非數值運算C集合 D非集合 8算法的時間復雜度與( C )有關。 A所使用的計算機 B與計算機的操作系統(tǒng) C與算法本身 D與數據結構9設有一個長度為n的順序表,要在第i個元素之前(也就是插入元素作為新表的第i個元素),則移動元素個數為( A )。 An-i+1 Bn-i Cn-i-1 Di10設有一個長度為n的順序表,要刪除第i個元素移動元素的個數為( B )。 An-i+1 Bn-i Cn-i-1 Di11在一個單鏈表中,p、q分別指向表中兩個相鄰的結點,且q所指結點是p所指結點的直接后繼,現(xiàn)要刪除q所指結點,可用語句( C )。 Ap=q-next Bp-next=q Cp-next=qnext Dq-next=NULL12在一個單鏈表中p所指結點之后插入一個s所指的結點時,可執(zhí)行( D )。 Ap-next= s; snext= pnext Bp-next=snext; Cp=s-next Ds-next=p-next; p-next=s;13非空的單向循環(huán)鏈表的尾結點滿足(C )(設頭指針為head,指針p指向尾結點)。 A.P-next= =NULL BP= =NULL CP-next= =head DP= = head 14鏈表不具有的特點是( A )。 A可隨機訪問任一元素 B插入刪除不需要移動元素 C不必事先估計存儲空間 D所需空間與線性表長度成正比15帶頭結點的鏈表為空的判斷條件是(B )(設頭指針為head)。Ahead = =NULLBhead-next= =NULL Chead-next= =headDhead!=NULL16在一個單鏈表中,p、q分別指向表中兩個相鄰的結點,且q所指結點是p所指結點的直接后繼,現(xiàn)要刪除q所指結點,可用語句(C )。Ap=q-nextBp-next=qCp-next=q-nextDq-next=NULL17在一個鏈隊中,假設f和r分別為隊頭和隊尾指針,則刪除一個結點的運算為(C )。 Ar=f-next; Br=r-next; Cf=f-next; Df=r-next;18在一個鏈隊中,假設f和r分別為隊頭和隊尾指針,則插入s所指結點的運算為( B )。 Af-next=s; f=s; Br-next=s;r=s; Cs-next=r;r=s; Ds-next=f;f=s;19.一個順序表第一個元素的存儲地址是90,每個元素的長度為2,則第6個元素的地址是(B )。A98 B100 C102 D10620有關線性表的正確說法是( D )。A每個元素都有一個直接前驅和一個直接后繼 B線性表至少要求一個元素C表中的元素必須按由小到大或由大到下排序 D除了一個和最后一個元素外,其余元素都有一個且僅有一個直接前驅和一個直接后繼二、填空題1在一個長度為n的順序存儲結構的線性表中,向第i(1in+1)個元素之前插入新元素時,需向后移動 n-i+1 個數據元素。2從長度為n的采用順序存儲結構的線性表中刪除第i(1in+1)個元素 ,需向前移動 n-i 個元素。3數據結構按結點間的關系,可分為4種邏輯結構: 集合 、 線性結構 、 樹形結構 、 圖狀結構 。4數據的邏輯結構在計算機中的表示稱為 物理結構 或 存儲結構 。5除了第1個和最后一個結點外,其余結點有且只有一個前驅結點和后繼結點的數據結構為 線性結構 ,每個結點可有任意多個前驅和后繼結點數的結構為 非線性結構 。6算法的5個重要特性是 有窮性 、 確定性 、 可形性 、 有零個或多個輸入 、 有零個或多個輸出 。7數據結構中的數據元素存在多對多的關系稱為_圖狀結構_結構。8數據結構中的數據元素存在一對多的關系稱為_樹形結構_結構。9數據結構中的數據元素存在一對一的關系稱為_線性結構_結構。10要求在n個數據元素中找其中值最大的元素,設基本操作為元素間的比較。則比較的次數和算法的時間復雜度分別為_ n-1_和 _ O(n)_ 。11在一個單鏈表中p所指結點之后插入一個s所指結點時,應執(zhí)行_ s-next=p-next _和p-next=s;的操作。12設有一個頭指針為head的單向循環(huán)鏈表,p指向鏈表中的結點,若p-next= =_ head _,則p所指結點為尾結點。13在一個單向鏈表中,要刪除p所指結點,已知q指向p所指結點的前驅結點。則可以用操作_ q-next=p-next _。14設有一個頭指針為head的單向鏈表,p指向表中某一個結點,且有p-next= =NULL,通過操作_ p-next=head _,就可使該單向鏈表構造成單向循環(huán)鏈表。15每個結點只包含一個指針域的線性表叫 單鏈表 。16線性表具有 順序存儲 和 鏈式存儲 兩種存儲結構。17數據的邏輯結構是從邏輯關系上描述數據,它與數據的關系 存儲結構 無關,是獨立于計算機的。18在雙向循環(huán)鏈表的每個結點中包含 兩個 指針域,其中next指向它的 直接后繼 ,prior指向它的 直接前驅 ,而頭結點的prior指向 尾結點 ,尾結點的next指向 頭結點 。19單向循環(huán)鏈表是單向鏈表的一種擴充,當單向鏈表帶有頭結點時,把單向鏈表中尾結點的指針域由空指針改為 頭結點的指針 ;當單向鏈表不帶頭結點時,則把單向鏈表中尾結點的指針域由空指針改為指向 指向第一個結點的指針 。20線性鏈表的邏輯關系時通過每個結點指針域中的指針來表示的。其邏輯順序和物理存儲順序不再一致,而是一種 鏈式 存儲結構,又稱為 鏈表 。 三、問答題1簡述數據的邏輯結構和存儲結構的區(qū)別與聯(lián)系,它們如何影響算法的設計與實現(xiàn)?答:若用結點表示某個數據元素,則結點與結點之間的邏輯關系就稱為數據的邏輯結構。數據在計算機中的存儲表示稱為數據的存儲結構。可見,數據的邏輯結構是反映數據之間的固有關系,而數據的存儲結構是數據在計算機中的存儲表示。盡管因采用的存儲結構不同,邏輯上相鄰的結點,其物理地址未必相同,但可通過結點的內部信息,找到其相鄰的結點,從而保留了邏輯結構的特點。采用的存儲結構不同,對數據的操作在靈活性,算法復雜度等方面差別較大。2解釋順序存儲結構和鏈式存儲結構的特點,并比較順序存儲結構和鏈式存儲結構的優(yōu)缺點。答:順序結構存儲時,相鄰數據元素的存放地址也相鄰,即邏輯結構和存儲結構是統(tǒng)一的,要求內存中存儲單元的地址必須是連續(xù)的。優(yōu)點:一般情況下,存儲密度大,存儲空間利用率高。缺點:(1)在做插入和刪除操作時,需移動大量元素;(2)由于難以估計,必須預先分配較大的空間,往往使存儲空間不能得到充分利用;(3)表的容量難以擴充。鏈式結構存儲時,相鄰數據元素可隨意存放,所占空間分為兩部分,一部分存放結點值,另一部分存放表示結點間關系的指針。優(yōu)點:插入和刪除元素時很方便,使用靈活。缺點:存儲密度小,存儲空間利用率低。3什么情況下用順序表比鏈表好?答:順序表適于做查找這樣的靜態(tài)操作,鏈表適于做插入和刪除這樣的動態(tài)操作。如果線性表的變化長度變化不大,且其主要操作是查找,則采用順序表;如果線性表的長度變化較大,且其主要操作是插入、刪除操作,則采用鏈表。4頭指針、頭結點、第一個結點(或稱首元結點)的區(qū)別是什么?頭結點是在鏈表的開始結點之前附加的一個結點;第一個結點(或稱首元結點)是鏈表中存儲第一個數據元素的結點;頭指針是指向鏈表中第一個結點(或為頭結點或為首元結點)的指針。5解釋帶頭結點的單鏈表和不帶頭結點的單鏈表的區(qū)別。答:帶頭結點的單鏈表和不帶頭結點的單鏈表的區(qū)別主要體現(xiàn)在其結構上和算法操作上。在結構上,帶頭結點的單鏈表,不管鏈表是否為空,均含有一個頭結點,不帶頭結點的單鏈表不含頭結點。在操作上,帶頭結點的單鏈表的初始化為申請一個頭結點。無論插入或刪除的位置是地第一個結點還是其他結點,算法步驟都相同。不帶頭結點的單鏈表,其算法步驟要分別考慮插入或刪除的位置是第一個結點還是其他結點。因為兩種情況的算法步驟不同。四、程序填空題1下列是用尾插法建立帶頭結點的且有n個結點的單向鏈表的算法,請在空格內填上適當的語句。NODE *create1(n)/* 對線性表(1,2,.,n),建立帶頭結點的單向鏈表 */ NODE *head,*p,*q; int i; p=(NODE *)malloc(sizeof(NODE); head=p; q=p; p-next=NULL; for(i=1;idata=i ; (2)p-next=NULL ; (3)q-next=p ; (4) q=p ; return(head);2下列是用頭插法建立帶頭結點的且有n個結點的單向鏈表的算法,請在空格內填上適當的語句。NODE *create2(n)/*對線性表(n,n-1,.,1),建立帶頭結點的線性鏈表 */ NODE *head,*p,*q; int i; p=(NODE *)malloc(sizeof(NODE); (1) head=p ; p-next=NULL; (2) q=p ; for(i=1;idata=i; if(i=1) (3) p-next=NULL ; else(4) p-next=q-next ;(5) q-next=p ; return(head);3下列是在具有頭結點單向列表中刪除第i個結點,請在空格內填上適當的語句。int delete(NODE *head,int i)NODE *p,*q; int j; q=head;j=0; while(q!=NULL)&(jnext;j+; if(q=NULL) return(0);(1) p=q-next ; (2) q-next=p-next ; free(p); return(1);五、完成:實驗1線性表根據實驗要求(見教材P201-202)認真完成本實驗,并提交實驗報告。數據結構(本)課程作業(yè)2(本部分作業(yè)覆蓋教材第3-5章的內容)一、單項選擇題1若讓元素1,2,3依次進棧,則出棧順序不可能為( C )。A3,2,1 B2,1,3 C3,1,2 D1,3,22一個隊列的入隊序列是1,2,3,4。則隊列的輸出序列是( B )。A4,3,2,1 B1,2,3,4 C1,4,3,2 D3,2,4,13向順序棧中壓入新元素時,應當( A )。A先移動棧頂指針,再存入元素 B先存入元素,再移動棧頂指針 C先后次序無關緊要 D同時進行4在一個棧頂指針為top的鏈棧中,將一個p指針所指的結點入棧,應執(zhí)行( C )。Atop-next=p; Bp-next=top-next; top-next=p;Cp-next=top; top=p; Dp-next=top-next; top=top-next;5在一個棧頂指針為top的鏈棧中刪除一個結點時,用 x保存被刪結點的值,則執(zhí)行( B )。Ax=top;top=top-next; Bx=top-data;Ctop=top-next; x=top-data; Dx=top-data; top=top-next;6一般情況下,將遞歸算法轉換成等價的非遞歸算法應該設置( A )。A棧 B隊列C堆?;蜿犃?D數組7表達式a*(b+c)-d的后綴表達式是( B )。 Aabcd*+- Babc+*d- Cabc*+d- D-+*abcd8判斷一個順序隊列sq(最多元素為m0)為空的條件是( C )。 Asq-rear-sq-front= m0 Bsq-rear-sq-front-1= = m0 Csq-front=sq-rear Dsq-front=sq-rear+19判斷一個循環(huán)隊列Q(最多元素為m0)為空的條件是( A )。 AQ-front=Q-rear BQ-front!=Q-rear CQ-front=(Q-rear+1)% m0 DQ-front!= (Q-rear+1)%m0 10判斷棧S滿(元素個數最多n個)的條件是(C )。 As-top=0 Bs-top!=0 Cs-top=n-1 Ds-top!=n-1 11一個隊列的入隊順序是a,b,c,d,則離隊的順序是( B )。 Aa,d,cb Ba,b,c,d Cd,c,b,a Dc,b,d,a12如果以鏈表作為棧的存儲結構,則退棧操作時( C )。 A必須判斷棧是否滿 B判斷棧元素類型 C必須判斷棧是否空 D對棧不作任何判斷13在解決計算機主機與打印機之間速度不匹配問題時通常設置一個打印數據緩沖區(qū),主機將要輸出的數據依次寫入緩沖區(qū)中,而打印機則從緩沖區(qū)中取出數據打印,該緩沖區(qū)應該是一個( B )結構。A堆棧 B隊列 C數組 D先性表14一個遞歸算法必須包括( B )。A遞歸部分B終止條件和遞歸部分 C迭代部分 D終止條件和迭代部分15從一個棧頂指針為top的鏈棧中刪除一個結點時,用變量x保存被刪結點的值,則執(zhí)行( A )。 Ax=top-data; top=top-next; Bx=top-data; Ctop=top-next; x=top-data; Dtop=top-next; x=data;16在一個鏈隊中,假設f和r分別為隊頭和隊尾指針,則刪除一個結點的運算為(C )。 Ar=f-next; Br=r-next; Cf=f-next; Df=r-next;17在一個鏈隊中,假設f和r分別為隊頭和隊尾指針,則插入s所指結點的運算為(B )。 Af-next=s; f=s; Br-next=s;r=s; Cs-next=r;r=s; Ds-next=f;f=s;18.以下陳述中正確的是( A )。A串是一種特殊的線性表 B串的長度必須大于零C串中元素只能是字母 D空串就是空白串19設有兩個串p和q,其中q是p的子串,q在p中首次出現(xiàn)的位置的算法稱為( C )。A求子串 B連接 C匹配 D求串長 20串是( D )。 A不少于一個字母的序列 B任意個字母的序列 C不少于一個字符的序列 D有限個字符的序列 21串的長度是指( B )。A串中所含不同字母的個數 B串中所含字符的個數C串中所含不同字符的個數 D串中所含非空格字符的個數22. 若串S=“English”,其子串的個數是( D )。 A9 B16 C 36 D2823串與普通的線性表相比較,它的特殊性體現(xiàn)在( C )。A順序的存儲結構 B鏈接的存儲結構 C數據元素是一個字符 D數據元素可以任意24空串與空格串( B )。A相同 B不相同 C可能相同 D無法確定25兩個字符串相等的條件是( D)。 A兩串的長度相等 B兩串包含的字符相同 C兩串的長度相等,并且兩串包含的字符相同 D兩串的長度相等,并且對應位置上的字符相同26在實際應用中,要輸入多個字符串,且長度無法預定。則應該采用(A )存儲比較合適( )。A鏈式 B 順序 C堆結構 D無法確定 27.一維數組A采用順序存儲結構,每個元素占用6個字節(jié),第6個元素的存儲地址為100,則該數組的首地址是( C )。A64 B28C70 D9028稀疏矩陣采用壓縮存儲的目的主要是(D )。A表達變得簡單 B對矩陣元素的存取變得簡單 C去掉矩陣中的多余元素 D減少不必要的存儲空間的開銷29一個非空廣義表的表頭( C )。 A不可能是原子 B只能是子表 C只能是原子 D可以是子表或原子 30常對數組進行的兩種基本操作是( C )。A建立與刪除 B索引與、和修改C查找和修改 D查找與索引31. 設二維數組A56按行優(yōu)先順序存儲在內存中,已知A00 起始地址為1000,每個數組元素占用5個存儲單元,則元素A44的地址為( A )。 A1140 B1145 C 1120 D112532設有一個20階的對稱矩陣A,采用壓縮存儲的方式,將其下三角部分以行序為主序存儲到一維數組B中(數組下標從1開始),則矩陣中元素a9,2在一維數組B中的下標是( D )。A41 B32 C18 D38二、填空題1棧是限定在表的一端進行插入和刪除操作的線性表,又稱為 后進先出 。2循環(huán)隊列隊頭指針在隊尾指針 下一個 位置,隊列是“滿”狀態(tài)3在隊列的順序存儲結構中,當插入一個新的隊列元素時,尾指針 增1 ,當刪除一個元素隊列時,頭指針 增1 。4循環(huán)隊列的引入,目的是為了克服 假上溢 。5向順序棧插入新元素分為三步:第一步進行 棧是否滿 判斷,判斷條件是 s-top=MAXSIZE-1 ;第二步是修改 棧頂指針 ;第三步是把新元素賦給 棧頂對應的數組元素 。同樣從順序棧刪除元素分為三步:第一步進行 棧是否空 判斷,判斷條件是 s-top=-1 。第二步是把 棧頂元素 ;第三步 修改棧頂指針 。6假設以S和X分別表示入棧和出棧操作,則對輸入序列a,b,c,d,e一系列棧操作SSXSXSSXXX之后,得到的輸出序列為 bceda 。7一個遞歸算法必須包括 終止條件 和 遞歸部分 。8判斷一個循環(huán)隊列LU(最多元素為m0)為空的條件是 LU-front=LU-rear 。9在將中綴表達式轉換成后綴表達式和計算后綴表達式的算法中,都需要使用棧,對于前者,進入棧中的元素為表達式中的 運算符 ,而對于后者,進入棧的元素為 操作數 ,中綴表達式(a+b)/c-(f-d/c)所對應的后綴表達式是 ab+c/fde/- 。 10向一個棧頂指針為h的鏈棧中插入一個s所指結點時,可執(zhí)行_ s-next=h _和h=s;操作。(結點的指針域為next)11從一個棧頂指針為h的鏈棧中刪除一個結點時,用x保存被刪結點的值,可執(zhí)行x=h-data;和_ h=h-next _。(結點的指針域為next)12在一個鏈隊中,設f和r分別為隊頭和隊尾指針,則插入s所指結點的操作為_ r-next=s _和r=s; (結點的指針域為next)13在一個鏈隊中,設f和r分別為隊頭和隊尾指針,則刪除一個結點的操作為_ f=f-next _。 (結點的指針域為next) 14串是一種特殊的線性表,其特殊性表現(xiàn)在組成串的數據元素都是 字符 。15串的兩種最基本的存儲方式是 順序存儲方式 和 鏈式存儲方式 。16空串的長度是 0 ;空格串的長度是 空格字符的個數 。17需要壓縮存儲的矩陣可分為 特殊 矩陣和 稀疏 矩陣兩種。18設廣義表L=(),(),則表頭是 () ,表尾是 () ,L的長度是 2 。19廣義表A(a,b,c),(d,e,f))的表尾為 (d,e,f) 。20兩個串相等的充分必要條件是_串長度相等且對應位置的字符相等 _。21設有n階對稱矩陣A,用數組s進行壓縮存儲,當ij時,A的數組元素aij相應于數組s的數組元素的下標為_ i(i-1)/2+j _。(數組元素的下標從1開始)22對稀疏矩陣進行壓縮存儲,矩陣中每個非零元素對應的三元組包括該元素的_行下標_、_列下標_和_非零元素值_三項信息。三、問答題1簡述棧和一般線性表的區(qū)別。答:棧是一種先進后出的線性表,棧的插入和刪除操作都只能在棧頂進行,而一般的線性表可以在線性表的任何位置進行插入和刪除操作。2簡述隊列和一般線性表的區(qū)別。隊列是一種先進先出的線性表,隊列的插入只能在隊尾進行,隊列的刪除只能在隊頭進行,而一般的線性表可以在線性表的任何位置進行插入和刪除操作。3鏈棧中為何不設頭結點?答:因為鏈棧只在鏈頭插入和刪除結點,不可能在鏈表中間插入和刪除結點,算法實現(xiàn)很簡單,所以一般不設置頭結點。4利用一個棧,則:(1)如果輸入序列由A,B,C組成,試給出全部可能的輸出序列和不可能的輸出序列。(2)如果輸入序列由A,B,C,D組成,試給出全部可能的輸出序列和不可能的輸出序列。答:(1)棧的操作特點是后進先出,因此輸出序列有:A入,A出,B入,B出,C入C出,輸出序列為ABC。A入,A出,B入,C入,C出,B出,輸出序列為ACB。A入,B入,B出,A出,C入,C出,輸出序列為BAC。A入,B入,B出,C入,C出,A出,輸出序列為BCA。A入,B入,C入,C出,B出,A出,輸出序列為CBA。由A,B,C組成的數據項,除上述五個不同的組合外,還有一個C,A,B組合。但不可能先把C出棧,再把A出棧,(A不在棧頂位置),最后把B出棧,所以序列CAB不可能由輸入序列A,B,C 通過棧得到。(2)按照上述方法,可能的輸出序列有:ABCD,ABDC,ACBD,ACDB,ADCB,BACD,BADC,BCAD,BCDA,BDCA,CBAD,CBDA,CDBA,DCBA。不可能的輸出序列有:DABC,ADBC,DACB,DBAC,BDAC,DBCA,DCAB,CDAB,CADB,CABD5用S表示入棧操作,X表示出棧操作,若元素入棧順序為1234,為了得到1342出棧順序,相應的S和X操作串是什么?答:應是SXSSXSXX。各操作結果如下:S 1入棧X 1出棧 輸出序列:1S 2入棧S 3入棧X 3出棧 輸出序列:13S 4入棧 X 4出棧 輸出序列:134X 2出棧 輸出序列:1342 6有5個元素,其入棧次序為:A、B、C、D、E,在各種可能的出棧次序中,以元素C、D最先的次序有哪幾個?答:從題中可知,要使C第一個且D第二個出棧,應是A入棧,B入棧,C入棧,C出棧,D入棧。之后可以有以下幾種情況:(1)B出棧,A出棧,E入棧,E出棧,輸出序列為:CDBAE。(2)B出棧,E入棧,E出棧,A 出棧,輸出序列為CDBEA。(3)E入棧,E出棧,B出棧,A出棧,輸出序列為CDEBA所以可能的次序有:CDBAE,CDBEA,CDEBA7寫出以下運算式的后綴算術運算式 3x2+x-1/x+5 (A+B)*C-D/(E+F)+G答;對應的后綴算術運算式 3x2*x+1x/-5+ AB+C*DEF+/-G+8 簡述廣義表和線性表的區(qū)別和聯(lián)系。答:廣義表是線性表的的推廣,它也是n(n0)個元素a1 ,a2ai an的有限序列,其中ai或者是原子或者是一個廣義表。所以,廣義表是一種遞歸數據結構,而線性表沒有這種特性,線性表可以看成廣義表的特殊情況,當ai都是原子時,廣義表退化成線性表。 四、程序填空題1在下面空格處填寫適當的語句,以使下面的鏈式隊列取出元素的算法完整。 int write(LinkQueue *q) QueueNode *p; if (q-front=q-rear) /*隊空*/ printf(“underflow”); exit(0); while (q-front-next != NULL) p=q-front-next; (1) q-front-next=p-next; printf(“%4d”,p-data); (2) free(p); (3) q-rear=q-front ; /*隊空時,頭尾指針指向頭結點*/ 五、綜合題 1設棧S和隊列Q的初始狀態(tài)為空,元素e1,e2,e3,e4,e5和e6依次通過S,一個元素出棧后即進隊列Q,若6個元素出隊的序列是e2,e4,e3,e6,e5,e1,則棧S的容量至少應該是多少?答:出隊序列是e2,e4,e3,e6,e5,e1的過程: e1入棧(棧底到棧頂元素是e1) e2入棧(棧底到棧頂元素是e1,e2) e2出棧(棧底到棧頂元素是e1) e3入棧(棧底到棧頂元素是e1,e3) e4入棧(棧底到棧頂元素是e1,e3,e4) e4出棧(棧底到棧頂元素是e1,e3) e3出棧(棧底到棧頂元素是e1) e5入棧(棧底到棧頂元素是e1,e5) e6入棧(棧底到棧頂元素是e1,e5,e6) e6出棧(棧底到棧頂元素是e1,e5) e5出棧(棧底到棧頂元素是e1) e1出棧(棧底到棧頂元素是空)棧中最多時有3個元素,所以棧S的容量至少是3。2假設用循環(huán)單鏈表實現(xiàn)循環(huán)隊列,該隊列只使用一個尾指針rear,其相應的存儲結構和基本算法如下;(1)初始化隊列initqueue(Q):建立一個新的空隊列Q。(2)入隊列enqueue(Q,x):將元素x插入到隊列Q中。(3)出隊列delqueue(Q):從隊列Q中退出一個元素。(4)取隊首元素gethead(Q):返回當前隊首元素。(5)判斷隊列是否為空:emptyqueue(Q)。(6)顯示隊列中元素:dispqueue(Q)。算法設計如下:/*只有一個指針rear的鏈式隊的基本操作*/#include typedef char elemtype;struct node /*定義鏈隊列結點*/elemtype data;struct node *next;typedef struct queue /*定義鏈隊列數據類型*/struct node *rear; LinkQueue;void initqueue(LinkQueue *Q)/*初始化隊列*/ Q=(struct queue *)malloc(sizeof(struct queue); Q-rear=NULL; void enqueue(LinkQueue *Q,elemtype x) /*入隊算法*/ struct node *s,*p; s=(struct node *)malloc(sizeof(struct node); s-data=x; if (Q-rear=NULL) /*原為空隊時*/ Q-rear=s;s-next=s; else /*原隊不為空時*/ p=Q-rear-next; /*p指向第一個結點*/Q-rear-next=s; /*將s鏈接到隊尾*/Q-rear=s; /*Q-rear指向隊尾*/s-next=p; void delqueue(LinkQueue *Q) /*出隊算法*/ struct node *t; if (Q-rear=NULL) printf(隊列為空!n);return(0); else if (Q-rear-next=Q-rear) /*只有一個結點時*/ t=Q-rear;Q-rear=NULL; else /*有多個結點時*/ t=Q-rear-next; /*t指向第一個結點*/Q-rear-next=t-next; /*引成循環(huán)鏈*/ free(t); elemtype gethead(LinkQueue *Q) /*取隊首元素算法*/ if (Q-rear=NULL) printf(隊列為空!n); else return(Q-rear-next-data); int emptyqueue(LinkQueue *Q) /*判斷隊列是否為空算法*/ if (Q-rear=NULL) return(1); /*為空,則返回true*/ else return(0); /*不為空,則返回flase*/ void dispqueue(LinkQueue *Q) /*顯示隊列中元素算法*/ struct node *p=Q-rear-next; printf(隊列元素:); while (p!=Q-rear) printf(%c ,p-data);p=p-next; printf(%cn,p-data);六、完成:實驗2棧、隊列、遞歸程序設計根據實驗要求(見教材P203)認真完成本實驗,并提交實驗報告。數據結構(本)課程作業(yè)作業(yè)3(本部分作業(yè)覆蓋教材第6-7章的內容)一、單項選擇題1.假定一棵二叉樹中,雙分支結點數為15,單分支結點數為30,則葉子結點數為( B )。A15 B16 C17 D472二叉樹第k層上最多有( B )個結點。 A2k B2k-1 C2k-1 D2k-1 3二叉樹的深度為k,則二叉樹最多有( D )個結點。A2k B2k-1C2k-1 D2k-14. 設某一二叉樹先序遍歷為abdec,中序遍歷為dbeac,則該二叉樹后序遍歷的順序是( C )。 Aabdec Bdebac Cdebca Dabedc5將含有150個結點的完全二叉樹從根這一層開始,每一層從左到右依次對結點進行編號,根結點的編號為1,則編號為69的結點的雙親結點的編號為( B )。A33 B34 C35 D366如果將給定的一組數據作為葉子數值,所構造出的二叉樹的帶權路徑長度最小,則該樹稱為( A )。A哈夫曼樹 B平衡二叉樹 C二叉樹 D完全二叉樹7下列有關二叉樹的說法正確的是( A )。A二叉樹中度為0的結點的個數等于度為2的結點的個數加1B二叉樹中結點個數必大于0C完全二叉樹中,任何一個結點的度,或者為0或者為2 D二叉樹的度是28在一棵度為3的樹中,度為3的結點個數為2,度為2的結點個數為1,則度為0的結點個數為( C )。A4 B5 C6 D79在一棵度具有5層的滿二叉樹中結點總數為( A )。A31 B32 C33 D1610. 利用n個值作為葉結點的權生成的哈夫曼樹中共包含有( D )個結點。 A. n B. n+1 C. 2*n D. 2*n-111. 利用3、6、8、12這四個值作為葉子結點的權,生成一棵哈夫曼樹,該樹中所有葉子的最長帶權路徑長度為( A )。 A. 18 B. 16 C. 12 D. 3012在一棵樹中,( C )沒有前驅結點。A分支結點 B葉結點 C樹根結點 D空結點13在一棵二叉樹中,若編號為i的結點存在右孩子,則右孩子的順序編號為( C )。 A2i B2i-1 D2i+1 C2i+2 14設一棵哈夫曼樹共有n個葉結點,則該樹有( B )個非葉結點。 An Bn-1 Cn+1 D2n15設一棵有n個葉結點的二叉樹,除葉結點外每個結點度數都為2,則該樹共有( B )個結點。 A2n B2n-1 C2n+1 D2n+2 16在一個圖G中,所有頂點的度數之和等于所有邊數之和的( C )倍。 A1/2 B1 C2 D4 17在一個有像圖中,所有頂點的入度之和等于所有頂點的出度之和的( B )倍。 A鄰接矩陣表示法 B鄰接表表示法 C逆鄰接表表示法 D鄰接表和逆鄰接表 18在圖的存儲結構表示中,表示形式唯一的是( C )。 An Bn+1 Cn-1 Dn/219一個具有n個頂點的無向完全圖包含( A )條邊。 An(n-1) Bn(n+1) C n(n-1)/2 D n(n+1)/220對于具有n個頂點的圖,若采用鄰接矩陣表示,則該矩陣的大小為( B )。 An Bn2 Cn-1 D(n-1)221對于一個具有n個頂點和e條邊的無向圖,若采用鄰接表表示,則所有頂點鄰接表中的結點總數為( D )。 An Be C2n D2e22在有向圖的鄰接表中,每個頂點鄰接表鏈接著該頂點所有( B )鄰接點。 A入邊 B 出邊 C入邊和出邊 D 不是入邊也不是出邊 23鄰接表是圖的一種( B )。 A順序存儲結構 B鏈式存儲結構 C索引存儲結構 D散列存儲結構 24如果從無向圖的任一頂點出發(fā)進行一次深度優(yōu)先搜索即可訪問所有頂點,則該圖一定是( B )。 A完全圖 B連通圖 C有回路 D一棵樹25下列有關圖遍歷的說法不正確的是( C )。A連通圖的深度優(yōu)先搜索是一個遞歸過程B圖的廣度優(yōu)先搜索中鄰接點的尋找具有“先進先出”的特征C非連通圖不能用深度優(yōu)先搜索法D圖的遍歷要求每一頂點僅被訪問一次 26無向圖的鄰接矩陣是一個( A )。 A對稱矩陣 B 零矩陣 C上三角矩陣 D對角矩陣27圖的深度優(yōu)先遍歷算法類似于二叉樹的( A )遍歷。A先序 B 中序 C后序 D層次28已知下圖所示的一個圖,若從頂點V1出發(fā),按深度優(yōu)先搜索法進行遍歷,則可能得到的一種頂點序列為( C )。 AV1V2V4V8V3V5V6V7 BV1V2V4V5V8V3V6V7 CV1V2V4V8V5V3V6V7 DV1V3V6V7V2V4V5V8V6V7V1V2V3V8V4V5二、填空題1結點的度是指結點所擁有的 子樹樹木或后繼結點數 。2樹的度是指 樹中所有結點的度的最大值 。3度大于0的結點稱作 分支結點 或 非終端結點 。4度等于0的結點稱作 葉子結點 或 終端結點 。5在一棵樹中,每個結點的 子樹的根 或者說每個結點的 后繼結點 稱為該結點的 孩子結點 ,簡稱為孩子。6從根結點到該結點所經分支上的所有結點稱為該結點的 祖先 。7樹的深度或高度是指 樹中結點的最大層數 。8具有n個結點的完全二叉樹的深度是 。9先序遍歷二叉樹的的操作定義為;若二叉樹為空,則為空操作,否則進行如下操作,訪問二叉樹的 根結點 ;先序遍歷二叉樹的 左子樹 ,先序遍歷二叉樹的 右子樹 。 10中序遍歷二叉樹的的操作定義為;若二叉樹為空,則為空操作,否則進行如下操作,中序遍歷二叉樹的 左子樹 ;訪問而叉樹的 根結點 ,中序遍歷二叉樹的 右子樹 。11后序遍歷二叉樹的的操作定義為;若二叉樹為空,則為空操作,否則進行如下操作,后序遍歷二叉樹的 左子樹 ;后序遍歷二叉樹的 右子樹 ,訪問而叉樹的 根結點 。12將樹中結點賦上一個有著某種意義的實數,稱此實數為該結點的 權 。13樹的帶權路徑長度為樹中所有葉子結點的 帶權路徑長度之和 。14哈夫曼樹又稱為 最優(yōu)二叉樹 ,它是n個帶權葉子結點構成的所有二叉樹中帶權路徑長度WPL 最小的二叉樹 。15若以4,5,6,7,8作為葉子結點的權值構造哈夫曼樹,則其帶權路徑長度是 69 。16具有m個葉子結點的哈夫曼樹共有 2m-1 結點。17在圖中,任何兩個數據元素之間都可能存在關系,因此圖的數據元素之間是一種 多對多 的關系。18圖的遍歷是從圖的某一頂點出發(fā),按照一定的搜索方法對圖中 所有頂點 各做 一次 訪問的過程。19圖的深度優(yōu)先搜索遍歷類似于樹的 先序 遍歷。20圖的廣度優(yōu)先搜索類似于樹的 按層次 遍歷。21具有n個頂點的有向圖的鄰接矩陣,其元素個數為 n2 。22圖常用的兩種存儲結構是 鄰接矩陣 和 鄰接表 。23在有n