1. 程式人生 > >資料結構複習題(三)

資料結構複習題(三)

一、選擇題(每題1分,共20分)

1.設某資料結構的二元組形式表示為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>,<03,08>,<03,09>},則資料結構A是(  )。

   (A)線性結構     (B) 樹型結構    (C) 物理結構    (D) 圖型結構

2.下面程式的時間複雜為(  )

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)

3.設指標變數p指向單鏈表中結點A,若刪除單鏈表中結點A,則需要修改指標的操作序列為(  )。

   (A)q=p->next;p->data=q->data;p->next=q->next;free(q);

(B) q=p->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);

4.設有n個待排序的記錄關鍵字,則在堆排序中需要(  )個輔助記錄單元。

   (A)1            (B) n           (C) nlog2n      (D)n2

5.設一組初始關鍵字記錄關鍵字為(20,15,14,18,21,36,40,10),則以20為基準記錄的一趟快速排序結束後的結果為(  )。

(A) 10,15,14,18,20,36,40,21

   (B)10,15,14,18,20,40,36,21

   (C)10,15,14,20,18,40,36,2l

   (D)15,10,14,18,20,36,40,21

6.設二叉排序樹中有n個結點,則在二叉排序樹的平均平均查詢長度為(  )。

   (A)O(1)         (B) O(log2n)    (C)             (D)O(n2)

7.設無向圖G中有n個頂點e條邊,則其對應的鄰接表中的表頭結點和表結點的個數分別為( )。

   (A)n,e         (B) e,n        (C) 2n,e       (D) n,2e

8. 設某強連通圖中有n個頂點,則該強連通圖中至少有(  )條邊。

   (A)n(n-1)       (B) n+1         (C) n           (D)n(n+1)

9.設有5000個待排序的記錄關鍵字,如果需要用最快的方法選出其中最小的10個記錄關鍵字,則用下列(  )方法可以達到此目的。

   (A)快速排序     (B) 堆排序      (C) 歸併排序    (D) 插入排序

10.下列四種排序中(  )的空間複雜度最大。

   (A)插入排序     (B) 氣泡排序    (C) 堆排序      (D) 歸併排序

二、填空殖(每空1分 共20分)

1.  資料的物理結構主要包括_____________和______________兩種情況。

2.  設一棵完全二叉樹中有500個結點,則該二叉樹的深度為__________;若用二叉連結串列作為該完全二叉樹的儲存結構,則共有___________個空指標域。

3.  設輸入序列為1、2、3,則經過棧的作用後可以得到___________種不同的輸出序列。

4.  設有向圖G用鄰接矩陣A[n][n]作為儲存結構,則該鄰接矩陣中第i行上所有元素之和等於頂點i的________,第i列上所有元素之和等於頂點i的________。

5.  設哈夫曼樹中共有n個結點,則該哈夫曼樹中有________個度數為1的結點。

6.  設有向圖G中有n個頂點e條有向邊,所有的頂點入度數之和為d,則e和d的關係為_________。

7.  __________遍歷二叉排序樹中的結點可以得到一個遞增的關鍵字序列(填先序、中序或後序)。

8.  設查詢表中有100個元素,如果用二分法查詢方法查詢資料元素X,則最多需要比較________次就可以斷定資料元素X是否在查詢表中。

9.   不論是順序儲存結構的棧還是鏈式儲存結構的棧,其入棧和出棧操作的時間複雜度均為____________。

10.  設有n個結點的完全二叉樹,如果按照從自上到下、從左到右從1開始順序編號,則第i個結點的雙親結點編號為____________,右孩子結點的編號為___________。

11.    設一組初始記錄關鍵字為(72,73,71,23,94,16,5),則以記錄關鍵字72為基準的一趟快速排序結果為___________________________。

12.  設有向圖G中有向邊的集合E={<1,2>,<2,3>,<1,4>,<4,2>,<4,3>},則該圖的一種拓撲序列為____________________。

13.  下列演算法實現在順序散列表中查詢值為x的關鍵字,請在下劃線處填上正確的語句。

structrecord{int key; int others;};

inthashsqsearch(struct record hashtable[ ],int k)

{

inti,j;  j=i=k % p;

while(hashtable[j].key!=k&&hashtable[j].flag!=0){j=(____) %m; if (i==j)return(-1);}

  if (_______________________ ) return(j); elsereturn(-1);

}

14.  下列演算法實現在二叉排序樹上查詢關鍵值k,請在下劃線處填上正確的語句。

typedefstruct node{int key; struct node *lchild; struct node *rchild;}bitree;

bitree  *bstsearch(bitree *t, int  k)

{    

if (t==0 ) return(0);else  while (t!=0)

if (t->key==k)_____________; elseif (t->key>k) t=t->lchild; else_____________;

}

三、計算題(每題10分,共30分)

1.已知二叉樹的前序遍歷序列是AEFBGCDHIKJ,中序遍歷序列是EFAGBCHKIJD,畫出此二叉樹,並畫出它的後序線索二叉樹。

2.已知待雜湊的線性表為(36,15,40,63,22),雜湊用的一維地址空間為[0..6],假定選用的雜湊函式是H(K)= K mod 7,若發生衝突採用線性探查法處理,試:

(1)計算出每一個元素的雜湊地址並在下圖中填寫出散列表:

 `            0         1         2         3         4         5         6

       

(2)求出在查詢每一個元素概率相等情況下的平均查詢長度。

3.已知序列(10,18,4,3,6,12,1,9,18,8)請用快速排序寫出每一趟排序的結果。

四、演算法設計題(每題15分,共30分)

1. 設計在單鏈表中刪除值相同的多餘結點的演算法。

2. 設計一個求結點x在二叉樹中的雙親結點演算法。

參考答案

一、選擇題

1.B     2.B     3.A     4.A     5.A

6.B     7.D     8.C     9.B     10.D

第3小題分析:首先用指標變數q指向結點A的後繼結點B,然後將結點B的值複製到結點A中,最後刪除結點B。

第9小題分析:9快速排序、歸併排序和插入排序必須等到整個排序結束後才能夠求出最小的10個數,而堆排序只需要在初始堆的基礎上再進行10次篩選即可,每次篩選的時間複雜度為O(log2n)。

二、填空題

1.   順序儲存結構、鏈式儲存結構

2.   9,501

3.   5

4.   出度,入度

5.   0

6.   e=d

7.   中序

8.   7

9.   O(1)

10.  i/2,2i+1

11.  (5,16,71,23,72,94,73)

12.  (1,4,3,2)

13.  j+1,hashtable[j].key==k

14.  return(t),t=t->rchild

第8小題分析:二分查詢的過程可以用一棵二叉樹來描述,該二叉樹稱為二叉判定樹。在有序表上進行二分查詢時的查詢長度不超過二叉判定樹的高度1+log2n。

三、計算題

1.

2、H(36)=36 mod 7=1;                 H(22)=(1+1)mod 7=2; ….衝突

H(15)=15 mod7=1;….衝突           H2(22)=(2+1) mod7=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     6

       
 

63

 
 

36

 
 

15

 
 

22

 
 

40

 

(2)ASL=                             

3、(8,9,4,3,6,1),10,(12,18,18)

  (1,6,4,3),8,(9),10,12,(18,18)

  1,(3,4,6),8,9,10,12,18,(18)

  1,3,(4,6),8,9,10,12,18,18

  1,3, 4,6,8,9,10,12,18,18

四、演算法設計題

1.  設計在單鏈表中刪除值相同的多餘結點的演算法。

typedefint datatype;

typedefstruct node {datatype data; struct node *next;}lklist;

voiddelredundant(lklist *&head)

{

   lklist *p,*q,*s;

   for(p=head;p!=0;p=p->next)

   {

     for(q=p->next,s=q;q!=0; )

     if (q->data==p->data){s->next=q->next; free(q);q=s->next;}

     else {s=q,q=q->next;}

   }

}

2.  設計一個求結點x在二叉樹中的雙親結點演算法。

typedefstruct node {datatype data; struct node *lchild,*rchild;} bitree;

bitree*q[20]; int r=0,f=0,flag=0;

voidpreorder(bitree *bt, char x)

{

  if (bt!=0 && flag==0)

if(bt->data==x) { flag=1; return;}

else{r=(r+1)% 20; q[r]=bt; preorder(bt->lchild,x); preorder(bt->rchild,x); }

}

voidparent(bitree *bt,char x)

{

   int i;

   preorder(bt,x);

   for(i=f+1; i<=r; i++) if(q[i]->lchild->data==x || q[i]->rchild->data) break;

   if (flag==0) printf("not foundx\n");

   else if (i<=r)printf("%c",bt->data); else printf("not parent");

}