《數(shù)據(jù)結(jié)構(gòu)期末考試復(fù)習(xí)題及答案》由會(huì)員分享,可在線閱讀,更多相關(guān)《數(shù)據(jù)結(jié)構(gòu)期末考試復(fù)習(xí)題及答案(7頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、1. 什么是最小生成樹(shù)?簡(jiǎn)述最小生成樹(shù)的Prime算法的思想。
答:最小生成樹(shù)就是構(gòu)造一棵生成樹(shù),使得樹(shù)上各邊的代價(jià)之和最小。
普里姆算法(Prim)的基本思想:
從連通網(wǎng)絡(luò) N = { V, E }中的某一頂點(diǎn) u0 出發(fā),選擇與它關(guān)聯(lián)的具有最小權(quán)值的邊(u0, v),將其頂點(diǎn)加入到生成樹(shù)的頂點(diǎn)集合U中。以后每一步從一個(gè)頂點(diǎn)在U中,而另一個(gè)頂點(diǎn)不在U中的各條邊中選擇權(quán)值最小的邊(u, v),把它的頂點(diǎn)加入到集合U中。如此繼續(xù)下去,直到網(wǎng)絡(luò)中的所有頂點(diǎn)都加入到生成樹(shù)頂點(diǎn)集合U中為止。
2. 簡(jiǎn)述AOV網(wǎng)絡(luò)中為何不能出現(xiàn)回路,如何判斷AOV網(wǎng)絡(luò)是否有回路?
答:在AO
2、V網(wǎng)絡(luò)中,如果活動(dòng)vi必須在vj之前進(jìn)行,則稱為存在有向邊;在AOV網(wǎng)絡(luò)中不能出現(xiàn)有向回路,如果出現(xiàn)了,則意味著某項(xiàng)活動(dòng)應(yīng)以自己作為先決條件。
如何檢查AOV網(wǎng)是否存在有向環(huán):
檢測(cè)有向環(huán)的一種方法是對(duì)AOV網(wǎng)絡(luò)構(gòu)造它的拓?fù)溆行蛐蛄小<磳⒏鱾€(gè)頂點(diǎn)(代表各個(gè)活動(dòng))排列成一個(gè)線性有序的序列,使得AOV網(wǎng)絡(luò)中所有應(yīng)存在的前驅(qū)和后繼關(guān)系都能得到滿足。
(1)這種構(gòu)造AOV網(wǎng)絡(luò)全部頂點(diǎn)的拓?fù)溆行蛐蛄械倪\(yùn)算就叫做拓?fù)渑判颉?
(2)如果通過(guò)拓?fù)渑判蚰軐OV網(wǎng)絡(luò)的所有頂點(diǎn)都排入一個(gè)拓?fù)溆行虻男蛄兄?,則該AOV網(wǎng)絡(luò)中必定不會(huì)出現(xiàn)有向環(huán);相反,如果得不到滿足要求的拓?fù)溆行蛐蛄校瑒t說(shuō)明AOV網(wǎng)絡(luò)中
3、存在有向環(huán),此AOV網(wǎng)絡(luò)所代表的工程是不可行的。
3. 為何需要采用循環(huán)隊(duì)列?n個(gè)空間的循環(huán)隊(duì)列,最多存儲(chǔ)多少個(gè)元素?為什么?
答:循環(huán)隊(duì)列以克服順序隊(duì)列的"假上溢"現(xiàn)象,能夠使存儲(chǔ)隊(duì)列的向量空間得到充分的利用,所以采用循環(huán)隊(duì)列。
n個(gè)空間的循環(huán)隊(duì)列,最多存儲(chǔ)n-1個(gè)元素,那是為了區(qū)別循環(huán)隊(duì)列的隊(duì)空和隊(duì)滿的條件。隊(duì)空的條件是Q.front==Q.rear,而隊(duì)滿的條件是(Q.rear+1)%N==Q.front(N是數(shù)組中單元的總數(shù)),因此,Q.rear所指向的數(shù)組單元處于未用狀態(tài)。所以說(shuō),N個(gè)單元的數(shù)組所存放的循環(huán)隊(duì)列最大長(zhǎng)度是N-1。
4. 簡(jiǎn)述堆的刪除算法,其刪
4、除的是那個(gè)值?
答:堆的刪除算法:首先,移除根節(jié)點(diǎn)的元素(并把根節(jié)點(diǎn)作為當(dāng)前結(jié)點(diǎn))比較當(dāng)前結(jié)點(diǎn)的兩個(gè)孩子結(jié)點(diǎn)的元素大小,把較大的那個(gè)元素移給當(dāng)前結(jié)點(diǎn),接著把被移除元素的孩子結(jié)點(diǎn)作為當(dāng)前結(jié)點(diǎn),并再比較當(dāng)前結(jié)點(diǎn)的孩子的大小,以此循環(huán),直到最后一個(gè)葉子結(jié)點(diǎn)的值大于或等于當(dāng)前結(jié)點(diǎn)的孩子結(jié)點(diǎn)或孩子結(jié)點(diǎn)的位置超過(guò)了樹(shù)中元素的個(gè)數(shù),則退出循環(huán)。最后把最后葉子結(jié)點(diǎn)的元素移給當(dāng)前結(jié)點(diǎn)。
在堆的算法里面,刪除的值為根值。
5. 線索二叉樹(shù)中,什么是線索,它是否唯一?可有根據(jù)什么順序得到?
答:指向直接前驅(qū)結(jié)點(diǎn)和指向直接后續(xù)結(jié)點(diǎn)的指針被稱為線索(Thread),加了線索的二叉樹(shù)稱為線索二叉樹(shù)。線索二
5、叉樹(shù)是唯一的,因?yàn)橹老刃虮闅v后,第一個(gè)根是唯一確定的,然后在中序遍歷里這個(gè)根將它分為兩個(gè)部分,第一個(gè)根的兩棵子樹(shù)的根也會(huì)唯一確定,依次此類推,所有子樹(shù)的根都唯一確定,二叉樹(shù)就是唯一的。
6. 鏈?zhǔn)讲迦肱判驅(qū)Ρ戎苯硬迦肱判蛴泻蝺?yōu)點(diǎn)和缺點(diǎn)?
答:鏈?zhǔn)讲迦肱判騼?yōu)點(diǎn)是速度極快,特別是在數(shù)據(jù)量大的時(shí)候效果尤為明顯;其缺點(diǎn)是在數(shù)據(jù)量少的情況下內(nèi)存相對(duì)消耗較多。直接插入排序優(yōu)點(diǎn)是排序比較簡(jiǎn)單,穩(wěn)定性高;缺點(diǎn)是在數(shù)據(jù)量很大的情況下效率很低。
所以鏈?zhǔn)讲迦肱判蜻m合數(shù)據(jù)量大的情況,直接插入排序適合數(shù)據(jù)量少的情況。
7. 畫(huà)出該圖的鄰接矩陣和鄰接表。根據(jù)鄰接表從A開(kāi)始求DFS(
6、深度優(yōu)先搜索)和BFS(廣度優(yōu)先搜索)序列。
A
B
C
D
E
F
答:
DFS:A->C->F->E->D->B
BFS: A->C->B->F->D->E
8. 已知序列[70,73,69,23,93,18,11,68],請(qǐng)給出直接插入排序作升序排序每一趟的結(jié)果和快速排序作為升序排序時(shí)一趟的結(jié)果。
答:
直接插入排序
70 73 69 23 93 18 11 68
70 73 69 23 93 18 11 68
69 70 73 23 93 18 11 68
7、23 69 70 73 93 18 11 68
23 69 70 73 93 18 11 68
18 23 69 70 73 93 11 68
11 18 23 69 70 73 93 68
11 18 23 68 69 70 73 93
快速排序
R1 R2 R3 R4 R5 R6 R7 R8 left right
[70 73 69 23 93 18 11 68] 1
8、 10
[68 11 69 23 18] 70 [93 73] 1 5
[18 11 23] 68 [69] 70 [93 73] 1 3
[11] 18 [23] 68 [69] 70 [93 73] 7 8
[11 18 23 68 69 70 [73 93]
9.下圖表示一個(gè)地區(qū)的交通網(wǎng),頂點(diǎn)表示城市,邊表示連結(jié)城市間的公路,邊上的權(quán)表示修建公路花費(fèi)的代價(jià)。怎樣選擇能夠溝通每個(gè)城市且總造價(jià)最省的n-1條公路,畫(huà)出所有可能的方案。
答:
2
9、
1
1
3
6
4
5
1 1
1 5
10. 已知一個(gè)無(wú)向圖的鄰接表如下圖所示:
(1) 畫(huà)出這個(gè)圖。
(2) 以v1為出發(fā)點(diǎn),對(duì)圖進(jìn)行廣度優(yōu)先搜索和深度優(yōu)先搜索。給出搜索的結(jié)點(diǎn)序列。
5
2
3
1
0
4
答:
(1)
(2).
DFS: 0->1->3->4->5->2
BFS: 0->1->2->3->5->4
11. 設(shè)有一組關(guān)鍵字(70,7
10、3,69,23,93,18,11,68),設(shè)提供的散列表長(zhǎng)度為12,用除留余數(shù)法設(shè)計(jì)散列函數(shù),取的較恰當(dāng)除數(shù)應(yīng)為多少。采用線性探測(cè)方法解決散列沖突,請(qǐng)構(gòu)造其散列表并將所有關(guān)鍵字入表。
答:
因?yàn)樯⒘斜黹L(zhǎng)度為12,且除數(shù)應(yīng)盡量取基數(shù);所以為11.
經(jīng)檢驗(yàn):70%11=4;73%11=7;69%11=3;23%11=1; 93%11=3; 18%11=7;
11%11=0; 18%11=2;
采用線性探測(cè)的哈希表(12個(gè)桶,每個(gè)桶一個(gè)槽)
11
23
18
69
70
93
73
18
12
11、. 用最短路徑算法Dijkstra計(jì)算單源多目標(biāo)最短路徑。圖中的“1”號(hào)結(jié)點(diǎn)為源結(jié)點(diǎn)。按提示圖表給出每一步計(jì)算時(shí)最短路徑的變化。
1
0
4
3
2
10
100
30
50
20
60
10
5
10
答:
dist[6]存放從頂點(diǎn)v0到其他各頂點(diǎn)的當(dāng)前最短路徑。
Path[6]存放在最短路徑上該定點(diǎn)的前一頂點(diǎn)。
S[6]存放以求得的在最短路徑上的定點(diǎn)集合V[6]存放所有頂點(diǎn)
0
1
2
3
4
5
S
V-S
Dist
path
∞
1
50
1
∞
1
∞
1
∞
1
1
0,2,3,4,5
D
12、ist
path
60
2
∞
1
∞
1
∞
1
1,2
0,3,4,5
Dist
path
90
0
160
0
∞
1
1,2,0
3,4,5
Dist
path
150
3
110
3
1,2,0,3
4,5
Dist
path
120
5
1,2,0,3,5
4
Dist
path
1,2,0,3,5,4
13.完成下面二叉搜索樹(shù)查找插入程序(說(shuō)明含義)。此程序使用的是什么算法?根據(jù)給出的結(jié)點(diǎn)圖給出結(jié)點(diǎn)類
13、的數(shù)據(jù)成員描述。
Lchild
data
Rchild
template
bool BST::search_and_insert(
Binnode *&sub_root, const Elem &new_data)
{
if (sub_root == NULL) {
sub_root = new Binnode(new_data);
return ture;
}
else if (new_data < sub_root->data)
14、 return search_and_insert(sub_root->lchild, new_data);
else if (new_data > sub_root->data)
return search_and_insert(sub_root->rchild, new_data);
else return false; }
算法:在該函數(shù)中引用一個(gè)指向Binnode指針sub_root和指向ELEM類型的指針new_data,如果指向Binonode的指針sub_root為空,則該指針指向一個(gè)帶ELEM類型數(shù)據(jù)的新結(jié)點(diǎn)。如果sub_root
15、所指向的不為空,則比較sub_root->data與new-data的大小,當(dāng)new_datadata,則遞歸調(diào)用該函數(shù),并把sub_root->lchild作為引用指針;如果sub_root->data