北京理工大學-資料結構期末考試試題(八)
資料結構試卷(八)
一、選擇題(30分)
1. 字串的長度是指( )。
(A)串中不同字元的個數 (B) 串中不同字母的個數
(C)串中所含字元的個數 (D) 串中不同數字的個數
2. 建立一個長度為n的有序單鏈表的時間複雜度為( )
(A)O(n) (B) O(1) (C) O(n2) (D) O(log2n)
3. 兩個字串相等的充要條件是( )。
(A)兩個字串的長度相等 (B) 兩個字串中對應位置上的字元相等
(C)同時具備(A)和(B)兩個條件 (D)以上答案都不對
4. 設某散列表的長度為100,雜湊函式H(k)=k % P,則P通常情況下最好選擇( )。
(A)99 (B) 97 (C) 91 (D) 93
5. 在二叉排序樹中插入一個關鍵字值的平均時間複雜度為( )。
(A)O(n) (B) O(1og2n) (C) O(nlog2n) (D) O(n2)
6. 設一個順序有序表A[1:14]中有14個元素,則採用二分法查詢元素A[4]的過程中比較元素的順序為( )。
(A)A[1],A[2],A[3],A[4] (B)A[1],A[14],A[7],A[4]
(C)A[7],A[3],A[5],A[4] (D)A[7],A[5] ,A[3],A[4]
7. 設一棵完全二叉樹中有65個結點,則該完全二叉樹的深度為( )。
(A)8 (B) 7 (C) 6 (D) 5
8. 設一棵三叉樹中有2個度數為1的結點,2個度數為2的結點,2個度數為3的結點,則該三叉鏈權中有( )個度數為0的結點。
(A)5 (B) 6 (C) 7 (D) 8
9. 設無向圖G中的邊的集合E={(a,b),(a,e),(a,c),(b,e),(e,d),(d,f),(f,c)},則從頂點a出發進行深度優先遍歷可以得到的一種頂點序列為( )。
(A) aedfcb (B) acfebd (C)aebcfd (D) aedfbc
10. 佇列是一種( )的線性表。
(A)先進先出 (B) 先進後出 (C) 只能插入 (D) 只能刪除
二、判斷題(20分)
1. 如果兩個關鍵字的值不等但雜湊函式值相等,則稱這兩個關鍵字為同義詞。( )
2. 設初始記錄關鍵字基本有序,則快速排序演算法的時間複雜度為O(nlog2n)。( )
3. 分塊查詢的基本思想是首先在索引表中進行查詢,以便確定給定的關鍵字可能存在的塊號,然後再在相應的塊內進行順序查詢。( )
4. 二維陣列和多維陣列均不是特殊的線性結構。( )
5. 向二叉排序樹中插入一個結點需要比較的次數可能大於該二叉樹的高度。( )
6. 如果某個有向圖的鄰接表中第i條單鏈表為空,則第i個頂點的出度為零。( )
7. 非空的雙向迴圈連結串列中任何結點的前驅指標均不為空。( )
8. 不論線性表採用順序儲存結構還是鏈式儲存結構,刪除值為X的結點的時間複雜度均為O(n)。( )
9. 圖的深度優先遍歷演算法中需要設定一個標誌陣列,以便區分圖中的每個頂點是否被訪問過。( )
10. 稀疏矩陣的壓縮儲存可以用一個三元組表來表示稀疏矩陣中的非0元素。( )
三、填空題(30分)
1. 設一組初始記錄關鍵字序列為(49,38,65,97,76,13,27,50),則以d=4為增量的一趟希爾排序結束後的結果為_____________________________。
2. 下面程式段的功能是實現在二叉排序樹中插入一個新結點,請在下劃線處填上正確的內容。
typedefstruct node{int data;struct node *lchild;struct node *rchild;}bitree;
void bstinsert(bitree *&t,int k)
{
if (t==0 ) {____________________________;t->data=k;t->lchild=t->rchild=0;}
else if(t->data>k) bstinsert(t->lchild,k);else__________________________;
}
3. 設指標變數p指向單鏈表中結點A,指標變數s指向被插入的結點X,則在結點A的後面插入結點X需要執行的語句序列:s->next=p->next;_________________;。
4. 設指標變數head指向雙向連結串列中的頭結點,指標變數p指向雙向連結串列中的第一個結點,則指標變數p和指標變數head之間的關係是p=_________和head=__________(設結點中的兩個指標域分別為llink和rlink)。
5. 設某棵二叉樹的中序遍歷序列為ABCD,後序遍歷序列為BADC,則其前序遍歷序列為__________。
6. 完全二叉樹中第5層上最少有__________個結點,最多有_________個結點。
7. 設有向圖中不存在有向邊<Vi,Vj>,則其對應的鄰接矩陣A中的陣列元素A[i][j]的值等於____________。
8. 設一組初始記錄關鍵字序列為(49,38,65,97,76,13,27,50),則第4趟直接選擇排序結束後的結果為_____________________________。
9. 設連通圖G中有n個頂點e條邊,則對應的最小生成樹上有___________條邊。
10. 設有一組初始記錄關鍵字序列為(50,16,23,68,94,70,73),則將它們調整成初始堆只需把16與___________相互交換即可。
四、演算法設計題(20分)
1. 設計一個在鏈式儲存結構上統計二叉樹中結點個數的演算法。
2. 設計一個演算法將無向圖的鄰接矩陣轉為對應鄰接表的演算法。
參考答案
一、選擇題
1.C 2.C 3.C 4.B 5.B
6.C 7.B 8.C 9.A 10.A
二、判斷題
1.對 2.錯 3.對 4.錯 5.錯
6.對 7.對 8.對 9.對 10.對
三、填空題
1. (49,13,27,50,76,38,65,97)
2. t=(bitree*)malloc(sizeof(bitree)),bstinsert(t->rchild,k)
3. p->next=s
4. head->rlink,p->llink
5. CABD
6. 1,16
7. 0
8. (13,27,38,50,76,49,65,97)
9. n-1
10. 50
四、演算法設計題
1. 設計一個在鏈式儲存結構上統計二叉樹中結點個數的演算法。
voidcountnode(bitree *bt,int &count)
{
if(bt!=0)
{count++;countnode(bt->lchild,count); countnode(bt->rchild,count);}
}
2. 設計一個演算法將無向圖的鄰接矩陣轉為對應鄰接表的演算法。
typedef struct {intvertex[m]; int edge[m][m];}gadjmatrix;
typedef structnode1{int info;int adjvertex; struct node1 *nextarc;}glinklistnode;
typedef structnode2{int vertexinfo;glinklistnode *firstarc;}glinkheadnode;
voidadjmatrixtoadjlist(gadjmatrix g1[ ],glinkheadnode g2[ ])
{
int i,j;glinklistnode *p;
for(i=0;i<=n-1;i++)g2[i].firstarc=0;
for(i=0;i<=n-1;i++)for(j=0;j<=n-1;j++)
if(g1.edge[i][j]==1)
{
p=(glinklistnode*)malloc(sizeof(glinklistnode));p->adjvertex=j;
p->nextarc=g[i].firstarc;g[i].firstarc=p;
p=(glinklistnode*)malloc(sizeof(glinklistnode));p->adjvertex=i;
p->nextarc=g[j].firstarc;g[j].firstarc=p;
}
}