判斷題:
1-1
N2logN和NlogN2具有相同的增長速度。 (2分)
1-2
對一棵平衡二叉樹,所有非葉結點的平衡因子都是0,當且僅當該樹是完全二叉樹。(2分)
1-3
無向連通圖所有頂點的度之和為偶數。 (2分)
1-4
對N個不同的數據采用冒泡排序進行從大到小的排序,當元素基本有序時交換元素次數肯定最多。 (2分)
1-5
若用平方探測法解決沖突,則插入新元素時,若散列表容量為質數,插入就一定可以成功。 (2分)
選擇題:
2-1
設棧S和隊列Q的初始狀態均為空,元素a、b、c、d、e、f、g依次進入棧S。若每個元素出棧后立即進入隊列Q,且7個元素出隊的順序是b、d、c、f、e、a、g,則棧S的容量至少是: (2分)
A、1
B、2
C、3
D、4
2-2
在下列所示的平衡二叉樹中,插入關鍵字48后得到一棵新平衡二叉樹。在新平衡二叉樹中,關鍵字37所在結點的左、右子結點中保存的關鍵字分別是: (4分)
A、13、48
B、24、48
C、24、53
D、24、90
2-3
線性表、堆棧、隊列的主要區別是什么?(2分)
A、線性表用指針,堆棧和隊列用數組
B、堆棧和隊列都是插入、刪除受到約束的線性表
C、線性表和隊列都可以用循環鏈表實現,但堆棧不能
D、堆棧和隊列都不是線性結構,而線性表是
2-4
對N(N≥2) 個權值均不相同的字符構造哈夫曼樹。下列關於該哈夫曼樹的敘述中,錯誤的是: (2分)
A、樹中一定沒有度為1的結點
B、樹中兩個權值最小的結點一定是兄弟結點
C、樹中任一非葉結點的權值一定不小於下一層任一結點的權值
D、該樹一定是一棵完全二叉樹
2-5
在並查集問題中,已知集合元素0~8所以對應的父結點編號值分別是{ 1, -4, 1, 1, -3, 4, 4, 8, -2 }(注:−n表示樹根且對應集合大小為n),那么將元素6和8所在的集合合並(要求必須將小集合並到大集合)后,該集合對應的樹根和父結點編號值分別是多少? (4分)
A、1和-6
B、4和-5
C、8和-5
D、8和-6
2-6
要判斷一個整數N(>10) 是否素數,我們需要檢查3到√N之間是否存在奇數可以整除N 。則這個算法的時間復雜度是:(2分)
A、O(N/2)
B、O(√NlogN)
C、O(√N)
D、O(0.5logN)
2-7
在一個有權無向圖中,如果頂點b到頂點a的最短路徑長度是10,頂點c與頂點b之間存在一條長度為3的邊。那么下列說法中有幾句是正確的? (2分)
1.c與a的最短路徑長度就是13
2.c與a的最短路徑長度就是7
3.c與a的最短路徑長度不超過13
4.c與a的最短路徑不小於7
A、1句
B、2句
C、3句
D、4句
2-8
將MMM個元素存入用長度為SSS的數組表示的散列表,則該表的裝填因子為: (2分)
A、S+M
B、M−S
C、M×S
D、M/S
2-9
給定輸入序列 {4371, 1323, 6173, 4199, 4344, 9679, 1989} 以及散列函數 h(X)=X % 10 。如果用大小為10的散列表,並且用分離鏈接法解決沖突,則輸入各項經散列后在表中的下標為:(-1表示相應的插入無法成功)(2分)
A、1, 3, 3, 9, 4, 9, 9
B、1, 3, 4, 9, 7, 5, -1
C、1, 3, 4, 9, 5, 0, 8
D、1, 3, 4, 9, 5, 0, 2
2-10
在拓撲排序算法中用堆棧和用隊列產生的結果會不同嗎?(2分)
A、是的肯定不同
B、肯定是相同的
C、有可能會不同
D、以上全不對
2-11
將 {28, 15, 42, 18, 22, 5, 40} 逐個按順序插入到初始為空的最小堆(小根堆)中。則該樹的前序遍歷結果為:(4分)
A、5, 18, 15, 28, 22, 42, 40
B、5, 15, 18, 22, 28, 42, 40
C、5, 18, 28, 22, 15, 42, 40
D、5, 15, 28, 18, 22, 42, 40
2-12
將1~6這6個鍵值插到一棵初始為空的二叉搜索樹中。如果插入完成后,搜索樹結構如圖所示,問:可能的插入序列是什么? (2分)
A、1 2 3 4 5 6
B、4 1 2 3 5 6
C、4 1 3 2 6 5
D、4 1 3 2 5 6
2-13
給定一有向圖的鄰接表如下。從頂點V1出發按廣度優先搜索法進行遍歷,則得到的一種頂點序列為: (2分)
A、V1,V2,V3,V4,V5
B、V1,V2,V3,V5,V4
C、V1,V3,V2,V4,V5
D、V1,V4,V3,V5,V2
2-14
已知一個圖的鄰接矩陣如下,則從頂點V1出發按深度優先搜索法進行遍歷,可能得到的一種頂點序列為: (2分)
A、V1,V2,V3,V4,V5,V6
B、V1,V2,V4,V5,V6,V3
C、V1,V3,V5,V2,V4,V6
D、V1,V3,V5,V6,V4,V2
2-15
給出關鍵字序列{ 4321, 56, 57, 46, 28, 7, 331, 33, 234, 63 },下面哪個選擇是按次位優先(LSD)鏈式基數排序進行了一趟分配和收集的結果? (2分)
A、→331→4321→33→63→234→56→46→57→7→28
B、→4321→331→33→63→234→56→46→57→7→28
C、→56→28→4321→331→33→234→46→57→63→7
D、→57→46→28→7→33→234→63→56→4321→331
2-16
將序列{ 2, 12, 16, 88, 5, 10, 34 }排序。若前2趟排序的結果如下:
第1趟排序后:2, 12, 16, 10, 5, 34, 88
第2趟排序后:2, 5, 10, 12, 16, 34, 88
則可能的排序算法是:(2分)
A、冒泡排序
B、快速排序
C、歸並排序
D、插入排序
2-17
給定有權無向圖的鄰接矩陣如下,其最小生成樹的總權重是:(2分)
A、24
B、23
C、18
D、17
2-18
在利用堆棧將下列哪個中綴表達式轉換為后綴表達式過程中,堆棧的操作系列為: push(′∗′)、push(′(′)、push(′+′)、pop()、pop()、pop()、push(′∗′)、pop()、push(′+′)、pop() (2分)
A、2*(3+4)*5+6
B、2*(3+4*5)+6
C、2*(3+4*5+6)
D、以上都是
2-19
采用線性探測沖突解決策略,hi(k)=(H(k)+i)mod11 ,將散列函數值分別等於2、2、3、3的四個對象a1、a2、a3、a4都插入一個大小為11的空散列表(哈希表)中。在不同的插入順序中,哪句有關插入后散列表平均成功查找長度的判斷是錯的? (4分)
A、按a1、a2、a3、a4順序和按a1、a3、a4、a2順序,平均成功查找長度一樣;
B、按a1、a3、a2、a4順序和按a3、a1、a2、a4順序,平均成功查找長度一樣;
C、按a1、a3、a2、a4順序和按a4、a1、a2、a3順序,平均成功查找長度一樣;
D、按任何插入順序,其平均成功查找長度都一樣.
2-20
將10, 12, 1, 14, 6, 5, 8, 15, 3, 9, 7逐個按順序插入到初始為空的最小堆中,然后連續執行兩次刪除最小元素操作(DeleteMin),再插入4,16,此后堆頂的元素是什么? (2分)
A、4
B、5
C、7
D、9
程序填空題:
3-1
下列代碼的功能是將小頂堆H中指定位置P上的元素的整數鍵值下調D個單位,然后繼續將H調整為小頂堆。
1 void DecreaseKey( int P, int D, PriorityQueue H ) 2 { 3 int i, key; 4 key = H->Elements[P] - D; 5 for ( i = /**/(4分); H->Elements[i/2] > key; i/=2 ) 6 //(4分);
7 H->Elements[i] = key; 8 }
3-2
下列代碼的功能是將一列元素{ r[1] … r[n] }按非遞減順序排序。普通選擇排序是每次僅將一個待排序列的最小元放到正確的位置上,而這個另類的選擇排序是每次從待排序列中同時找到最小元和最大元,把它們放到最終的正確位置上。
1 void sort( list r[], int n ) 2 { 3 int i, j, mini, maxi; 4
5 for (i=1; i<n-i+1; i++) { 6 mini = maxi = i; 7 for( j=i+1; /**/(4分); ++j ){ 8 if( /**/(4分) ) mini = j; 9 else if(r[j]->key > r[maxi]->key) maxi = j; 10 } 11 if( /**/(4分) ) swap(&r[mini], &r[i]); 12 if( maxi != n-i+1 ){ 13 if( /**/(4分) ) swap(&r[mini], &r[n-i+1]); 14 else swap(&r[maxi], &r[n-i+1]); 15 } 16 } 17 }
3-3
本題要求給出希爾排序對給定初始序列{9, 8, 7, 6, 5, 4, 3, 2, 1}利用增量序列{1, 3, 7}進行排序的分步結果。將每步結果填在下列空中。注意:相鄰數字間必須有一個空格,開頭結尾不得有多余空格。
原始序列 9 8 7 6 5 4 3 2 1
增量7排序后 (2分)
增量3排序后 (2分)
增量1排序后 1 2 3 4 5 6 7 8 9
3-4
本題要求給出下圖中從A到其他頂點的最短路徑。注意:填空時不能有任何空格。
終點 路徑
A->B AB
A->C AC
A->D (2分)
A->E (2分)
A->F (2分)
A->G ABG
編程題:
Description:
本題要求根據給定的一棵二叉樹的后序遍歷和中序遍歷結果,輸出該樹的先序遍歷結果。
Input:
第一行給出正整數N(<=30)是樹中結點的個數。隨后兩行,每行給出N個整數,分別對應后序遍歷和中序遍歷結果,數字間以空格分隔。題目保證輸入正確對應一棵二叉樹。
Output:
在一行中輸出Preorder:
以及該樹的先序遍歷結果。數字間有1個空格,行末不得有多余空格。
Sample Input:
7
2 3 1 5 7 6 4
1 2 3 4 5 6 7
Sample Output:
Preorder: 4 1 3 2 6 5 7
判斷題:FFTFF
選擇題:CCBDB CBDAC CDCBB BBADA
程序填空題:
P H->Elements[i] = H->Elements[i/2]
j < n-i+1 r[j]->key < r[mini]->key mini != i maxi == i
2 1 7 6 5 4 3 9 8 2 1 4 3 5 7 6 9 8
ABGED ABGE ABGEF
編程題:
1 #include <cstdio>
2 #include <cstring>
3
4 void getpre(int *post, int *in, int n) 5 { 6 if(n <= 0) return; 7 int i = 0, root = post[n-1]; 8 for(; i<n; ++i) { 9 if(in[i] == root) break; 10 } 11 printf(" %d", root); 12 getpre(post, in, i); 13 getpre(post+i, in+i+1, n-i-1); 14 } 15
16 int main() 17 { 18 int n, post[40], in[40]; 19 scanf("%d", &n); 20 for(int i=0; i<n; ++i) { 21 scanf("%d", &post[i]); 22 } 23 for(int i=0; i<n; ++i) { 24 scanf("%d", &in[i]); 25 } 26
27 printf("Preorder:"); 28 getpre(post, in, n); 29
30 return 0; 31 }
// Fin