[課程複習] 資料結構之經典題目回顧 (一)選擇題、填空題1

Eastmount發表於2019-01-28

作者最近在複習考博,乘此機會分享一些電腦科學與技術、軟體工程等相關專業課程考題,一方面分享給考研、考博、找工作的博友,另一方面也是自己今後完成這些課程的複習資料,同時也是線上筆記。基礎知識,希望對您有所幫助,不喜勿噴~


一.基礎、棧和佇列

1、棧和佇列的共同特點是: 只允許在端點出插入和刪除元素

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

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

3、通常從四個方面評價演算法的質量:(可讀性)、(正確性)、(健壯性)和(高效性)。

4、設順序迴圈佇列Q[0:M-1]的頭指標和尾指標分別為F和R,頭指標F總是指向隊頭元素的前一位置,尾指標R總是指向隊尾元素的當前位置,則該迴圈佇列中的元素個數為:(R-F+M)%M

5、下面程式段的功能實現資料x進棧,要求在下劃線處填上正確的語句。

typedef struct {int s[100]; int top;} sqstack;
void push(sqstack &stack,int x)
{
  if (stack.top==m-1) printf(“overflow”);
  else {____________________; _________________;}
}

答案:stack.top++,stack.s[stack.top]=x

6、中序遍歷二叉排序樹所得到的序列是___________序列(填有序或無序)。
解析:二叉排序樹的性質: 按中序遍歷二叉排序樹,所得到的中序遍歷序列是一個遞增有序序列。

7、設指標變數p指向單連結串列中結點A,若刪除單連結串列中結點A,則需要修改指標的操作序列為( )。
A.q=p->next;p->data=q->data;p->next=q->next;free(q);
B.q=p->next;q->data=p->data;p->next=q->next;free(q);
C.q=p->next;p->next=q->next;free(q);
D.q=p->next;p->data=q->data;free(q);
解析:此題參考 牛客網 下面這位大神的回答,答案選A,此題不是很好,刪除過程通常是不需要賦值data的。

[課程複習] 資料結構之經典題目回顧 (一)選擇題、填空題1

8、資料的物理結構主要包括_____________和______________兩種情況。
答案:順序儲存結構、鏈式儲存結構

9、設輸入序列為1、2、3,則經過棧的作用後可以得到___________種不同的輸出序列。
解析:
卡特蘭數,C=(2n)!/(n+1)!n!=6!/4!3!=65/32=5
321、123、132、213、231,答案為5種。

10、不論是順序儲存結構的棧還是鏈式儲存結構的棧,其入棧和出棧操作的時間複雜度均為____________。
答案:O(1)

11、設用連結串列作為棧的儲存結構則退棧操作 ( )。
答案:必須判別棧是否為空

12、設指標變數p指向雙向迴圈連結串列中的結點X,則刪除結點X需要執行的語句序列為_____________________(設結點中的兩個指標域分別為llink和rlink)。
答案:p>llink->rlink=p->rlink; p->rlink->llink=p->rlink

13、設有一個順序迴圈佇列中有M個儲存單元,則該迴圈佇列中最多能夠儲存________個佇列元素;當前實際儲存________________個佇列元素(設頭指標F指向當前隊頭元素的前一個位置,尾指標指向當前隊尾元素的位置)。
答案:M-1,(R-F+M)%M

14、設順序線性表中有n個資料元素,則第i個位置上插入一個資料元素需要移動表中_______個資料元素;刪除第i個位置上的資料元素需要移動表中_______個元素。
答案:n+1-i,n-i。
建議畫圖舉例解析


二.陣列和廣義表

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

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

解析:
計算公式A[i][j]:A[0][0]+nj+i;
644 + 2 * n + 2 = 676,則計算出:n=15。A[3][3]=644+3*15+3=692。答案選C。

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

解析:
樹的度為樹內各節點的度的最大值,故答案為:9、3、3。

[課程複習] 資料結構之經典題目回顧 (一)選擇題、填空題1

3、設一維陣列中有n個陣列元素,則讀取第i個陣列元素的平均時間複雜度為( )。
答案: O(1)


三.樹和二叉樹

1、二叉樹的第k層的結點數最多為: 2k-1

2、字尾算式9 2 3 ± 10 2 / - 的值為__________。中綴算式(3+4X)-2Y/3對應的字尾算式為______________________。
答案:3, 4 X * + 2 Y * 3 / -

3、若用連結串列儲存一棵二叉樹時,每個結點除資料域外,還有指向左孩子和右孩子的兩個指標。在這種儲存結構中,n個結點的二叉樹共有________個指標域,其中有________個指標域是存放了地址,有______個指標是空指標。
答案:2n n-1 n+1

4、向一棵B_樹插入元素的過程中,若最終引起樹根結點的分裂,則新樹比原樹的高度___________。
答案:增加1

5、設哈夫曼樹中的葉子結點總數為m,若用二叉連結串列作為儲存結構,則該哈夫曼樹中總共有(2m )個空指標域。
解析:哈夫曼樹中只有N0和N2節點,如果用二叉連結串列來儲存,度為2的結點的左右孩子都存在,沒有空指標,度為0的葉子沒有孩子,因此左右孩子的鏈域都為空,因此該Huffman樹一共有2m個空指標。

6、設某棵二叉樹的中序遍歷序列為ABCD,前序遍歷序列為CABD,則後序遍歷該二叉樹得到序列為( )。
解析:通過中序遍歷和前序遍歷可以將樹構建出來,再求其後序遍歷結果。
前序遍歷(先根排序),故C為根節點,再看中序遍歷可知,AB為C的左子樹,D為其右子樹。AB - C - D
前序遍歷第二個節點為A,則A為根節點,再看中序遍歷B在A後面,則B為右子樹,最終構建樹如下圖所示。
答案:後序遍歷結果為 BADC。

[課程複習] 資料結構之經典題目回顧 (一)選擇題、填空題1

7、設某棵二叉樹中有2000個結點,則該二叉樹的最小高度為( )。
解析:
滿二叉樹高度與節點個數關係是num=2n-1,則:210 < 2000 < 211。答案為:11

8、設某棵二叉樹中度數為0的結點數為N0,度數為1的結點數為N1,則該二叉樹中度數為2的結點數為_________;若採用二叉連結串列作為該二叉樹的儲存結構,則該二叉樹中共有_______個空指標域。
答案:N0-1,2N0+N1
二叉樹中N2+1=N0,其中空指標為二叉樹N0節點2個,N1節點1個。
建議該種題型畫圖進行分析,如下所示:葉子節點4個,N2節點3個。

[課程複習] 資料結構之經典題目回顧 (一)選擇題、填空題1

9、設某資料結構的二元組形式表示為A=(D,R),D={01,02,03,04,05,06,07,08,09},R={r},r={<01,02>,<01,03>,<01,04>,<02,05>,<02,06>,<03,07>,<03,08>,<03,09>},則資料結構A是(樹型結構 )。
解析:畫圖即可展示。

10、設一棵完全二叉樹中有500個結點,則該二叉樹的深度為__________;若用二叉連結串列作為該完全二叉樹的儲存結構,則共有___________個空指標域。
答案:9、501
參考 牛客網 解析:

[課程複習] 資料結構之經典題目回顧 (一)選擇題、填空題1

或者將二叉樹中節點從1到500編號,最後一個節點500對應的最後一個雙親節點編號為500/2=250,故有250個葉子節點。又500的雙親節點右孩子節點應該為2*250+1=501,無右孩子節點,故右指標域為空,共501個空指標域。

11、設哈夫曼樹中共有n個結點,則該哈夫曼樹中有________個度數為1的結點。
答案:0

12、設有n個結點的完全二叉樹,如果按照從自上到下、從左到右從1開始順序編號,則第i個結點的雙親結點編號為____________,右孩子結點的編號為___________。
答案:i/2,2i+1

13、下列演算法實現在二叉排序樹上查詢關鍵值k,請在下劃線處填上正確的語句。

typedef struct node{int key; struct node *lchild; struct node *rchild;}bitree;
bitree  *bstsearch(bitree *t, int  k)
{ 	
  if (t==0 ) return(0);
  else  while (t!=0)
     if (t->key==k) _____________; 
     else if (t->key>k) t=t->lchild; 
     else _____________;
}

答案:return(t),t=t->rchild

14、設一棵二叉樹的深度為k,則該二叉樹中最多有( )個結點。
答案:2k-1

15、在二叉排序樹中插入一個結點的時間複雜度為( )。
答案:O(n)
最差情況下是O(n) 如果是最一般最基礎的二叉樹的話, 因為深度不平衡,所以會發展成單鏈的形狀,就是一條線 n個點那麼深,如果是深度平衡的二叉樹 o(logn)。

16、根據初始關鍵字序列(19,22,01,38,10)建立的二叉排序樹的高度為____________。
答案:3

[課程複習] 資料結構之經典題目回顧 (一)選擇題、填空題1

17、深度為k的完全二叉樹中最少有____________個結點,最多有__________個結點。
答案:2k-1,2k-1
完全二叉樹是一對一對應,和滿二叉樹有區別,滿二叉樹為最多結點,最少如下所示,僅4個結點。

[課程複習] 資料結構之經典題目回顧 (一)選擇題、填空題1

18、設哈夫曼樹中共有99個結點,則該樹中有_________個葉子結點;若採用二叉連結串列作為儲存結構,則該樹中有_____個空指標域。
解析:
哈夫曼樹沒有N1節點,故:99=N0+N2,並且N0=N2+1,求得:N2=49,故葉子節點為50個;二空指標為葉子節點的左右孩子指標,共100個空指標。
答案:50,100


四.圖

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

2、AOV網是一種 有向無迴路 的圖。DAG圖稱為 有向無環圖

3、在一個具有n個頂點的無向完全圖中,包含有________條邊,在一個具有n個頂點的有向完全圖中,包含有________條邊。
解析:答案為:n(n-1)/2,n(n-1)。
例如,n=4,則有6個頂點。

[課程複習] 資料結構之經典題目回顧 (一)選擇題、填空題1

4、設某有向圖中有n個頂點,則該有向圖對應的鄰接表中有( )個表頭結點。
答案:n

5、設某無向圖中頂點數和邊數分別為n和e,所有頂點的度數之和為d,則e=_______。
答案:d/2

6、已知一有向圖的鄰接表儲存結構如下:從頂點1出發,DFS遍歷的輸出序列是______________,BFS遍歷的輸出序列是_____________。

[課程複習] 資料結構之經典題目回顧 (一)選擇題、填空題1

解析:
DFS是深度優先搜尋,則從頂點1出發,搜尋3,3繼續搜尋4,4鄰接頂點為空,則返回上一層3搜尋5,5繼續搜尋2,故輸出:1->3->4->5->2
BFS是廣度優先搜尋,則頂點1出發,搜尋3、2、4,接著搜尋3的頂點5,故輸出:1->3->2->4->5
答案:(1,3,4,5,2),(1,3,2,4,5)
注意下圖需按照鄰接表指標順序遍歷,1先遍歷3,才到其他的。

[課程複習] 資料結構之經典題目回顧 (一)選擇題、填空題1

7、設無向圖G中有n個頂點e條邊,則其對應的鄰接表中的表頭結點和表結點的個數分別為( )。
答案:n,2e

[課程複習] 資料結構之經典題目回顧 (一)選擇題、填空題1

8、設某強連通圖中有n個頂點,則該強連通圖中至少有( n )條邊。
解析:參考百度百科 oncforever大神 的答案。
有n個頂點的強連通圖最多有n(n-1)條邊,最少有n條邊。
解釋如下:
強連通圖(Strongly Connected Graph)是指一個有向圖(Directed Graph)中任意兩點v1、v2間存在v1到v2的路徑(path)及v2到v1的路徑的圖。
最多的情況:
即n個頂點中兩兩相連,若不計方向,n個點兩兩相連有n(n-1)/2條邊,而由於強連通圖是有向圖,故每條邊有兩個方向,n(n-1)/2×2=n(n-1),故有n個頂點的強連通圖最多有n(n-1)條邊。
最少的情況:
即n個頂點圍成一個圈,且圈上各邊方向一致,即均為順時針或者逆時針,此時有n條邊。
舉例:如下圖ABCD四個點構成強連通圖
邊數最多有4×3=12條,邊數最少有4條,圖如下所示:

[課程複習] 資料結構之經典題目回顧 (一)選擇題、填空題1
[課程複習] 資料結構之經典題目回顧 (一)選擇題、填空題1

9、設有向圖G用鄰接矩陣A[n][n]作為儲存結構,則該鄰接矩陣中第i行上所有元素之和等於頂點i的________,第i列上所有元素之和等於頂點i的________。
答案:出度,入度

10、設有向圖G中有n個頂點e條有向邊,所有的頂點入度數之和為d,則e和d的關係為_________。
答案:e=d

11、設有向圖G中有向邊的集合E={<1,2>,<2,3>,<1,4>,<4,2>,<4,3>},則該圖的一種拓撲序列為____________________。
答案:1->4->2->3

[課程複習] 資料結構之經典題目回顧 (一)選擇題、填空題1

五.查詢

1、若有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

解析:
mid = |(low+high)/2|,向下取整,如9.5取9。
第一次:left = 1 right = 18 ,則:mid = 9 (向下取整)
第二次:left = 1 right = 8(mid-1),則:mid = 4 (向下取整)
第三次:left = 1 right = 3(mid-1),則:mid = 2
第四次:left = 3 (mid+1) right = 3 mid = 3。答案選D。

2、假定一個線性表為(12,23,74,55,63,40),若按Key % 4條件進行劃分,使得同一餘數的元素成為一個子表,則得到的四個子表分別為 (12 , 40 )、(23,55, 63)、(74)和( )。
解析:
餘數為0:12%4=0, 40%4=0
餘數為2:74%4=2
餘數為3:23%4=3, 55%4=3, 63%4=3

3、設一組有序的記錄關鍵字序列為(13,18,24,35,47,50,62,83,90),查詢方法用二分查詢,要求計算出查詢關鍵字62時的比較次數並計算出查詢成功時的平均查詢長度。
解析:其計算過程如下圖所示。
答案:2,ASL = (1 * 1 + 2 * 2 + 3 * 4 + 4 * 2) / 9 = 25/9。

[課程複習] 資料結構之經典題目回顧 (一)選擇題、填空題1

4、設二叉排序樹中有n個結點,則在二叉排序樹的平均查詢長度為( )。
答案:O(log2n)

5、設查詢表中有100個元素,如果用二分法查詢方法查詢資料元素X,則最多需要比較________次就可以斷定資料元素X是否在查詢表中。
答案:7
解析:log2100=7,2的7次方為128。

6、下列演算法實現在順序雜湊表中查詢值為k的關鍵字,請在下劃線處填上正確的語句。

struct record{int key; int others;};
int hashsqsearch(struct record hashtable[ ],int k)
{
  int i,j;  j=i=k % p;
  while (hashtable[j].key!=k&&hashtable[j].flag!=0){
    j=(____) %m; if (i==j) return(-1);
  }
  if (_______________________ ) return(j); else return(-1);
}

答案:j+1,hashtable[j].key==k
由於返回 j 表示該下標的儲存的值為k,故第二個空為 hashtable[j].key==k。

7、設有序順序表中有n個資料元素,則利用二分查詢法查詢資料元素X的最多比較次數不超過( )。
A.log2n+1 B.log2n-1 C.log2n D.log2(n+1)
答案:A,折半查詢為log2n+1(最後一個元素的比較)。

8、設雜湊函式H(k)=k mod p,解決衝突的方法為鏈地址法。要求在下列演算法劃線處填上正確的語句完成在雜湊表hashtalbe中查詢關鍵字值等於k的結點,成功時返回指向關鍵字的指標,不成功時返回標誌0。

typedef struct node {int key; struct node *next;} lklist; 
void createlkhash(lklist *hashtable[ ])
{
    int i,k;  lklist *s;
    for(i=0;i<m;i++) _____________________;
    for(i=0;i<n;i++)
    {
       s=(lklist *)malloc(sizeof(lklist)); s->key=a[i];
       k=a[i] % p; s->next=hashtable[k]; _______________________;
    }
}

答案:hashtable[i]=0,hashtable[k]=s


六.排序

1、對n個記錄的檔案進行快速排序,所需要的輔助儲存空間大致為:O(log2n)
解析:
輔助空間中快速排序為O(log2n),歸併排序為O(n),基數排序為O(rd+n),其他排序為O(1)。

2、在堆排序的過程中,對任一分支結點進行篩運算的時間複雜度為________,整個堆排序過程的時間複雜度為________。
解析:
堆排序的時間複雜度為O(nlog2n),則每個分支的時間複雜度為O(log2n)。
答案:O(log2n),O(nlog2n)。

3、在快速排序、堆排序、歸併排序中, 歸併 排序是穩定的。
解析:
穩定排序:直接插入排序、氣泡排序、歸併排序、基數排序
不穩定排序:希爾排序、直接選擇排序、堆排序、快速排序

4、設一組初始記錄關鍵字序列(5,2,6,3,8),以第一個記錄關鍵字5為基準進行一趟快速排序的結果為( 3,2,5,6,8 )。
解析:
快速排序5為基準,基本規則如下:left=3,right=8,先遍歷right,尋找比基準5小的數字左移;找到之後與左邊left下標替換,接著left向右移動,尋找比基準5大的數字,找到之後替換,最後left=right時,該數字與基準替換。
初始:5 2 6 3 8,right尋找到3,與left=5交換位置
接著:3 2 6 () 8,left從左邊移動,找到6,與()替換位置
接著:3 2 () 6 8,此時向左移動right,right=left,停止快速排序,並用()替換基準5。
輸出:3 2 5 6 8,其為第一趟快速排序的結果。

5、為了能有效地應用HASH查詢技術,必須解決的兩個問題是____________和_________。
答案:構造一個好的HASH函式,確定解決衝突的方法。

6、快速排序的最壞時間複雜度為___________,平均時間複雜度為__________。
答案:O(n2),O(nlog2n)

[課程複習] 資料結構之經典題目回顧 (一)選擇題、填空題1

7、設一組初始記錄關鍵字序列為(55,63,44,38,75,80,31,56),則利用篩選法建立的初始堆為___________________________。
答案:(31,38,54,56,75,80,55,63)

8、設有n個待排序的記錄關鍵字,則在堆排序中需要( 1 )個輔助記錄單元。

9、設一組初始關鍵字記錄關鍵字為(20,15,14,18,21,36,40,10),則以20為基準記錄的一趟快速排序結束後的結果為( )。
A.10,15,14,18,20,36,40,21
B.10,15,14,18,20,40,36,21
C.10,15,14,20,18,40,36,2l
D.10,15,14,18,20,36,40,21
解析:快排如下
20,15,14,18,21,36,40,10 => 右邊開始,找到小於20的10,交換次序
10, 15,14,18,21,36,40,() => 左邊繼續,找到大於20的21,交換次序
10,15,14,18,(),36,40,21 => 右邊繼續找小於20的數字,找到()處停止
10,15,14,18,20,36,40,21 => 輸出第一趟快速排序結果,故選D。

10、設有5000個待排序的記錄關鍵字,如果需要用最快的方法選出其中最小的10個記錄關鍵字,則用下列( 堆排序 )方法可以達到此目的。

11、設一組初始記錄關鍵字為(72,73,71,23,94,16,5),則以記錄關鍵字72為基準的一趟快速排序結果為___________________________。
答案:(5,16,71,23,72,94,73)
該題方法和前面一樣,請同學們自行嘗試。

72 73 71 23 94 16 05
05 73 71 23 94 16 ( )
05 ( ) 71 23 94 16 73
05 16 71 23 94 ( ) 73
05 16 71 23 ( ) 94 73
05 16 71 23 72 94 73

12、設一組初始記錄關鍵字序列為(345,253,674,924,627),則用基數排序需要進行( )趟的分配和回收才能使得初始關鍵字序列變成有序序列。
答案:3
個位、十位、百位共三趟。

13、設有n個無序的記錄關鍵字,則直接插入排序的時間複雜度為________,快速排序的平均時間複雜度為_________。
答案:O(n2),O(nlog2n)

14、設初始記錄關鍵字序列為(K1,K2,…,Kn),則用篩選法思想建堆必須從第______個元素開始進行篩選。
答案:n/2

15、設一組初始記錄關鍵字序列為(20,18,22,16,30,19),則以20為中軸的一趟快速排序結果為______________________________。
答案:(19,18,16,20,30,22)

16、設一組初始記錄關鍵字序列為(20,18,22,16,30,19),則根據這些初始關鍵字序列建成的初始堆為________________________。
答案:(16,18,19,20,30,22)


PS:最近參加CSDN2018年部落格評選,希望您能投出寶貴的一票。我是59號,Eastmount,楊秀璋。投票地址:https://bss.csdn.net/m/topic/blog_star2018/index

[課程複習] 資料結構之經典題目回顧 (一)選擇題、填空題1

五年來寫了314篇部落格,12個專欄,是真的熱愛分享,熱愛CSDN這個平臺,也想幫助更多的人,專欄包括Python、資料探勘、網路爬蟲、影象處理、C#、Android等。現在也當了兩年老師,更是覺得有義務教好每一個學生,讓貴州學子好好寫點程式碼,學點技術,“師者,傳到授業解惑也”,提前祝大家新年快樂。2019我們攜手共進,為愛而生。

(By:Eastmount 2019-01-28 下午6點 http://blog.csdn.net/eastmount/ )

相關文章