北京理工大學-資料結構期末考試試題(一)
資料結構試卷(一)
一、單選題(每題 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