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

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

資料結構試卷(一)

一、單選題(每題 2 分,共20分)

1.    棧和佇列的共同特點是(      )。

 A.只允許在端點處插入和刪除元素

 B.都是先進後出   

 C.都是先進先出

 D.沒有共同點

2.  用連結方式儲存的佇列,在進行插入運算時(   ).

        A. 僅修改頭指標             B. 頭、尾指標都要修改

        C. 僅修改尾指標              D.頭、尾指標可能都要修改

3.  以下資料結構中哪一個是非線性結構?(   )

       A. 佇列     B. 棧        C. 線性表      D. 二叉樹

4.    設有一個二維陣列A[m][n],假設A[0][0]存放位置在644(10)A[2][2]存放位置在676(10),每個元素佔一個空間,問A[3][3](10)存放在什麼位置?腳註(10)表示用10進製表示。

         A.688          B.678        C.692        D.696

5.    樹最適合用來表示(      )。

 A.有序資料元素                      B.無序資料元素

     C.元素之間具有分支層次關係的資料    D.元素之間無聯絡的資料

6.  二叉樹的第k層的結點數最多為( ).

          A.2k-1      B.2K+1      C.2K-1     D. 2k-1

7.    若有18個元素的有序表存放在一維陣列A[19]中,第一個元素放A[1]中,現進行二分查詢,則查詢A[3]的比較序列的下標依次為(     )

 A. 1,2,3                                              B. 9,5,2,3

 C. 9,5,3                                              D. 9,4,2,3

8.  對n個記錄的檔案進行快速排序,所需要的輔助儲存空間大致為

        A. O(1)     B. O(n)     C. O(1og2n)       D. O(n2)

9.  對於線性表(7,34,55,25,64,46,20,10)進行雜湊儲存時,若選用H(K)=K %9作為雜湊函式,則雜湊地址為1的元素有(   )個,

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

10.  設有6個結點的無向圖,該圖至少應有(      )條邊才能確保是一個連通圖。

   A.5       B.6         C.7      D.8

二、填空題(每空1分,共26分)

1. 通常從四個方面評價演算法的質量:_________、_________、_________和_________。

2. 一個演算法的時間複雜度為(n3+n2log2n+14n)/n2,其數量級表示為________。

3. 假定一棵樹的廣義表表示為A(C,D(E,F,G),H(I,J)),則樹中所含的結點數為_­­­­_________個,樹的深度為___________,樹的度為_________。

4. 字尾算式92 3 +- 10 2 / -的值為__________。中綴算式(3+4X)-2Y/3對應的字尾算式為_______________________________。

5. 若用連結串列儲存一棵二叉樹時,每個結點除資料域外,還有指向左孩子和右孩子的兩個指標。在這種儲存結構中,n個結點的二叉樹共有________個指標域,其中有________個指標域是存放了地址,有________________個指標是空指標。

6. 對於一個具有n個頂點和e條邊的有向圖和無向圖,在其對應的鄰接表中,所含邊結點分別有_______個和________個。

7. AOV網是一種___________________的圖。

8. 在一個具有n個頂點的無向完全圖中,包含有________條邊,在一個具有n個頂點的有向完全圖中,包含有________條邊。

9. 假定一個線性表為(12,23,74,55,63,40),若按Key% 4條件進行劃分,使得同一餘數的元素成為一個子表,則得到的四個子表分別為____________________________、___________________、_______________________和__________________________。

10. 向一棵B_樹插入元素的過程中,若最終引起樹根結點的分裂,則新樹比原樹的高度___________。

11. 在堆排序的過程中,對任一分支結點進行篩運算的時間複雜度為________,整個堆排序過程的時間複雜度為________。

12. 在快速排序、堆排序、歸併排序中,_________排序是穩定的。

三、計算題(每題 6 分,共24分)

1. 在如下陣列A中連結儲存了一個線性表,表頭指標為A [0].next,試寫出該線性表。

         A               0              1             2              3            4            5            6            7

data

 

 

 
 

60

 
 

50

 
 

78

 
 

90

 
 

34

 
 

 

 
 

40

 
 

next

 
 

3

 
 

5

 
 

7

 
 

2

 
 

0

 
 

4

 
 

 

 
 

1

 

 

2.   請畫出下圖的鄰接矩陣和鄰接表。

 

3.   已知一個圖的頂點集V和邊集E分別為:V={1,2,3,4,5,6,7};

       E={(1,2)3,(1,3)5,(1,4)8,(2,5)10,(2,3)6,(3,4)15,

(3,5)12,(3,6)9,(4,6)4,(4,7)20,(5,6)18,(6,7)25};

   用克魯斯卡爾演算法得到最小生成樹,試寫出在最小生成樹中依次得到的各條邊。

4.        畫出向小根堆中加入資料4, 2, 5, 8, 3時,每加入一個數據後堆的變化。

四、閱讀演算法(每題7分,共14分)

1.    LinkListmynote(LinkList L)

       {//L是不帶頭結點的單鏈表的頭指標

             if(L&&L->next){

                  q=L;L=L->next;p=L;

        S1:       while(p->next)p=p->next;

        S2:       p->next=q;q->next=NULL;

              }

              return  L;

            }

   請回答下列問題:

  (1)說明語句S1的功能;

  (2)說明語句組S2的功能;

       (3)設連結串列表示的線性表為(a1,a2, …,an),寫出演算法執行後的返回值所表示的線性表。

2.    voidABC(BTNode * BT)

{

       if  BT {

          ABC (BT->left);

         ABC (BT->right);

         cout<<BT->data<<' ';

         }

       }

       該演算法的功能是:

五、演算法填空(共8分)

二叉搜尋樹的查詢——遞迴演算法:

boolFind(BTreeNode* BST,ElemType& item)

{

  if (BST==NULL)

     return false; //查詢失敗

  else {

        if (item==BST->data){

              item=BST->data;//查詢成功

               return  ­­­­­­­­­___________;}

       elseif(item<BST->data)

               return  Find(______________,item);

       else  return Find(_______________,item);

         }//if

}

六、編寫演算法(共8分)

統計出單鏈表HL中結點的值等於給定值X的結點數。

     int CountX(LNode* HL,ElemType x)

 

參考答案

 

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

1.A  2.D 3.D  4.C  5.C 6.D  7.D   8.C  9.D   10.A

二、填空題(每空1分,共26分)

1.  正確性   易讀性   強壯性   高效率

2.  O(n)

3.  9    3    3

4.  -1      3 4 X * + 2 Y* 3 / -

5.  2n   n-1     n+1

6.  e    2e

7.  有向無迴路

8.  n(n-1)/2     n(n-1)

9.  (12,40)    (  )   (74)   (23,55,63)

10.增加1

11.O(log2n)  O(nlog2n)

12.歸併

三、計算題(每題6分,共24分)

1.    線性表為:(78,50,40,60,34,90)

2.  鄰接矩陣:

      鄰接表如圖11所示:

 

 

3.    用克魯斯卡爾演算法得到的最小生成樹為: 

    (1,2)3,  (4,6)4,  (1,3)5, (1,4)8,  (2,5)10,  (4,7)20

4.見圖

 

四、讀演算法(每題7分,共14分)

1.    (1)查詢連結串列的尾結點

(2)將第一個結點連結到連結串列的尾部,作為新的尾結點

   (3)返回的線性表為(a2,a3,…,an,a1

2.    遞迴地後序遍歷鏈式儲存的二叉樹。

五、法填空(每空2分,共8 分)

true     BST->left        BST->right

六、編寫演算法(8分)

int CountX(LNode* HL,ElemType x)

  {  int i=0; LNode* p=HL;//i為計數器

     while(p!=NULL)

       { if (P->data==x) i++;

         p=p->next;

        }//while, 出迴圈時i中的值即為x結點個數

      return i;

  }//CountX