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

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

資料結構試卷(七)

一、選擇題(30分)

1.設某無向圖有n個頂點,則該無向圖的鄰接表中有(  )個表頭結點。

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

2.設無向圖G中有n個頂點,則該無向圖的最小生成樹上有(  )條邊。

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

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

   (A)40,42,60,55,80,85       (B) 42,45,55,60,85,80

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

4.(  )二叉排序樹可以得到一個從小到大的有序序列。

   (A)先序遍歷     (B) 中序遍歷    (C) 後序遍歷    (D) 層次遍歷

5.設按照從上到下、從左到右的順序從1開始對完全二叉樹進行順序編號,則編號為i結點的左孩子結點的編號為(  )。

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

6.程式段s=i=0;do {i=i+1;s=s+i;}while(i<=n);的時間複雜度為(  )。

   (A)O(n)         (B) O(nlog2n)   (C) O(n2)       (D) O(n3/2)

7.設帶有頭結點的單向迴圈連結串列的頭指標變數為head,則其判空條件是(  )。

   (A) head==0                      (B)head->next==0

   (C)head->next==head             (D) head!=0

8.設某棵二叉樹的高度為10,則該二叉樹上葉子結點最多有(  )。

   (A)20           (B) 256         (C) 512         (D)1024

9.設一組初始記錄關鍵字序列為(13,18,24,35,47,50,62,83,90,115,134),則利用二分法查詢關鍵字90需要比較的關鍵字個數為(  )。

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

10.設指標變數top指向當前鏈式棧的棧頂,則刪除棧頂元素的操作序列為(  )。

   (A)top=top+1;                   (B) top=top-1;

   (C)top->next=top;               (D) top=top->next;

 

二、判斷題(20分)

1.不論是入佇列操作還是入棧操作,在順序儲存結構上都需要考慮“溢位”情況。(  )

2.當向二叉排序樹中插入一個結點,則該結點一定成為葉子結點。(  )

3.設某堆中有n個結點,則在該堆中插入一個新結點的時間複雜度為O(log2n)。(   )

4.完全二叉樹中的葉子結點只可能在最後兩層中出現。( )

5.哈夫曼樹中沒有度數為1的結點。(  )

6.對連通圖進行深度優先遍歷可以訪問到該圖中的所有頂點。(  )

7.先序遍歷一棵二叉排序樹得到的結點序列不一定是有序的序列。(  )

8.由樹轉化成二叉樹,該二叉樹的右子樹不一定為空。( )

9.線性表中的所有元素都有一個前驅元素和後繼元素。( )

10.帶權無向圖的最小生成樹是唯一的。(  )

 

三、填空題(30分)

1.  設指標變數p指向雙向連結串列中的結點A,指標變數s指向被插入的結點X,則在結點A的後面插入結點X的操作序列為_________=p;s->right=p->right;__________=s; p->right->left=s;(設結點中的兩個指標域分別為left和right)。

2.  設完全有向圖中有n個頂點,則該完全有向圖中共有________條有向條;設完全無向圖中有n個頂點,則該完全無向圖中共有________條無向邊。

3.  設關鍵字序列為(Kl,K2,…,Kn),則用篩選法建初始堆必須從第______個元素開始進行篩選。

4.  解決散列表衝突的兩種方法是________________和__________________。

5.  設一棵三叉樹中有50個度數為0的結點,21個度數為2的結點,則該二叉樹中度數為3的結點數有______個。

6.  高度為h的完全二叉樹中最少有________個結點,最多有________個結點。

7.  設有一組初始關鍵字序列為(24,35,12,27,18,26),則第3趟直接插入排序結束後的結果的是__________________________________。

8.  設有一組初始關鍵字序列為(24,35,12,27,18,26),則第3趟簡單選擇排序結束後的結果的是__________________________________。

9.  設一棵二叉樹的前序序列為ABC,則有______________種不同的二叉樹可以得到這種序列。

10.  下面程式段的功能是實現一趟快速排序,請在下劃線處填上正確的語句。

structrecord {int key;datatype others;};

voidquickpass(struct record r[], int s, int t, int &i)

{

  int j=t; struct record x=r[s]; i=s;

  while(i<j)

{

    while (i<j && r[j].key>x.key)j=j-1;  if (i<j) {r[i]=r[j];i=i+1;}

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

  }

  _________________;

}

 

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

1.  設計在鏈式結構上實現簡單選擇排序演算法。

2.  設計在順序儲存結構上實現求子串演算法。

3.  設計求結點在二叉排序樹中層次的演算法。

 

 

參考答案

 

一、選擇題

1.B        2.B        3.C        4.B        5.B

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

 

二、判斷題

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

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

 

三、填空題

1.        s->left=p,p->right

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

3.        n/2

4.        開放定址法,鏈地址法

5.        14

6.  2h-1,2h-1

7.  (12,24,35,27,18,26)

8.  (12,18,24,27,35,26)

9.  5

10.  i<j &&r[i].key<x.key,r[i]=x

 

四、演算法設計題

1.  設計在鏈式結構上實現簡單選擇排序演算法。

voidsimpleselectsorlklist(lklist *&head)

{

  lklist *p,*q,*s;  int min,t;

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

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

  {

    min=q->data; s=q;

    for(p=q->next; p!=0;p=p->next)if(min>p->data){min=p->data; s=p;}

    if(s!=q){t=s->data;s->data=q->data; q->data=t;}

  }

}

2.  設計在順序儲存結構上實現求子串演算法。

voidsubstring(char s[ ], long start, long count, char t[ ])

{

  long i,j,length=strlen(s);

  if (start<1 || start>length)printf("The copy position is wrong");

  else if (start+count-1>length) printf("Toocharacters to be copied");

else{ for(i=start-1,j=0; i<start+count-1;i++,j++) t[j]=s[i]; t[j]= '\0';}

}

3.  設計求結點在二叉排序樹中層次的演算法。

intlev=0;

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

voidlevel(bitree *bt,int x)

{

  if (bt!=0)

{lev++;if (bt->key==x) return; else if (bt->key>x) level(bt->lchild,x);else level(bt->rchild,x);}

}