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

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

資料結構試卷(六)

一、選擇題(30分)

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

for(i=0; i<m; i++) for(j=0; j<t; j++) c[i][j]=0;

for(i=0; i<m; i++) for(j=0; j<t; j++) for(k=0; k<n; k++)c[i][j]=c[i][j]+a[i][k]*b[k][j];

   (A)O(m*n*t)     (B) O(m+n+t)    (C) O(m+n*t)    (D)O(m*t+n)

2.設順序線性表中有n個數據元素,則刪除表中第i個元素需要移動(  )個元素。

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

3.設F是由T1、T2和T3三棵樹組成的森林,與F對應的二叉樹為B,T1、T2和T3的結點數分別為N1、N2和N3,則二叉樹B的根結點的左子樹的結點數為(   )。

   (A) N1-1         (B) N2-1        (C) N2+N3       (D) N1+N3

4.利用直接插入排序法的思想建立一個有序線性表的時間複雜度為(  )。

  (A) O(n)         (B) O(nlog2

n)    (C) O(n2)       (D) O(1og2n)

5.設指標變數p指向雙向連結串列中結點A,指標變數s指向被插入的結點X,則在結點A的後面插入結點X的操作序列為( )。

     (A)p->right=s; s->left=p; p->right->left=s; s->right=p->right;

     (B) s->left=p;s->right=p->right;p->right=s; p->right->left=s;

     (C)p->right=s;p->right->left=s; s->left=p; s->right=p->right;

     (D) s->left=p;s->right=p->right;p->right->left=s; p->right=s;

6.下列各種排序演算法中平均時間複雜度為O(n2)是(   )。

   (A)快速排序     (B) 堆排序      (C) 歸併排序    (D) 氣泡排序

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

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

8.設散列表中有m個儲存單元,雜湊函式H(key)=key % p,則p最好選擇(  )。

   (A)小於等於m的最大奇數          (B) 小於等於m的最大素數

   (C)小於等於m的最大偶數         (D) 小於等於m的最大合數

9.設在一棵度數為3的樹中,度數為3的結點數有2個,度數為2的結點數有1個,度數為1的結點數有2個,那麼度數為0的結點數有(  )個。

   (A)4            (B) 5           (C) 6           (D) 7

10.設完全無向圖中有n個頂點,則該完全無向圖中有(  )條邊。

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

11.設順序表的長度為n,則順序查詢的平均比較次數為(  )。

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

12.設有序表中的元素為(13,18,24,35,47,50,62),則在其中利用二分法查詢值為24的元素需要經過(  )次比較。

   (A)1            (B) 2           (C) 3           (D) 4

13.設順序線性表的長度為30,分成5塊,每塊6個元素,如果採用分塊查詢,則其平均查詢長度為(  )。

   (A)6            (B) 11          (C) 5           (D) 6.5

14.設有向無環圖G中的有向邊集合E={<1,2>,<2,3>,<3,4>,<1,4>},則下列屬於該有向圖G的一種拓撲排序序列的是(  )。

   (A)1,2,3,4   (B)2,3,4,1  (C) 1,4,2,3  (D)1,2,4,3

15.設有一組初始記錄關鍵字序列為(34,76,45,18,26,54,92),則由這組記錄關鍵字生成的二叉排序樹的深度為(  )。

   (A)4            (B) 5           (C) 6           (D) 7

二、填空題(30分)

1.  設指標p指向單鏈表中結點A,指標s指向被插入的結點X,則在結點A的前面插入結點X時的操作序列為:

1) s->next=___________;2) p->next=s;3) t=p->data;

4) p->data=___________;5) s->data=t;

2.  設某棵完全二叉樹中有100個結點,則該二叉樹中有______________個葉子結點。

3.  設某順序迴圈佇列中有m個元素,且規定隊頭指標F指向隊頭元素的前一個位置,隊尾指標R指向隊尾元素的當前位置,則該迴圈佇列中最多儲存_______佇列元素。

4.  對一組初始關鍵字序列(40,50,95,20,15,70,60,45,10)進行氣泡排序,則第一趟需要進行相鄰記錄的比較的次數為__________,在整個排序過程中最多需要進行__________趟排序才可以完成。

5.  在堆排序和快速排序中,如果從平均情況下排序的速度最快的角度來考慮應最好選擇_________排序,如果從節省儲存空間的角度來考慮則最好選擇________排序。

6.  設一組初始記錄關鍵字序列為(20,12,42,31,18,14,28),則根據這些記錄關鍵字構造的二叉排序樹的平均查詢長度是_______________________________。

7.  設一棵二叉樹的中序遍歷序列為BDCA,後序遍歷序列為DBAC,則這棵二叉樹的前序序列為____________________。

8.                                 設用於通訊的電文僅由8個字母組成,字母在電文中出現的頻率分別為7、19、2、6、32、3、21、10,根據這些頻率作為權值構造哈夫曼樹,則這棵哈夫曼樹的高度為________________。

9.  設一組記錄關鍵字序列為(80,70,33,65,24,56,48),則用篩選法建成的初始堆為_______________________。

10.  設無向圖G(如右圖所示),則其最小生成樹上所有邊的權值之和為_________________。

 

 

三、判斷題(20分)

1.  有向圖的鄰接表和逆鄰接表中表結點的個數不一定相等。(  )

2.  對連結串列進行插入和刪除操作時不必移動連結串列中結點。(  )

3.  子串“ABC”在主串“AABCABCD”中的位置為2。(  )

4.  若一個葉子結點是某二叉樹的中序遍歷序列的最後一個結點,則它必是該二叉樹的先序遍歷序列中的最後一個結點。(  )

5.  希爾排序演算法的時間複雜度為O(n2)。(  )

6.  用鄰接矩陣作為圖的儲存結構時,則其所佔用的儲存空間與圖中頂點數無關而與圖中邊數有關。(  )

7.  中序遍歷一棵二叉排序樹可以得到一個有序的序列。(  )

8.  入棧操作和入佇列操作在鏈式儲存結構上實現時不需要考慮棧溢位的情況。(  )

9.  順序表查詢指的是在順序儲存結構上進行查詢。(  )

10.堆是完全二叉樹,完全二叉樹不一定是堆。( )

 

五、演算法設計題(20分)

1.  設計計算二叉樹中所有結點值之和的演算法。

2.  設計將所有奇數移到所有偶數之前的演算法。

3.  設計判斷單鏈表中元素是否是遞增的演算法。

 

參考答案

 

一、選擇題

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

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

11.C     12.C     13.D     14.A     15.A

 

二、填空題

1.        p->next,s->data

2.        50

3.        m-1

4.        6,8

5.        快速,堆

6.        19/7

7.        CBDA

8.        6

9.        (24,65,33,80,70,56,48)

10.    8

 

三、判斷題

1.錯     2.對     3.對     4.對     5.錯

6.錯     7.對     8.對     9.錯     10.對

四、演算法設計題

1. 設計計算二叉樹中所有結點值之和的演算法。

voidsum(bitree *bt,int &s)

{

   if(bt!=0) {s=s+bt->data; sum(bt->lchild,s);sum(bt->rchild,s);}   

}

2. 設計將所有奇數移到所有偶數之前的演算法。

voidquickpass(int r[], int s, int t)

{

  int i=s,j=t,x=r[s];

  while(i<j)

{

    while (i<j && r[j]%2==0)j=j-1;  if (i<j) {r[i]=r[j];i=i+1;}

    while (i<j && r[i]%2==1)i=i+1;  if (i<j) {r[j]=r[i];j=j-1;}

  }

  r[i]=x;

}

3. 設計判斷單鏈表中元素是否是遞增的演算法。

intisriselk(lklist *head)

{

if(head==0||head->next==0)return(1);else

for(q=head,p=head->next;p!=0; q=p,p=p->next)if(q->data>p->data) return(0);

return(1);

}