2020年新編電大數據結構本形成性考核冊作業(yè)4原題帶答案名師精品資料_第1頁
2020年新編電大數據結構本形成性考核冊作業(yè)4原題帶答案名師精品資料_第2頁
2020年新編電大數據結構本形成性考核冊作業(yè)4原題帶答案名師精品資料_第3頁
2020年新編電大數據結構本形成性考核冊作業(yè)4原題帶答案名師精品資料_第4頁
2020年新編電大數據結構本形成性考核冊作業(yè)4原題帶答案名師精品資料_第5頁
已閱讀5頁,還剩23頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、電大 數據結構(本)形成性考核 課程作業(yè) 答案 一、單項選擇題 )。 B緊湊結構和非緊湊結構 D內部結構和外部機構 1在數據結構中,從邏輯上可以把數據結構分為(C D )。 A 動態(tài)結構和靜態(tài)結構 C線性結構和非線性結構 2下列說法中,不正確的是( A 數據元素是數據的基本單位 B數據項是數據中不可分割的最小可標識單位 C數據可有若干個數據元素構成 D數據項可由若干個數據元素構成 3一個存儲結點存儲一個(B )。 A 數據項B數據元素 C數據結構 D數據類型 4數據結構中,與所使用的計算機無關的是數據的( A 存儲結構 B 物理結構 )。 C邏輯結構 D物理和存儲結構 5下列的敘述中,不屬于算

2、法特性的是(D )。 B輸入性 A有窮性 C可行性 D可讀性 6算法分析的目的是( C )。 A找出數據結構的合理性 C分析算法的效率以求改進 B研究算法中的輸入和輸出的關系 D分析算法的易懂性和文檔性 7數據結構是一門研究計算機中( A 數值運算B非數值運算 C集合D非集合 B )對象及其關系的科學。 8算法的時間復雜度與( A所使用的計算機 C與算法本身 9設有一個長度為 C )有關。 B與計算機的操作系統 D與數據結構 n 的順序表,要在第 i 個元素之前(也就是插入元素作為新表的第 i 個元素),則移動元素個數為( A )。 A n-i+1 Bn-i C n-i-1 Di 10設有一個

3、長度為 A n-i+1 n 的順序表,要刪除第 i 個元素移動元素的個數為( B Bn-iC n-i-1 Di )。 11在一個單鏈表中, 語句( C )。 p、q分別指向表中兩個相鄰的結點,且q 所指結點是 p 所指結點的直接后繼,現要刪除 q 所指結點,可用 A p=q-next 12在一個單鏈表中 Bp-next=q Cp-next=q next D q-next=NULL p 所指結點之后插入一個 s 所指的結點時,可執(zhí)行( D )。 A p-next= s; s next= p next B p-next=s next; C p=s-next 13非空的單向循環(huán)鏈表的尾結點滿足( D

4、 s-next=p-next; p-next=s; C )(設頭指針為 head,指針 p 指向尾結點) 。 A. P-next= =NULL BP= =NULL C P-next= =head D P= = head 14鏈表不具有的特點是(A )。 B插入刪除不需要移動元素 D所需空間與線性表長度成正比 B )(設頭指針為 head)。 A可隨機訪問任一元素 C不必事先估計存儲空間 15帶頭結點的鏈表為空的判斷條件是( A head = =NULL B head-next= =NULL C head-next= =head D head!=NULL 16在一個單鏈表中, p、q分別指向表中

5、兩個相鄰的結點,且q所指結點是 p所指結點的直接后繼,現要刪除 q 所指結點,可用 語句( C )。 A p=q-next Bp-next=q Cp-next=q-next D q-next=NULL 17 在一個鏈隊中,假設 f 和 r 分別為隊頭和隊尾指針, 則刪除一個結點的運算為( C )。 A r=f-next; B r=r-next; Cf=f-next; D f=r-next; 18 在一個鏈隊中,假設 f 和 r 分別為隊頭和隊尾指針, 則插入 s 所指結點的運算為( B )。 A f-next=s; f=s; B r-next=s;r=s; C s-next=r;r=s; D

6、s-next=f;f=s; 19. 一個順序表第一個元素的存儲地址是90,每個元素的長度為 2,則第 6 個元素的地址是( B ) A98 B100 C 102D 106 20有關線性表的正確說法是(D )。 A每個元素都有一個直接前驅和一個直接后繼 B線性表至少要求一個元素 C表中的元素必須按由小到大或由大到下排序 D除了一個和最后一個元素外,其余元素都有一個且僅有一個直接前驅和一個直接后繼 二、填空題 1在一個長度為 n 的順序存儲結構的線性表中,向第 i(1i n+1) 個元素之前插入新元素時,需向后移動n-i+1 個數據元素 2從長度為 n 的采用順序存儲結構的線性表中刪除第 i(1i

7、 n+1) 個元素 ,需向前移動 n-i 個元素。 3數據結構按結點間的關系,可分為 4 種邏輯結構: 集合 、 線性結構 、 樹形結構 、 圖狀結構 。 4數據的邏輯結構在計算機中的表示稱為 物理結構 或 存儲結構 。 5除了第 1 個和最后一個結點外,其余結點有且只有一個前驅結點和后繼結點的數據結構為 線性結構 ,每個結點可有任意 多個前驅和后繼結點數的結構為 非線性結構 。 7數據結構中的數據元素存在多對多的關系稱為 8數據結構中的數據元素存在一對多的關系稱為 9數據結構中的數據元素存在一對一的關系稱為 10要求在 n 個數據元素中找其中值最大的元素, 和 _ O(n)_ 。 6算法的

8、5 個重要特性是 有窮性 、 確定性 、 可形性 、 有零個或多個輸入 有零個或多個輸出 。 _圖狀結構 _結構。 _樹形結構 _結構。 _線性結構 _結構。 n-1 設基本操作為元素間的比較。 則比較的次數和算法的時間復雜度分別為 11在一個單鏈表中 p 所指結點之后插入一個 s 所指結點時,應執(zhí)行 _ s-next=p-next _和 p-next=s; 的操作。 12設有一個頭指針為 head 的單向循環(huán)鏈表, p 指向鏈表中的結點,若 p-next= =_ head _ ,則 p 所指結點為尾結點。 13在一個單向鏈表中,要刪除 p 所指結點,已知 q 指向 p 所指結點的前驅結點。則

9、可以用操作 _ q-next=p-next _ 。 14設有一個頭指針為 head 的單向鏈表, p 指向表中某一個結點,且有 p-next= =NULL, 通過操作 _ p-next=head _, 就可使該單 向鏈表構造成單向循環(huán)鏈表。 15每個結點只包含一個指針域的線性表叫單鏈表 。 16線性表具有 順序存儲 和 鏈式存儲 兩種存儲結構。 17數據的邏輯結構是從邏輯關系上描述數據,它與數據的關系存儲結構 無關,是獨立于計算機的。 18在雙向循環(huán)鏈表的每個結點中包含兩個 指針域,其中 next 指向它的 直接后繼 ,prior 指向它的 直接前驅 ,而頭 結點的 prior 指向 尾結點

10、,尾結點的 next 指向 頭結點 。 19單向循環(huán)鏈表是單向鏈表的一種擴充,當單向鏈表帶有頭結點時,把單向鏈表中尾結點的指針域由空指針改為頭結點的指 針 ;當單向鏈表不帶頭結點時,則把單向鏈表中尾結點的指針域由空指針改為指向 指向第一個結點的指針 。 20線性鏈表的邏輯關系時通過每個結點指針域中的指針來表示的。其邏輯順序和物理存儲順序不再一致,而是一種鏈式 儲結構,又稱為 鏈表 。 三、問答題 1簡述數據的邏輯結構和存儲結構的區(qū)別與聯系,它們如何影響算法的設計與實現? 答:若用結點表示某個數據元素,則結點與結點之間的邏輯關系就稱為數據的邏輯結構。數據在計算機中的存儲表示稱為數據的 存儲結構。

11、可見,數據的邏輯結構是反映數據之間的固有關系,而數據的存儲結構是數據在計算機中的存儲表示。盡管因采用的存儲 結構不同,邏輯上相鄰的結點,其物理地址未必相同,但可通過結點的內部信息,找到其相鄰的結點,從而保留了邏輯結構的特點。 采用的存儲結構不同,對數據的操作在靈活性,算法復雜度等方面差別較大。 2解釋順序存儲結構和鏈式存儲結構的特點,并比較順序存儲結構和鏈式存儲結構的優(yōu)缺點。 答: 順序結構存儲時, 相鄰數據元素的存放地址也相鄰, 即邏輯結構和存儲結構是統一的, ,要求內存中存儲單元的地址必須是連續(xù)的 優(yōu)點:一般情況下,存儲密度大,存儲空間利用率高。 缺點:( 1)在做插入和刪除操作時,需移動

12、大量元素; (2)由于難以估計,必須預先分配較大的空間,往往使存儲空間不能得到 充分利用;( 3)表的容量難以擴充。 鏈式結構存儲時,相鄰數據元素可隨意存放,所占空間分為兩部分,一部分存放結點值,另一部分存放表示結點間關系的指針。 優(yōu)點:插入和刪除元素時很方便,使用靈活。 缺點:存儲密度小,存儲空間利用率低。 3什么情況下用順序表比鏈表好? 答:順序表適于做查找這樣的靜態(tài)操作,鏈表適于做插入和刪除這樣的動態(tài)操作。如果線性表的變化長度變化不大,且其主要操 作是查找,則采用順序表;如果線性表的長度變化較大,且其主要操作是插入、刪除操作,則采用鏈表。 4頭指針、頭結點、第一個結點(或稱首元結點)的區(qū)

13、別是什么? 頭結點是在鏈表的開始結點之前附加的一個結點;第一個結點(或稱首元結點)是鏈表中存儲第一個數據元素的結點;頭指針是 指向鏈表中第一個結點(或為頭結點或為首元結點)的指針。 5解釋帶頭結點的單鏈表和不帶頭結點的單鏈表的區(qū)別。 答: 帶頭結點的單鏈表和不帶頭結點的單鏈表的區(qū)別主要體現在其結構上和算法操作上。 在結構上,帶頭結點的單鏈表,不管鏈表是否為空,均含有一個頭結點,不帶頭結點的單鏈表不含頭結點。 在操作上,帶頭結點的單鏈表的初始化為申請一個頭結點。無論插入或刪除的位置是地第一個結點還是其他結點,算法步驟都相 同。不帶頭結點的單鏈表,其算法步驟要分別考慮插入或刪除的位置是第一個結點還

14、是其他結點。因為兩種情況的算法步驟不同。 四、程序填空題 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 個結點

15、的單向鏈表的算法,請在空格內填上適當的語句 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 個結點,請在空格內填上適當的語句。

16、 int delete(NODE *head,int i) NODE *p,*q; int j; q=head; j=0; while(q!=NULL) 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 ) A 3,2,1B2,1,3 C3,1

17、,2 D1,3,2 2一個隊列的入隊序列是 1,2,3,4 A4,3,2,1 B1,2,3, C1,4,3,2 D3,2,4, 3向順序棧中壓入新元素時,應當( A先移動棧頂指針,再存入元素 C先后次序無關緊要D 則隊列的輸出序列是( B )。 4 1 A )。 B 先存入元素,再移動棧頂指針 同時進行 4在一個棧頂指針為 top 的鏈棧中,將一個 p 指針所指的結點入棧,應執(zhí)行( A top-next=p; B p-next=top-next; top-next=p; C p-next=top; top=p; D p-next=top-next; top=top-next; 5在一個棧頂指針

18、為 top 的鏈棧中刪除一個結點時,用 x保存被刪結點的值,則執(zhí)行( B ) A x=top;top=top-next; B x=top-data; C top=top-next; x=top-data; D x=top-data; top=top-next; A 棧 C堆棧或隊列 B隊列 D數組 6一般情況下,將遞歸算法轉換成等價的非遞歸算法應該設置(A ) 7表達式 a*(b+c)-d 的后綴表達式是( A abcd*+- B abc+*d- C abc*+d- D -+*abcd 8判斷一個順序隊列 sq(最多元素為 m0)為空的條件是( A sq-rear-sq-front= m 0

19、B sq-rear-sq-front-1= = m 0 Csq-front=sq-rear D sq-front=sq-rear+1 9判斷一個循環(huán)隊列 Q(最多元素為 m0)為空的條件是( A Q-front=Q-rear C Q-front=(Q-rear+1)% m 0 B Q-front!=Q-rear D Q-front!= (Q-rear+1)%m 0 10判斷棧 S滿(元素個數最多 n 個)的條件是( C ) A s-top=0 B s-top!=0 C s-top=n-1 D s-top!=n-1 11一個隊列的入隊順序是 B )。 A a,d,cb Ba,b,c,d a,b,

20、c,d,則離隊的順序是( C d,c,b,aD c,b,d,a C )。 12如果以鏈表作為棧的存儲結構,則退棧操作時( A 必須判斷棧是否滿B判斷棧元素類型 C必須判斷棧是否空 D對棧不作任何判斷 13在解決計算機主機與打印機之間速度不匹配問題時通常設置一個打印數據緩沖區(qū),主機將要輸出的數據依次寫入緩沖區(qū)中, 而打印機則從緩沖區(qū)中取出數據打印,該緩沖區(qū)應該是一個( B )結構。 A堆棧 B 隊列 C 數組 D 先性表 14一個遞歸算法必須包括( B )。 A遞歸部分 B終止條件和遞歸部分 C迭代部分 D終止條件和迭代部分 15從一個棧頂指針為 top 的鏈棧中刪除一個結點時,用變量 x 保存

21、被刪結點的值, 則執(zhí)行( A )。 A x=top-data; top=top-next; B x=top-data; C top=top-next; x=top-data; D top=top-next; x=data; 16在一個鏈隊中,假設 f 和r 分別為隊頭和隊尾指針, 則刪除一個結點的運算為( C )。 A r=f-next; B r=r-next; C f=f-next; D f=r-next; 17在一個鏈隊中,假設 f 和r 分別為隊頭和隊尾指針, 則插入 s 所指結點的運算為 B )。 A f-next=s; f=s; r-next=s;r=s; Cs-next=r;r=s

22、; s-next=f;f=s; 18. 以下陳述中正確的是 )。 A串是一種特殊的線性表 C串中元素只能是字母 B 串的長度必須大于零 D 空串就是空白串 19設有兩個串 p 和 q ,其中 q 是 p 的子串, q 在 p 中首次出現的位置的算法稱為( C )。 A求子串B 連接 求串長 C 匹配 D 20 串是( D )。 A 不少于一個字母的序列 B 任意個字母的序列 C 不少于一個字符的序列 D 有限個字符的序列 21 串的長度是指( B )。 A 串中所含不同字母的個數 B 串中所含字符的個數 C 串中所含不同字符的個數 D 串中所含非空格字符的個數 22. 若串 S=“Englis

23、h ”,其子串的個數是(D )。 A 9 B 16 C 36 D 28 C )。 鏈接的存儲結構 C數據元素是一個字符 數據元素可以任意 )。 24空串與空格串(B A相同B 不相同 可能相同 D 無法確定 23串與普通的線性表相比較,它的特殊性體現在( A順序的存儲結構 D )。 25兩個字符串相等的條件是( A 兩串的長度相等 B兩串包含的字符相同 兩串的長度相等,并且兩串包含的字符相同 兩串的長度相等,并且對應位置上的字符相同 26 在實際應用中,要輸入多個字符串,且長度無法預定。則應該采用( A鏈式 A )存儲比較合適( )。 27. 一維數組 A64 C70 B 順序 C 堆結構 D

24、 無法確定 A 采用順序存儲結構,每個元素占用 6 個字節(jié),第 6 個元素的存儲地址為 100 ,則該數組的首地址是( C )。 28 90 28稀疏矩陣采用壓縮存儲的目的主要是(D A表達變得簡單 C 去掉矩陣中的多余元素 )。 對矩陣元素的存取變得簡單 減少不必要的存儲空間的開銷 29一個非空廣義表的表頭( C A 不可能是原子 )。 只能是子表 C 只能是原子 可以是子表或原子 30常對數組進行的兩種基本操作是 A建立與刪除B C查找和修改 C )。 索引與、和修改 查找與索引 31. 設二維數組 A56 按行優(yōu)先順序存儲在內存中,已知 A00 起始地址為 1000,每個數組元素占用 5

25、 個存儲單元,則元素 A44 的地址為( )。 A1140 B 1145 C 1120 D 1125 20 階的對稱矩陣 A,采用壓縮存儲的方式, 32設有一個 則矩陣中元素 a9,2 在一維數組 B 中的下標是( D )。 A41 32 18 將其下三角部分以行序為主序存儲到一維數組 B中(數組下標從 1 開始), 38 二、填空題 1棧是限定在表的一端進行插入和刪除操作的線性表,又稱為后進先出 。 2循環(huán)隊列隊頭指針在隊尾指針下一個 位置,隊列是“滿”狀態(tài) 3在隊列的順序存儲結構中,當插入一個新的隊列元素時,尾指針 增 1 ,當刪除一個元素隊列時,頭指針 增 1 。 4循環(huán)隊列的引入,目的

26、是為了克服假上溢 。 5向順序棧插入新元素分為三步:第一步進行棧是否滿 判斷,判斷條件是 s-top=MAXSIZE-1 ;第二步是修改 棧頂指針 ;第三步是把新元素賦給 棧頂對應的數組元素 。同樣從順序棧刪除元素分為三步:第一步進行 棧是否 空 判斷,判斷條件是 s-top=-1 。第二步是把 棧頂元素 ;第三步 修改棧頂指針 。 6假設以 S 和 X 分別表示入棧和出棧操作,則對輸入序列 a,b,c,d,e 一系列棧操作 SSXSXSSXXX 之后,得到的輸出序列為 bceda 。 7一個遞歸算法必須包括終止條件 和 遞歸部分 。 8判斷一個循環(huán)隊列 LU (最多元素為 m0)為空的條件是

27、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在一個鏈

28、隊中, 設 f 和 r 分別為隊頭和隊尾指針, 則插入 s 所指結點的操作為 _ r-next=s 和 r=s; ( 結點的指針域為 next) 13在一個鏈隊中,設 f 和 r 分別為隊頭和隊尾指針,則刪除一個結點的操作為 _ f=f-next 。 (結點的指針域為 next) 14 串是一種特殊的線性表,其特殊性表現在組成串的數據元素都是 字符 。 15串的兩種最基本的存儲方式是順序存儲方式 和 鏈式存儲方式 。 16空串的長度是0 ;空格串的長度是 空格字符的個數 。 17需要壓縮存儲的矩陣可分為特殊 矩陣和 稀疏 矩陣兩種。 18設廣義表 L= (),(),則表頭是 () ,表尾是 (

29、) ,L 的長度是 2 。 19廣義表 A(a,b,c),(d,e,f)的表尾為( d,e,f)。 20兩個串相等的充分必要條件是 串長度相等且對應位置的字符相等_。 21設有 n階對稱矩陣 A,用數組 s 進行壓縮存儲,當 i j 時,A 的數組元素 aij 相應于數組 s的數組元素的下標為 _ i(i-1)/2+j 。 (數組元素的下標從 1 開始) 22對稀疏矩陣進行壓縮存儲,矩陣中每個非零元素對應的三元組包括該元素的_行下標 、_列下標 _和 _非零元素值 三項信息。 三、問答題 1簡述棧和一般線性表的區(qū)別。 答:棧是一種先進后出的線性表,棧的插入和刪除操作都只能在棧頂進行,而一般的線

30、性表可以在線性表的任何位置進行插入和 刪除操作。 2簡述隊列和一般線性表的區(qū)別。 隊列是一種先進先出的線性表,隊列的插入只能在隊尾進行,隊列的刪除只能在隊頭進行,而一般的線性表可以在線性表的任何 位置進行插入和刪除操作。 3鏈棧中為何不設頭結點? 答:因為鏈棧只在鏈頭插入和刪除結點,不可能在鏈表中間插入和刪除結點,算法實現很簡單,所以一般不設置頭結點。 4利用一個棧,則: (1)如果輸入序列由 A,B,C 組成,試給出全部可能的輸出序列和不可能的輸出序列。 (2)如果輸入序列由 A ,B,C,D 組成,試給出全部可能的輸出序列和不可能的輸出序列 答: (1)棧的操作特點是后進先出,因此輸出序列

31、有: 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 不可能由輸

32、入序列 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 ,CABD 5用 S表示入棧操作, X 表示出棧操作,若元素入棧順序為1234,為了得到 1342出棧順序,相應的 S和X 操作串是什么? 答: 應是 SXSSXSXX 。各操作結果如下 S 1 入棧 X 1 出棧 輸出序列:

33、1 S 2 入棧 S 3 入棧 X 3 出棧 輸出序列: 13 S 4 入棧 X 4 出棧 輸出序列: 134 X 2 出棧 輸出序列: 1342 6有 5 個元素,其入棧次序為: A、B、 C、D、 E,在各種可能的出棧次序中,以元素C、D 最先的次序有哪幾個? 答:從題中可知,要使 (1)B 出棧, (2)B 出棧, (3)E 入棧, A 出棧, E 入棧, E出棧, C 第一個且 D 第二個出棧,應是 A 入棧, B 入棧, C 入棧, E入棧, E 出棧, B 出棧, C 出棧, D 入棧。之后可以有以下幾種情況: E 出棧,輸出序列為: A 出棧,輸出序列為 A 出棧,輸出序列為 C

34、DBAE 。 CDBEA 。 CDEBA 所以可能的次序有: CDBAE ,CDBEA ,CDEBA 7寫出以下運算式的后綴算術運算式 3x2+x-1/x+5 (A+B)*C-D/(E+F)+G 答;對應的后綴算術運算式 3x2*x+1x/-5+ AB+C*DEF+/-G+ 8 簡述廣義表和線性表的區(qū)別和聯系。 答:廣義表是線性表的的推廣,它也是n(n0)個元素 a1 ,a2ai an的有限序列,其中 ai 或者是原子或者是一個廣義表。所以,廣義 表是一種遞歸數據結構,而線性表沒有這種特性,線性表可以看成廣義表的特殊情況,當ai 都是原子時,廣義表退化成線性表。 四、程序填空題 1在下面空格處

35、填寫適當的語句,以使下面的鏈式隊列取出元素的算法完整。 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)為空,元素

36、 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

37、入棧(棧底到棧頂元素是 e1,e5,e6 ) e6 出棧(棧底到棧頂元素是 e1,e5 ) e5 出棧(棧底到棧頂元素是 e1 ) e1 出棧(棧底到棧頂元素是空) 棧中最多時有 3 個元素,所以棧 S 的容量至少是 3。 2 假設用循環(huán)單鏈表實現循環(huán)隊列,該隊列只使用一個尾指針 rear ,其相應的存儲結構和基本算法如下; ( 1)初始化隊列 initqueue(Q): 建立一個新的空隊列 Q。 ( 2)入隊列 enqueue(Q,x): 將元素 x 插入到隊列 Q中。 ( 3)出隊列 delqueue(Q): 從隊列 Q中退出一個元素。 ( 4)取隊首元素 gethead(Q): 返回當前

38、隊首元素。 ( 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)/* 初始化隊列 */

39、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); 原為空隊時 */ Q-rear=s; s-next=s; else /* s-data=x; if (Q-rear=NULL) /* 原隊不為空時 */ p=Q-rear-next; /*p Q-rear-next=s; /* 指向第一個結點 */ 將

40、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; Q-rear-next=t-next; /*t /* 指向第一個結點 */ 引成循環(huán)鏈 */ free(

41、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); /* else return(0); /*不為空 , 則返回 void dispqueue(LinkQueue *Q) 判斷隊列是否為空算法 */ 為空 , 則返回 true*/ flase*/ /* 顯示隊列中元素算法 */ struct node

42、 *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 B 16 C 17 D 47 2二叉樹第 k 層上最多有( B )個結點。 A 2k B 2k

43、-1 C 2k-1 D 2k-1 3二叉樹的深度為 k,則二叉樹最多有( D )個結點。 A2k B 2k-1 C2k-1 D 2k-1 4. 設某一二叉樹先序遍歷為 abdec,中序遍歷為 dbeac,則該二叉樹后序遍歷的順序是( C )。 Aabdec B debac C debca D abedc 5將含有 150 個結點的完全二叉樹從根這一層開始,每一層從左到右依次對結點進行編號,根結點的編號為 1 ,則編號為 69 的 結點的雙親結點的編號為( B )。 A 33 B 34C35D 36 6如果將給定的一組數據作為葉子數值,所構造出的二叉樹的帶權路徑長度最小,則該樹稱為(A )。 A

44、哈夫曼樹B 平衡二叉樹 C 二叉樹 D 完全二叉樹 7下列有關二叉樹的說法正確的是(A )。 A二叉樹中度為 0 的結點的個數等于度為 2 的結點的個數加 1 B二叉樹中結點個數必大于 0 C完全二叉樹中,任何一個結點的度,或者為0 或者為 2 D二叉樹的度是 2 8在一棵度為 3 的樹中,度為 3 的結點個數為 2,度為 2 的結點個數為 1,則度為 0 的結點個數為( C )。 A4B 5 C 6 D 7 9在一棵度具有 5 層的滿二叉樹中結點總數為(A )。 A31B 32C 33D 16 10. 利用 n 個值作為葉結點的權生成的哈夫曼樹中共包含有( D ) 個結點。 A. nB. n

45、+1C. 2*nD. 2*n-1 11. 利用 3、6、8、12 這四個值作為葉子結點的權,生成一棵哈夫曼樹,該樹中所有葉子的最長帶權路徑長度為( A ) 。 A. 18B. 16C. 12D. 30 12在一棵樹中,( C )沒有前驅結點。 A分支結點B 葉結點 C 樹根結點 D 空結點 13在一棵二叉樹中,若編號為 i 的結點存在右孩子,則右孩子的順序編號為( C ) A 2iB 14設一棵哈夫曼樹共有 C 2i+2 )個非葉結點 2i-1 D 2i+1 n 個葉結點,則該樹有( B n-1 C n+1 D 2n 15設一棵有 n 個葉結點的二叉樹,除葉結點外每個結點度數都為 2,則該樹共

46、有( B )個結點 A 2nB 2n-1 C2n+1D 2n+2 16在一個圖 G中,所有頂點的度數之和等于所有邊數之和的(C )倍。 A 1/2B1C2D 4 17在一個有像圖中,所有頂點的入度之和等于所有頂點的出度之和的(B )倍 A 鄰接矩陣表示法 B 鄰接表表示法 C逆鄰接表表示法D 鄰接表和逆鄰接表 18在圖的存儲結構表示中,表示形式唯一的是( A n B n 1 C n 1 D n/2 19 一個具有 n 個頂點的無向完全圖包含( A )條邊。 A n(n 1)Bn( n 1) C n(n 1)/2 D n(n 1)/2 20 對于具有 n 個頂點的圖,若采用鄰接矩陣表示, 則該矩

47、陣的大小為( B )。 A n B n2C n 2 1 D ( n 1) 2 21對于一個具有 n 個頂點和 e 條邊的無向圖,若采用鄰接表表示,則所有頂點鄰接表中的結點總數為( D ) A nB e C 2nD 2e 22在有向圖的鄰接表中,每個頂點鄰接表鏈接著該頂點所有(B )鄰接點。 A 入邊 B 出邊 C入邊和出邊 D 不是入邊也不是出邊 23鄰接表是圖的一種( B )。 A 順序存儲結構 B 鏈式存儲結構 C索引存儲結構 D 散列存儲結構 24 如果從無向圖的任一頂點出發(fā)進行一次深度優(yōu)先搜索即可訪問所有頂點,則該圖一定是( B ) A 完全圖 B 連通圖 C 有回路 D 一棵樹 25

48、下列有關圖遍歷的說法不正確的是(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 ) 3度大于 0 的結點稱作分支結點 或 非終端結點 。 4度等于 0 的結點稱作葉子結點 或 終端結

49、點 。 5在一棵樹中,每個結點的 子樹的根 或者說每個結點的 后繼結點 稱為該結點的 孩子結點 ,簡稱為孩子。 6從根結點到該結點所經分支上的所有結點稱為該結點的祖先 。 7樹的深度或高度是指 樹中結點的最大層數 。 8具有 n 個結點的完全二叉樹的深度是log2 n 1 。 9先序遍歷二叉樹的的操作定義為;若二叉樹為空,則為空操作,否則進行如下操作,訪問二叉樹的根結點 ;先序遍歷 二叉樹的 左子樹 ,先序遍歷二叉樹的 右子樹 。 10 中序遍歷二叉樹的的操作定義為;若二叉樹為空,則為空操作,否則進行如下操作,中序遍歷二叉樹的左子樹 ;訪 問而叉樹的 根結點 ,中序遍歷二叉樹的 右子樹 。 1

50、1后序遍歷二叉樹的的操作定義為;若二叉樹為空,則為空操作,否則進行如下操作,后序遍歷二叉樹的左子樹 ;后序 遍歷二叉樹的 右子樹 ,訪問而叉樹的 根結點 。 12將樹中結點賦上一個有著某種意義的實數,稱此實數為該結點的權 。 13樹的帶權路徑長度為樹中所有葉子結點的帶權路徑長度之和 。 14哈夫曼樹又稱為最優(yōu)二叉樹 ,它是 n 個帶權葉子結點構成的所有二叉樹中帶權路徑長度 WPL 最小的二叉樹 。 15若以 4,5,6,7,8 作為葉子結點的權值構造哈夫曼樹,則其帶權路徑長度是69 16具有 m 個葉子結點的哈夫曼樹共有2m-1 結點。 17在圖中,任何兩個數據元素之間都可能存在關系,因此圖的

51、數據元素之間是一種 多對多 的關系。 18圖的遍歷是從圖的某一頂點出發(fā),按照一定的搜索方法對圖中所有頂點 各做 一次 訪問的過程。 19圖的深度優(yōu)先搜索遍歷類似于樹的先序 遍歷。 20圖的廣度優(yōu)先搜索類似于樹的按層次 遍歷。 21具有 n 個頂點的有向圖的鄰接矩陣,其元素個數為n2 。 22圖常用的兩種存儲結構是鄰接矩陣 和 鄰接表 。 23在有 n 個頂點的有向圖中,每個頂點的度最大可達2(n-1) 。 24在一個帶權圖中,兩頂點之間的最段路徑最多經過n-1 條邊。 25為了實現圖的深度優(yōu)先搜索遍歷,其非遞歸的算法中需要使用的一個輔助數據結構為棧 三、綜合題 (1) 先序為“根左右” ,先序

52、序列為: fdbacegihl (2) 中序為“左根右” ,中序序列為: abcdefghij (3) 后序為“左右根” ,后序序列為: acbedhjigf 2已知某二叉樹的先序遍歷結果是: A,B,D,G,C,E,H,L,I,K,M,F 和 J,它的中序遍歷結果是: G,D,B,A,L, H,E,K,I,M,C,F和 J,請畫出這棵二叉樹,并寫出該二叉樹后續(xù)遍歷的結果。 1) 二叉樹圖形表示如下: A BC DEF GHIJ L K M ( 2)該二叉樹后序遍歷的結果是: G、D、B、L、H、K、M、I、E、J、F、C和 A 3已知一棵完全二叉樹共有 892 個結點,求 樹的高度 葉子結點

53、數 單支結點數 最后一個非終端結點的序號 答 已知深度為 k 的二叉樹最多有 2k-1 個結點 (K 1), 29-1892data=X) return 1; /*根結點的層號為 1*/ /* 向子樹中查找 X 結點 */ else int c1=NodeLevel(BT-left,X); if(c1=1) _(1) return c1+1; int c2=(2) NodeLevel(BT-right,X) _; if _(3)_ (c2=1) return c2+1; / 若樹中不存在 X 結點則返回 0 else return 0; 2. 下面函數的功能是按照圖的深度優(yōu)先搜索遍歷的方法,

54、輸出得到該圖的生成樹中的各條邊, 請在劃有橫線的地方填寫合適內容。 void dfstree(adjmatrix GA, int i, int n) int j; visitedi=1; (1) for(j=0; jdata=p-data; t-lchild=CopyTree(p-lchild); t-rchild=CopyTree(p-rchild); return(t); else return(NULL); /*CopyTree*/ 2 根據下面函數聲明編寫出求一棵二叉樹中葉子結點總數的算法,該總數值由函數返回。假定參數BT 初始指向二叉樹的根結點 int BTreeLeafCount(

55、struct BTreeNode* BT); int BTreeLeafCount(struct BTreeNode* BT) if(BT=NULL) return 0; else if(BT-left=NULL else return BTreeLeafCount(BT-left)+BTreeLeafCount(BT-right); 六、完成:實驗 3棧、隊列、遞歸程序設計 實驗 4圖的存儲方式和應用 根據實驗要求(見教材 P203)認真完成本實驗,并提交實驗報告。 本部分作業(yè)覆蓋教材第 8-9 章的內容) 數據結構(本)課程作業(yè)( 4 ) 一、單項選擇題 1. 順序查找方法適合于存儲結構為

56、( D )的線性表。 A散列存儲B 索引存儲 C散列存儲或索引存儲D 順序存儲或鏈接存儲 2對線性表進行二分查找時,要求線性表必須(C )。 A 以順序存儲方式 B以鏈接存儲方式 C 以順序存儲方式 ,且數據元素有序 D以鏈接存儲方式,且數據元素有序 3. 對于一個線性表, 若要求既能進行較快地插入和刪除, 又要求存儲結構能夠反映數據元素之間的邏輯關系, 則應該 ( B ) A以順序存儲方式B 以鏈接存儲方式 C以索引存儲方式D 以散列存儲方式 C )。 4采用順序查找方法查找長度為 n 的線性表時,每個元素的平均查找長度為( C (n+1)/2 D (n-1)/2 An B n/2 5哈希函

57、數有一個共同的性質,即函數值應當以(D )取其值域的每個值。 A最大概率B 最小概率 C 平均概率 D 同等概率 6有一個長度為 10 的有序表,按折半查找對該表進行查找,在等概率情況下查找成功的平均比較次數為( A ) A29/10B31/10 C 26/10 D 29/9 7已知一個有序表為 11,22,33,44,55,66,77,88,99 ,則順序查找元素 55 需要比較( C )次。 A 3B 4C 5 D 6 8順序查找法與二分查找法對存儲結構的要求是(D ) A順序查找與二分查找均只是適用于順序表 B順序查找與二分查找均既適用于順序表,也適用于鏈表 C順序查找只是適用于順序表

58、D二分查找適用于順序表 9有數據 53,30,37,12,45,24,96 B )。 A 45,24,53,12,37,96,30B ,從空二叉樹開始逐個插入數據來形成二叉排序樹,若希望高度最小,應該選擇的序列是 37,24,12,30,53,45,96 C 12,24,30,37,45,53,96D 30,24,12,37,45,96,53 10對有 18 個元素的有序表作二分(折半)查找,則查找 A1、 2、3B9、5、 2、3 C9、 5、3D9、4、 2、3 A3 的比較序列的下標可能為( D ) 11. 對于順序存儲的有序表 5,12,20,26,37,42,46,50,64,若采用

59、折半查找,則查找元素 26 的比較次數是 A.3 B. 3 C. 4 D.5 12. 在所有的排序方法中,關鍵字比較的次數與記錄初始排列秩序無關的是( C )。 A. 冒泡排序 B. 希爾排序 C. 直接選擇排序 D. 直接插入排序 13. 從未排序序列中依次取出元素與已經排好序的序列中的元素作比較。將其放入已排序序列的正確的位置上,此方法稱為 ( A ) A. 插入排序 B. 選擇排序 C. 交換排序 D. 歸并排序 14. 從未排序序列中挑選元素, 并將其放入已排序序列的一端, 此方法稱為( C ) A. 插入排序 B. 交換排序 C. 選擇排序 D. 歸并排序 15. 依次將每兩個相鄰的

60、有序表合并成一個有序表的排序方法稱為( D )。 A. 插入排序B.交換排序C.選擇排序D.歸并排序 16. 當兩個元素出現逆序的時候就交換位置,這種排序方法稱為( B )。 A. 插入排序B.交換排序C.選擇排序D.歸并排序 17. 每次把待排序的區(qū)間劃分為左、右兩個子區(qū)間,其中左區(qū)間中記錄的關鍵字均小于等于基準記錄的關鍵字,右區(qū)間中記錄的關 鍵字均大于等于基準記錄的關鍵字,這種排序稱為( B )。 A. 插入排序 B. 快速排序 C. 堆排序 D. 歸并排序 18. 在正常情況下,直接插入排序的時間復雜度為( D )。 A. O(log2n) B. O(n)C. O(n log 2n) D

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論