數(shù)據(jù)結構復習題 答案_第1頁
數(shù)據(jù)結構復習題 答案_第2頁
數(shù)據(jù)結構復習題 答案_第3頁
數(shù)據(jù)結構復習題 答案_第4頁
數(shù)據(jù)結構復習題 答案_第5頁
已閱讀5頁,還剩5頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、復習(一)一、選擇題1下面關于線性表的敘述錯誤的是( D )。A、 線性表采用順序存儲必須占用一片連續(xù)的存儲空間B、 線性表采用鏈式存儲不必占用一片連續(xù)的存儲空間C、 線性表采用鏈式存儲便于插入和刪除操作的實現(xiàn)D、 線性表采用順序存儲便于插入和刪除操作的實現(xiàn)2設哈夫曼樹中的葉子結點總數(shù)為m,若用二叉鏈表作為存儲結構,則該哈夫曼樹中總共有( B )個空指針域。A、 2m-1B、 2mC、 2m+1D、 4m3設順序循環(huán)隊列Q0:M-1的頭指針和尾指針分別為F和R,頭指針F總是指向隊頭元素的前一位置,尾指針R總是指向隊尾元素的當前位置,則該循環(huán)隊列中的元素個數(shù)為( C )。A、 R-FB、 F-R

2、C、(R-F+M)MD、(F-R+M)M4設某棵二叉樹的中序遍歷序列為ABCD,前序遍歷序列為CABD,則后序遍歷該二叉樹得到序列為(A)。A、 BADCB、 BCDAC、 CDABD、CBDA5設某完全無向圖中有n個頂點,則該完全無向圖中有( A )條邊。A、 n(n-1)/2B、 n(n-1)C、 n2 D、 n2-16設某數(shù)據(jù)結構的二元組形式表示為A=(D,R),D=01,02,03,04,05,06,07,08,09,R=r,r=<01,02>,<01,03>,<01,04>,<02,05>,<02,06>,<03,07

3、>,<03,08>,<03,09>,則數(shù)據(jù)結構A是( B )。A、線性結構B、 樹型結構C、 物理結構D、圖型結構7下面程序的時間復雜為( B )for(i=1,s=0; i<=n; i+) t=1;for(j=1;j<=i;j+) t=t*j;s=s+t;A、 O(n)B、 O(n2)C、 O(n3)D、 O(n4)8設指針變量p指向單鏈表中結點A,若刪除單鏈表中結點A,則需要修改指針的操作序列為( A )。A、q=p->next;p->data=q->data;p->next=q->next;free(q);B、q=p

4、->next;q->data=p->data;p->next=q->next;free(q);C、q=p->next;p->next=q->next;free(q);D、q=p->next;p->data=q->data;free(q);9設有n個待排序的記錄關鍵字,則在堆排序中需要( A )個輔助記錄單元。A、 1B、 nC、 nlog2nD、 n210設一組初始關鍵字記錄關鍵字為(20,15,14,18,21,36,40,10),則以20為基準記錄的一趟快速排序結束后的結果為( A )。A、 10,15,14,18,20,3

5、6,40,21B、 10,15,14,18,20,40,36,21C、 10,15,14,20,18,40,36,2lD、 15,10,14,18,20,36,40,21二、填空題1. 為了能有效地應用HASH查找技術,必須解決的兩個問題是(構造一個好的HASH函數(shù))和(確定解決沖突的方法)。2. 下面程序段的功能實現(xiàn)數(shù)據(jù)x進棧,要求在括號處填上正確的語句。typedef struct int s100; int top; sqstack;void push(sqstack &stack,int x)if (stack.top=m-1) printf(“overflow”);else

6、( stack.sstack.top=x );( stack.top+) ;3. 中序遍歷二叉排序樹所得到的序列是(有序)序列(填有序或無序)。4. 快速排序的最壞時間復雜度為( O(n2)),平均時間復雜度為( O(nlog2n))。5. 設某棵二叉樹中度數(shù)為0的結點數(shù)為N0,度數(shù)為1的結點數(shù)為N1,則該二叉樹中度數(shù)為2的結點數(shù)為( N0-1);若采用二叉鏈表作為該二叉樹的存儲結構,則該二叉樹中共有(2N0+N1)個空指針域。6. 設有向圖G中有n個頂點e條有向邊,所有的頂點入度數(shù)之和為d,則e和d的關系為(e=d)。7. (中序)遍歷二叉排序樹中的結點可以得到一個遞增的關鍵字序列(填先序、

7、中序或后序)。8. 設查找表中有100個元素,如果用二分法查找方法查找數(shù)據(jù)元素X,則最多需要比較(7)次就可以斷定數(shù)據(jù)元素X是否在查找表中。9. 不論是順序存儲結構的棧還是鏈式存儲結構的棧,其入棧和出棧操作的時間復雜度均為( O(1))。10. 設有n個結點的完全二叉樹,如果按照從自上到下、從左到右從1開始順序編號,則第i個結點的雙親結點編號為( i/2),右孩子結點的編號為(2i+1)。三、應用題1 設一組初始記錄關鍵字序列為(45,80,48,40,22,78),則分別給出第4趟簡單選擇排序和第4趟直接插入排序后的結果。參考答案:(22,40,45,48,80,78),(40,45,48,

8、80,22,78)2 設指針變量p指向雙向鏈表中結點A,指針變量q指向被插入結點B,要求給出在結點A的后面插入結點B的操作序列(設雙向鏈表中結點的兩個指針域分別為llink和rlink)。參考答案:q->llink=p; q->rlink=p->rlink; p->rlink->llink=q; p->rlink=q;3 設一組有序的記錄關鍵字序列為(13,18,24,35,47,50,62,83,90),查找方法用二分查找,要求計算出查找關鍵字62時的比較次數(shù)并計算出查找成功時的平均查找長度。參考答案:2, ASL=(1*1+2*2+3*4+4*2)=25

9、/94 設一棵樹T中邊的集合為(A,B),(A,C),(A,D),(B,E),(C,F(xiàn)),(C,G),要求用孩子兄弟表示法(二叉鏈表)表示出該樹的存儲結構并將該樹轉化成對應的二叉樹。參考答案:樹的鏈式存儲結構 二叉樹5已知待散列的線性表為(36,15,40,63,22),散列用的一維地址空間為0.6,假定選用的散列函數(shù)是H(K)= K mod 7,若發(fā)生沖突采用線性探查法處理,試:(1)計算出每一個元素的散列地址并在下圖中填寫出散列表: 0 1 2 3 4 5 6(2)求出在查找每一個元素概率相等情況下的平均查找長度。參考答案:H(36)=36 mod 7=1; H(22)=(1+1) mod

10、 7=2; .沖突H(15)=15 mod 7=1;.沖突 H2(22)=(2+1) mod 7=3; H(15)=(1+1) mod 7=2;H(40)=40 mod 7=5;H(63)=63 mod 7=0;H(22)=22 mod 7=1; .沖突(1) 0 1 2 3 4 5 66336152240(2)ASL=5 設有無向圖G,要求給出用普里姆算法構造最小生成樹所走過的邊的集合。參考答案:E=(1,3),(1,2),(3,5),(5,6),(6,4)四、算法設計題1 設有一組初始記錄關鍵字序列(K1,K2,Kn),要求設計一個算法能夠在O(n)的時間復雜度內(nèi)將線性表劃分成兩部分,其中

11、左半部分的每個關鍵字均小于Ki,右半部分的每個關鍵字均大于等于Ki。參考答案: void quickpass(int r, int s, int t) int i=s, j=t, x=rs; while(i<j)while (i<j && rj>x) j=j-1; if (i<j) ri=rj;i=i+1; while (i<j && ri<x) i=i+1; if (i<j) rj=ri;j=j-1; ri=x;2. 設有兩個集合A和集合B,要求設計生成集合C=AB的算法,其中集合A、B和C用鏈式存儲結構表示。參考答案

12、: typedef struct node int data; struct node *next;lklist;void intersection(lklist *ha,lklist *hb,lklist *&hc)lklist *p,*q,*t;for(p=ha,hc=0;p!=0;p=p->next) for(q=hb;q!=0;q=q->next) if (q->data=p->data) break;if(q!=0) t=(lklist *)malloc(sizeof(lklist); t->data=p->data;t->next=

13、hc; hc=t;復習(二)一、選擇題1設一維數(shù)組中有n個數(shù)組元素,則讀取第i個數(shù)組元素的平均時間復雜度為( C )。A、 O(n)B、 O(nlog2n)C、 O(1)D、 O(n2)2設一棵二叉樹的深度為k,則該二叉樹中最多有( D )個結點。A、 2k-1B、 2kC、 2k-1D、 2k-13設某無向圖中有n個頂點e條邊,則該無向圖中所有頂點的入度之和為( D )。A、 nB、 eC、 2nD、 2e4在二叉排序樹中插入一個結點的時間復雜度為( B )。A、 O(1)B、 O(n)C、 O(log2n)D、 O(n2)5設某有向圖的鄰接表中有n個表頭結點和m個表結點,則該圖中有( C

14、)條有向邊。A、 nB、 n-1C、 mD、 m-16設一組初始記錄關鍵字序列為(345,253,674,924,627),則用基數(shù)排序需要進行( A )趟的分配和回收才能使得初始關鍵字序列變成有序序列。A、 3B、 4C、 5D、 87設用鏈表作為棧的存儲結構則退棧操作( B )。A、 必須判別棧是否為滿B、 必須判別棧是否為空C、判別棧元素的類型D、 對棧不作任何判別8下列四種排序中( A )的空間復雜度最大。A、 快速排序B、 冒泡排序C、 希爾排序D、 堆9設某二叉樹中度數(shù)為0的結點數(shù)為N0,度數(shù)為1的結點數(shù)為Nl,度數(shù)為2的結點數(shù)為N2,則下列等式成立的是( C )。A、 N0=N1

15、+1B、 N0=Nl+N2C、 N0=N2+1D、 N0=2N1+l10.設有序順序表中有n個數(shù)據(jù)元素,則利用二分查找法查找數(shù)據(jù)元素X的最多比較次數(shù)不超過( A )。A、 log2n+1B、 log2n-1C、 log2nD、 log2(n+1)二、填空題1 設有n個無序的記錄關鍵字,則直接插入排序的時間復雜度為( O(n2)),快速排序的平均時間復雜度為(O(nlog2n))。2 設指針變量p指向雙向循環(huán)鏈表中的結點X,則刪除結點X需要執(zhí)行的語句序列為( p>llink->rlink=p->rlink; p->rlink->llink=p->rlink )

16、(設結點中的兩個指針域分別為llink和rlink)。3 根據(jù)初始關鍵字序列(19,22,01,38,10)建立的二叉排序樹的高度為(3)。4 深度為k的完全二叉樹中最少有(2k-1)個結點。5 設初始記錄關鍵字序列為(K1,K2,Kn),則用篩選法思想建堆必須從第( n/2)個元素開始進行篩選。6 設哈夫曼樹中共有99個結點,則該樹中有(50)個葉子結點;若采用二叉鏈表作為存儲結構,則該樹中有(51)個空指針域。7 設有一個順序循環(huán)隊列中有M個存儲單元,則該循環(huán)隊列中最多能夠存儲( m-1)個隊列元素;當前實際存儲((R-F+M)%M )個隊列元素(設頭指針F指向當前隊頭元素的前一個位置,尾

17、指針指向當前隊尾元素的位置)。8 設順序線性表中有n個數(shù)據(jù)元素,則第i個位置上插入一個數(shù)據(jù)元素需要移動表中( n+1-i )個數(shù)據(jù)元素;刪除第i個位置上的數(shù)據(jù)元素需要移動表中( n-i )個元素。9 設一組初始記錄關鍵字序列為(20,18,22,16,30,19),則以20為中軸的一趟快速排序結果為( (19,18,16,20,30,22) )。10 設一組初始記錄關鍵字序列為(20,18,22,16,30,19),則根據(jù)這些初始關鍵字序列建成的初始堆為((16,18,19,20,32,22))。三、計算題1、畫出廣義表LS=( ) , (e) , (a , (b , c , d )的頭尾鏈表

18、存儲結構。參考答案:2、下圖所示的森林:(1) 求樹(a)的先根序列和后根序列; (2) 求森林先序序列和中序序列;(3)將此森林轉換為相應的二叉樹;參考答案:(1) ABCDEF; BDEFCA;(2) ABCDEFGHIJK; BDEFCAIJKHG(3)轉換為相應的二叉樹四、算法設計題1 設單鏈表中有僅三類字符的數(shù)據(jù)元素(大寫字母、數(shù)字和其它字符),要求利用原單鏈表中結點空間設計出三個單鏈表的算法,使每個單鏈表只包含同類字符。參考答案:typedef char datatype;typedef struct node datatype data; struct node *next;lk

19、list;void split(lklist *head,lklist *&ha,lklist *&hb,lklist *&hc) lklist *p; ha=0,hb=0,hc=0; for(p=head;p!=0;p=head) head=p->next; p->next=0; if (p->data>='A' && p->data<='Z') p->next=ha; ha=p; else if (p->data>='0' && p-

20、>data<='9') p->next=hb; hb=p; else p->next=hc; hc=p;2. 設計在鏈式存儲結構上交換二叉樹中所有結點左右子樹的算法。參考答案:typedef struct node int data; struct node *lchild,*rchild; bitree;void swapbitree(bitree *bt) bitree *p; if(bt=0) return;swapbitree(bt->lchild); swapbitree(bt->rchild);p=bt->lchild; b

21、t->lchild=bt->rchild; bt->rchild=p;3. 在鏈式存儲結構上建立一棵二叉排序樹。參考答案: #define n 10typedef struct nodeint key; struct node *lchild,*rchild;bitree;void bstinsert(bitree *&bt,int key) if (bt=0)bt=(bitree *)malloc(sizeof(bitree); bt->key=key;bt->lchild=bt->rchild=0; else if (bt->key>

22、key) bstinsert(bt->lchild,key); else bstinsert(bt->rchild,key);void createbsttree(bitree *&bt) int i; for(i=1;i<=n;i+) bstinsert(bt,random(100); 4、 設計將所有奇數(shù)移到所有偶數(shù)之前的算法。參考答案:void quickpass(int r, int s, int t) int i=s,j=t,x=rs; while(i<j) while (i<j && rj%2=0) j=j-1; if (i&l

23、t;j) ri=rj;i=i+1;數(shù)據(jù)結構試卷(三)一、選擇題1數(shù)據(jù)的最小單位是( A )。A、 數(shù)據(jù)項B、 數(shù)據(jù)類型C、 數(shù)據(jù)元素D、 數(shù)據(jù)變量2設一組初始記錄關鍵字序列為(50,40,95,20,15,70,60,45),則以增量d=4的一趟希爾排序結束后前4條記錄關鍵字為( B )。A、 40,50,20,95B、 15,40,60,20C、 15,20,40,45D、 45,40,15,203設一組初始記錄關鍵字序列為(25,50,15,35,80,85,20,40,36,70),其中含有5個長度為2的有序子表,則用歸并排序的方法對該記錄關鍵字序列進行一趟歸并后的結果為( A )。A、

24、 15,25,35,50,20,40,80,85,36,70B、15,25,35,50,80,20,85,40,70,36C、15,25,35,50,80,85,20,36,40,70D、15,25,35,50,80,20,36,40,70,854函數(shù)substr(“DATASTRUCTURE”,5,9)的返回值為( A )。A、 “STRUCTURE”B、 “DATA”C、 “ASTRUCTUR”D、 “DATASTRUCTURE”5設一個有序的單鏈表中有n個結點,現(xiàn)要求插入一個新結點后使得單鏈表仍然保持有序,則該操作的時間復雜度為( D )。A、 O(log2n)B、 O(1)C、 O(n

25、2)D、 O(n)6設一棵m叉樹中度數(shù)為0的結點數(shù)為N0,度數(shù)為1的結點數(shù)為Nl,度數(shù)為m的結點數(shù)為Nm,則N0=( B )。A、 Nl+N2+NmB、 l+N2+2N3+3N4+(m-1)NmC、 N2+2N3+3N4+(m-1)NmD、 2Nl+3N2+(m+1)Nm7設有序表中有1000個元素,則用二分查找查找元素X最多需要比較( B )次。A、 25B、 10C、 7D、 18設連通圖G中的邊集E=(a,b),(a,e),(a,c),(b,e),(e,d),(d,f),(f,c),則從頂點a出發(fā)可以得到一種深度優(yōu)先遍歷的頂點序列為( B )。A、 abedfcB、 acfebdC、 a

26、ebdfcD、 aedfcb9設輸入序列是1、2、3、n,經(jīng)過棧的作用后輸出序列的第一個元素是n,則輸出序列中第i個輸出元素是( C )。A、 n-iB、 n-1-iC、 n+1-iD、不能確定10 設一組初始記錄關鍵字序列為(45,80,55,40,42,85),則以第一個記錄關鍵字45為基準而得到一趟快速排序的結果是( C )。A、 40,42,45,55,80,83B、 42,40,45,80,85,88C、 42,40,45,55,80,85D、 42,40,45,85,55,80二、填空題1. 設有一個順序共享棧S0:n-1,其中第一個棧項指針top1的初值為-1,第二個棧頂指針to

27、p2的初值為n,則判斷共享棧滿的條件是( top1+1=top2)。2. 在圖的鄰接表中用順序存儲結構存儲表頭結點的優(yōu)點是(可以隨機訪問到任一個頂點的簡單鏈表)。3. 設有一個n階的下三角矩陣A,如果按照行的順序將下三角矩陣中的元素(包括對角線上元素)存放在n(n+1)個連續(xù)的存儲單元中,則Aij與A00之間有(i(i+1)/2+j-1)個數(shù)據(jù)元素。4. 棧的插入和刪除只能在棧的棧頂進行,后進棧的元素必定先出棧,所以又把棧稱為( FILO )表;隊列的插入和刪除運算分別在隊列的兩端進行,先進隊列的元素必定先出隊列,所以又把隊列稱為( FIFO )表。5. 設一棵完全二叉樹的順序存儲結構中存儲數(shù)

28、據(jù)元素為ABCDEF,則該二叉樹的前序遍歷序列為( ABDECF ),中序遍歷序列為( DBEAFC ),后序遍歷序列為( DEBFCA)。6. 設一棵完全二叉樹有128個結點,則該完全二叉樹的深度為(8),有(64)個葉子結點。7. 設有向圖G的存儲結構用鄰接矩陣A來表示,則A中第i行中所有非零元素個數(shù)之和等于頂點i的(出度),第i列中所有非零元素個數(shù)之和等于頂點i的(入度)。8. 設一組初始記錄關鍵字序列(k1,k2,kn)是堆,則對i=1,2,n/2而言滿足的條件為( ki<=k2i && ki<=k2i+1)。9. 下面程序段的功能是實現(xiàn)冒泡排序算法,請在下

29、劃線處填上正確的語句。void bubble(int rn)for(i=1;i<=n-1; i+)for(exchange=0,j=0; j< ( n-i ) ;j+) if (rj>rj+1)temp=rj+1; ( rj+1=rj );rj=temp;exchange=1;if (exchange=0) return;三、應用題1. 設某棵二叉樹的中序遍歷序列為DBEAC,前序遍歷序列為ABDEC,要求給出該二叉樹的的后序遍歷序列。參考答案:DEBCA2. 設無向圖G(如右圖所示),給出該圖的最小生成樹上邊的集合并計算最小生成樹各邊上的權值之和。參考答案:E=(1,5),(5,2),(5,3),(3,4),W=103. 設一組初始記錄關鍵字序列為(15,17,1

溫馨提示

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

評論

0/150

提交評論