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

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

資料結構試卷(五)

一、選擇題(20分)

1.資料的最小單位是(  )。

   (A)資料項       (B) 資料型別    (C) 資料元素    (D) 資料變數

2.設一組初始記錄關鍵字序列為(50,40,95,20,15,70,60,45),則以增量d=4的一趟希爾排序結束後前4條記錄關鍵字為(   )。

   (A)40,50,20,95               (B)15,40,60,20

   (C)15,20,40,45               (D)45,40,15,20

3.設一組初始記錄關鍵字序列為(25,50,15,35,80,85,20,40,36,70),其中含有5個長度為2的有序子表,則用歸併排序的方法對該記錄關鍵字序列進行一趟歸併後的結果為(   )。

(A) 15,25,35,50,20,40,80,85,36,70

(B) 15,25,35,50,80,20,85,40,70,36

(C) 15,25,35,50,80,85,20,36,40,70

(D) 15,25,35,50,80,20,36,40,70,85

4.函式substr(“DATASTRUCTURE”,5,9)的返回值為( )。

   (A)“STRUCTURE”                    (B) “DATA”

   (C)“ASTRUCTUR”                                (D) “DATASTRUCTURE”

5.設一個有序的單鏈表中有n個結點,現要求插入一個新結點後使得單鏈表仍然保持有序,則該操作的時間複雜度為(  )。

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

6.設一棵m叉樹中度數為0的結點數為N0,度數為1的結點數為Nl,……,度數為m的結點數為Nm,則N0=(  )。

   (A)Nl+N2+……+Nm                 (B) l+N2+2N3+3N4+……+(m-1)Nm

   (C)N2+2N3+3N4+……+(m-1)Nm       (D)2Nl+3N2+……+(m+1)Nm

7.設有序表中有1000個元素,則用二分查詢查詢元素X最多需要比較(  )次。

   (A)25           (B) 10          (C) 7                   (D) 1

8.設連通圖G中的邊集E={(a,b),(a,e),(a,c),(b,e),(e,d),(d,f),(f,c)},則從頂點a出發可以得到一種深度優先遍歷的頂點序列為(  )。

   (A)abedfc       (B) acfebd      (C) aebdfc          (D) aedfcb

9.設輸入序列是1、2、3、……、n,經過棧的作用後輸出序列的第一個元素是n,則輸出序列中第i個輸出元素是( )。

   (A)n-i          (B) n-1-i       (C) n+1-i           (D) 不能確定

10 設一組初始記錄關鍵字序列為(45,80,55,40,42,85),則以第一個記錄關鍵字45為基準而得到一趟快速排序的結果是(  )。

   (A)40,42,45,55,80,83       (B) 42,40,45,80,85,88

   (C)42,40,45,55,80,85       (D) 42,40,45,85,55,80

 

二、填空題(共20分)

1.  設有一個順序共享棧S[0:n-1],其中第一個棧項指標top1的初值為-1,第二個棧頂指標top2的初值為n,則判斷共享棧滿的條件是____________________。

2.  在圖的鄰接表中用順序儲存結構儲存表頭結點的優點是____________________。

3.  設有一個n階的下三角矩陣A,如果按照行的順序將下三角矩陣中的元素(包括對角線上元素)存放在n(n+1)個連續的儲存單元中,則A[i][j]與A[0][0]之間有_______個數據元素。

4.  棧的插入和刪除只能在棧的棧頂進行,後進棧的元素必定先出棧,所以又把棧稱為__________表;佇列的插入和刪除運算分別在佇列的兩端進行,先進佇列的元素必定先出佇列,所以又把佇列稱為_________表。

5.  設一棵完全二叉樹的順序儲存結構中儲存資料元素為ABCDEF,則該二叉樹的前序遍歷序列為___________,中序遍歷序列為___________,後序遍歷序列為___________。

6.  設一棵完全二叉樹有128個結點,則該完全二叉樹的深度為________,有__________個葉子結點。

7.  設有向圖G的儲存結構用鄰接矩陣A來表示,則A中第i行中所有非零元素個數之和等於頂點i的________,第i列中所有非零元素個數之和等於頂點i的__________。

8.  設一組初始記錄關鍵字序列(k1,k2,……,kn)是堆,則對i=1,2,…,n/2而言滿足的條件為_______________________________。

9.  下面程式段的功能是實現氣泡排序演算法,請在下劃線處填上正確的語句。

void bubble(int  r[n])

{

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

{

for(exchange=0,j=0; j<_____________;j++)

if (r[j]>r[j+1]){temp=r[j+1];______________;r[j]=temp;exchange=1;}

if (exchange==0) return;

}

}

10.  下面程式段的功能是實現二分查詢演算法,請在下劃線處填上正確的語句。

struct record{int key;int others;};

int bisearch(structrecord r[ ], int k)

{

  int low=0,mid,high=n-1;

  while(low<=high)

{

    ________________________________;

    if(r[mid].key==k) return(mid+1); else if(____________)high=mid-1;else low=mid+1;

  }

  return(0);

}

 

 

三、應用題(32分)

1.  設某棵二叉樹的中序遍歷序列為DBEAC,前序遍歷序列為ABDEC,要求給出該二叉樹的的後序遍歷序列。

2.  設無向圖G(如右圖所示),給出該圖的最小生成樹上邊的集合並計算最小生成樹各邊上的權值之和。

3.  設一組初始記錄關鍵字序列為(15,17,18,22,35,51,60),要求計算出成功查詢時的平均查詢長度。

4.  設散列表的長度為8,雜湊函式H(k)=k mod 7,初始記錄關鍵字序列為(25,31,8,27,13,68),要求分別計算出用線性探測法和鏈地址法作為解決衝突方法的平均查詢長度。

 

四、演算法設計題(28分)

1. 設計判斷兩個二叉樹是否相同的演算法。

2. 設計兩個有序單鏈表的合併排序演算法。

 

 

參考答案

 

一、選擇題

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

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

 

二、填空題

1.        top1+1=top2

2.        可以隨機訪問到任一個頂點的簡單鏈表

3.        i(i+1)/2+j-1

4.        FILO,FIFO

5.        ABDECF,DBEAFC,DEBFCA

6.        8,64

7.        出度,入度

8.        ki<=k2i&& ki<=k2i+1

9.  n-i,r[j+1]=r[j]

10.  mid=(low+high)/2,r[mid].key>k

 

三、應用題

1.        DEBCA

2.        E={(1,5),(5,2),(5,3),(3,4)},W=10

3.        ASL=(1*1+2*2+3*4)/7=17/7

4.        ASL1=7/6,ASL2=4/3

四、演算法設計題

1.  設計判斷兩個二叉樹是否相同的演算法。

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

intjudgebitree(bitree *bt1,bitree *bt2)

{

  if (bt1==0 && bt2==0) return(1);

  else if (bt1==0 || bt2==0||bt1->data!=bt2->data) return(0);

  elsereturn(judgebitree(bt1->lchild,bt2->lchild)*judgebitree(bt1->rchild,bt2->rchild));

}

2.  設計兩個有序單鏈表的合併排序演算法。

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;

}