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