1. 程式人生 > >北京理工大學-資料結構期末考試試題(十)

北京理工大學-資料結構期末考試試題(十)

資料結構試卷(十)

一、選擇題(24分)

1.下列程式段的時間複雜度為(  )。

i=0,s=0; while (s<n) {s=s+i;i++;}

   (A)O(n1/2)        (B) O(n1/3)      (C) O(n)        (D)O(n2)

2.設某連結串列中最常用的操作是在連結串列的尾部插入或刪除元素,則選用下列(  )儲存方式最節省運算時間。

   (A)單向連結串列                     (B)單向迴圈連結串列

(C) 雙向連結串列                     (D)雙向迴圈連結串列

3.設指標q指向單鏈表中結點A,指標p指向單鏈表中結點A的後繼結點B,指標s指向被插入的結點X,則在結點A和結點B插入結點X的操作序列為(  )。

(A) s->next=p->next;p->next=-s; (B) q->next=s; s->next=p;

(C) p->next=s->next;s->next=p; (D) p->next=s;s->next=q;

4.設輸入序列為1、2、3、4、5、6,則通過棧的作用後可以得到的輸出序列為(  )。

(A) 5,3,4,6,1,2             (B)3,2,5,6,4,1

(C) 3,1,2,5,4,6             (D)1,5,4,6,2,3

5.設有一個10階的下三角矩陣A(包括對角線),按照從上到下、從左到右的順序儲存到連續的55個儲存單元中,每個陣列元素佔1個位元組的儲存空間,則A[5][4]地址與A[0][0]的地址之差為(  )。

   (A)10           (B) 19          (C) 28          (D) 55

6.設一棵m叉樹中有N1個度數為1的結點,N2個度數為2的結點,……,Nm個度數為m的結點,則該樹中共有(  )個葉子結點。

   (A)                                 (B)        (C)        (D)    

7. 二叉排序樹中左子樹上所有結點的值均(  )根結點的值。

   (A)<            (B) >           (C) =           (D)!=

8. 設一組權值集合W=(15,3,14,2,6,9,16,17),要求根據這些權值集合構造一棵哈夫曼樹,則這棵哈夫曼樹的帶權路徑長度為(  )。

   (A)129          (B) 219         (C) 189         (D)229

9. 設有n個關鍵字具有相同的Hash函式值,則用線性探測法把這n個關鍵字對映到HASH表中需要做(  )次線性探測。

   (A)n2            (B) n(n+1)      (C) n(n+1)/2    (D) n(n-1)/2

10.設某棵二叉樹中只有度數為0和度數為2的結點且度數為0的結點數為n,則這棵二叉中共有(  )個結點。

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

11.設一組初始記錄關鍵字的長度為8,則最多經過(  )趟插入排序可以得到有序序列。

   (A)6            (B) 7           (C) 8           (D) 9

12.設一組初始記錄關鍵字序列為(Q,H,C,Y,P,A,M,S,R,D,F,X),則按字母升序的第一趟氣泡排序結束後的結果是(   )。

(A)  F,H,C,D,P,A,M,Q,R,S,Y,X

(B)  P,A,C,S,Q,D,F,X,R,H,M,Y

(C)  A,D,C,R,F,Q,M,S,Y,P,H,X

(D)  H,C,Q,P,A,M,S,R,D,F,X,Y

 

 

二、填空題(48分,其中最後兩小題各6分)

1.  設需要對5個不同的記錄關鍵字進行排序,則至少需要比較_____________次,至多需要比較_____________次。

2.  快速排序演算法的平均時間複雜度為____________,直接插入排序演算法的平均時間複雜度為___________。

3.  設二叉排序樹的高度為h,則在該樹中查詢關鍵字key最多需要比較_________次。

4.  設在長度為20的有序表中進行二分查詢,則比較一次查詢成功的結點數有_________個,比較兩次查詢成功有結點數有_________個。

5.  設一棵m叉樹脂的結點數為n,用多重連結串列表示其儲存結構,則該樹中有_________個空指標域。

6.  設指標變數p指向單鏈表中結點A,則刪除結點A的語句序列為:

q=p->next;p->data=q->data;p->next=___________;feee(q);

7.   資料結構從邏輯上劃分為三種基本型別:___________、__________和___________。

8.  設無向圖G中有n個頂點e條邊,則用鄰接矩陣作為圖的儲存結構進行深度優先或廣度優先遍歷時的時間複雜度為_________;用鄰接表作為圖的儲存結構進行深度優先或廣度優先遍歷的時間複雜度為_________。

9.  設散列表的長度為8,雜湊函式H(k)=k % 7,用線性探測法解決衝突,則根據一組初始關鍵字序列(8,15,16,22,30,32)構造出的散列表的平均查詢長度是________。

10.  設一組初始關鍵字序列為(38,65,97,76,13,27,10),則第3趟氣泡排序結束後的結果為_____________________。

11.  設一組初始關鍵字序列為(38,65,97,76,13,27,10),則第3趟簡單選擇排序後的結果為______________________。

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

13.  下面程式段的功能是建立二叉樹的演算法,請在下劃線處填上正確的內容。

typedefstruct node{int data;struct node  *lchild;________________;}bitree;

void createbitree(bitree *&bt)

{

scanf(“%c”,&ch);

if(ch=='#') ___________;else

{ bt=(bitree*)malloc(sizeof(bitree));bt->data=ch; ________;createbitree(bt->rchild);}

}

14.    下面程式段的功能是利用從尾部插入的方法建立單鏈表的演算法,請在下劃線處填上正確的內容。

typedef structnode {int data; struct node *next;} lklist;

voidlklistcreate(_____________ *&head )

{

for(i=1;i<=n;i++)

{

p=(lklist*)malloc(sizeof(lklist));scanf(“%d”,&(p->data));p->next=0;

if(i==1)head=q=p;else{q->next=p;____________;}

}

}

 

三、演算法設計題(22分)

1.  設計在鏈式儲存結構上合併排序的演算法。

2.   設計在二叉排序樹上查詢結點X的演算法。

3.  設關鍵字序列(k1,k2,…,kn-1)是堆,設計演算法將關鍵字序列(k1,k2,…,kn-1,x)調整為堆。

 

參考答案

 

一、選擇題

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

7.A      8.D      9.D      10.C     11.B     12.D

 

二、填空題

1.        4,10

2.        O(nlog2n),O(n2)

3.        n

4.        1,2

5.        n(m-1)+1

6.        q->next

7.        線性結構,樹型結構,圖型結構

8.        O(n2), O(n+e)

9.        8/3

10.    (38,13,27,10,65,76,97)

11.    (10,13,27,76,65,97,38)

12.    124653

13.    struct node *rchild,bt=0,createbitree(bt->lchild)

14.    lklist,q=p

 

三、演算法設計題

1.  設計在鏈式儲存結構上合併排序的演算法。

voidmergelklist(lklist *ha,lklist *hb,lklist *&hc)

{

   lklist *s=hc=0;

   while(ha!=0 && hb!=0)

     if(ha->data<hb->data){if(s==0)hc=s=ha; else {s->next=ha; s=ha;};ha=ha->next;}

     else {if(s==0) hc=s=hb; else{s->next=hb; s=hb;};hb=hb->next;}

   if(ha==0) s->next=hb; else s->next=ha;

}

2.        設計在二叉排序樹上查詢結點X的演算法。

bitree*bstsearch1(bitree *t, int key)

{

  bitree *p=t;

  while(p!=0) if (p->key==key)return(p);else if (p->key>key)p=p->lchild; else p=p->rchild;

  return(0);

}

3.  設關鍵字序列(k1,k2,…,kn-1)是堆,設計演算法將關鍵字序列(k1,k2,…,kn-1,x)調整為堆。

void adjustheap(int r[ ],int n)

{

  int j=n,i=j/2,temp=r[j-1];

  while (i>=1) if(temp>=r[i-1])break; else{r[j-1]=r[i-1]; j=i; i=i/2;}

  r[j-1]=temp;

}