連結串列學習(6)

王小東大將軍發表於2017-06-18

1.設順序表的長度為n。下列最壞情況下比較次數小於n的是(A)

A 尋找最大項  B 堆排序 C 快速排序    D 順序查詢法

分析:在順序表中查詢最大項,最壞情況比較次數為 n-1 ;順序查詢法最壞情況下比較次數為 n 。快速排序在最壞情況下需要進行 n(n-1)/2 、堆排序需要 nlog2n ,這兩種方法無法確定比較次數是否小於 n 。故本題答案為 A 項。

 

2.棧和連結串列是兩種不同的資料結構


3.用鄰接表表示圖進行深度優先遍歷時,通常採用棧來實現演算法。

 

4.將N條長度均為M的有序連結串列進行合併,合併以後的連結串列也保持有序,資料複雜度為:O(N*M*logN)

分析:1). 在每一個連結串列中取出第一個值,然後把它們放在一個大小為N的陣列裡,然後把這個陣列當成heap建成小(大)根堆。此步驟的時間複雜度為O(N)

2). 取出堆中的最小值(也是陣列的第一個值), 然後把該最小值所處的連結串列的下一個值放在陣列的第一個位置。如果連結串列中有一個已經為空(元素已經都被取出),則改變heap的大小。此步驟的時間複雜度為O(lg N).

3). 不斷的重複步驟二,直到所有的連結串列都為空。

建堆只建一次,複雜度為O(N);調整堆MN-1次,複雜度為(MN-1)*O(lg N)。所以為O(MN*lg N)

 

分析二:1)、兩兩合併連結串列。合併連結串列複雜度 * 一次合併次數 * 所有合併次數。兩兩合併的複雜度會指數遞增,合併數會指數遞減。一共應該是log(N)次。前面的合併複雜度較高。所以一般不採用該方法來合併連結串列。

2)、利用堆來合併,( O(N) + O(log N * N )) * M。先利用最連結串列第一個數,N個數建立堆,複雜度 O (N),重構堆,並排序,複雜度 O(logN * N )每個連結串列M個數,上述兩步重複M次。結果為 M * (O(N) +O(logN * N))= O (M * N * logN)。

 

5.元素在集合中有序,指的是元素插入過程中記錄了元素的插入順序。

 

6.設一個連結串列最常用的操作是在末尾插入結點和刪除尾結點,則選用(D)最節省時間。

A 單連結串列                 B 單迴圈連結串列 C帶尾指標的單迴圈連結串列    D帶頭結點的雙迴圈連結串列

分析:首先總在末位操作。所以使用迴圈連結串列。又因為要執行刪除操作。若使用單迴圈連結串列,例如對....->X->Y>Z->...,Y刪除後無法一步訪問X。若雙迴圈連結串列,可向回訪問。所以選D。


7.線性表的順序儲存結構是一種隨機存取結構,線性結構的鏈式儲存是一種順序儲存的儲存結構。

 

8.鄰接表是圖的一種順序儲存結構。

 

9.對順序表而言,刪除第一個元素就需要後續元素都向前移動一個位置。每刪除一次都需要移動大量元素,因此不宜採用。

 

10.在有n個葉子節點的哈夫曼樹中,總結點數是:2n-1;

帶頭結點的雙迴圈連結串列L為空表的條件是:L->next=L;

 

11.雙向連結串列插入、刪除點選開啟連結

雙向連結串列的插入順序:先搞定插入節點的前驅和後繼,再搞定後節點的前驅,最後搞定前節點的後繼。

 

12.靜態連結串列中指標表示的是:陣列下標

分析:靜態連結串列:陣列的每一個下標都對應一個data和一個cur。資料域data用來存放資料元素,;而遊標cur相當於單連結串列中的next指標,存放該元素的後繼在陣列中的下標。

 

13. 在棧中,棧底指標保持不變,有元素入棧,棧頂指名增加,有元素出棧,棧頂指標減少。

迴圈佇列中,隊頭指標和隊尾指標的動態變化決定佇列的長度。在迴圈連結串列中,前一個結點指向後一個結點,而最後一個結點指向頭結點,只有頭結點是固定的。線性連結串列中,由於前一個結點包含下一個結點的指標,尾結點指標為空,要插入或刪除元素,只需要改變相應位置的結點指標即可,頭指標和尾指標無法決定連結串列長度

 

14.某帶鏈的佇列初始化狀態為front=rear=NULL,經過一系列正常的入隊與退隊操作後,front=rear=10.該佇列中元素個數:1。

 

分析:往佇列的隊尾插入一個元素為入隊,從佇列的排頭刪除一個元素稱為退隊。初始時 front=rear=0 , front 總是指向隊頭元素的前一位置,入隊一次 rear+1 ,退隊一次 front+1 。佇列隊頭隊尾指標相同時佇列為空。而帶鏈的佇列,由於每個元素都包含一個指標域指向下一個元素,當帶鏈佇列為空時 front=rear=Null ,插入第 1 個元素時, rear+1 指向該元素, front+1 也指向該元素,插入第 2 個元素時 rear+1 , front 不變,刪除 1 個元素時 front+1 即front=rear 不為空時帶鏈的佇列中只有一個元素

 

15. 廣義表:是線性表的擴充套件,具體定義為n(n>=0)個元素的有限集合。其中元素有以下兩種型別:

1)一個原子元素(指不可再分的元素)

2)一個可以再分的元素(或稱為一個子表)

如果所有元素都是原子元素,則稱為線性表,如果含有子表,則是廣義表。n的值是廣義表的長度,如果n=0,稱廣義表為空表。

 

常見的廣義表為:

A=(); B=(()); C=(alb); D=(A,B,C); E=(a,E)

廣義表中含有元素的個數稱為廣義表的長度,廣義表中含有的括號對數稱為廣義表的深度

 

從上述定義和例子可推出列表的3個重要結論:

1)列表的元素可以是子表,而子表的元素還可以是子子表…由此,列表是一個多層次的結構

2)列表可為其他列表所共享。如列表D可以直接引用其他列表。3)列表可以是一個遞迴的表,即列表也可以是其本身的一個子表。

 

廣義表可看成是一種特殊的線性表,表中的資料元素本身也是一種線性表。

 

16.在一個帶頭結點的單連結串列HL中,若要在第一個元素之前插入一個由指標p指向的結點,則執行?

C p->next=HL->next;HL->next=p;

注意:頭指標不是第一個元素,僅僅是一個標識,並不指向第一個元素。

 

17. (1)由題設條件可知,硬碟大小為540MB且磁碟物理塊大小為1KB時,該硬碟共有盤塊540MB/1KB = 540K個。

又因為219<540K<220,所以540K個盤塊號需要用20位二進位制數表示,也即檔案分配表FAT的每個表項為20/8=2.5B。所以,540MB磁碟的FAT需佔用儲存空間容量為:

2.5B×540K=1350KB

(2)當硬碟容量大小為1.2GB時,硬碟共有盤塊1.2M個。

又因為220<1.2M <221,所以1.2M個盤塊號需要用21位二進位制數表示,為了方便FAT的存取,則每個表項用24位(3B)二進位制數表示。所以,1.2GB磁碟的FAT需佔用儲存空間容量為:

3B×1.2M=3.6MB

 

分析二:1B=8bit,序號只能是4的倍數。
物理塊大小1KB,540MB,即540K個分割槽,計算2^19<540K<2^20,所以序號是20個bit,且20是4的倍數。每個序號需要20/8=2.5B的空間儲存。
540MB需要540K*2.5B=1350KB即1.35M。

1.2GB,即1200K個分割槽,2^20<1200K<2^21,也就是需要21個bit才能儲存,但是序號只能是4個倍數,所以需要24個bit,也就是3B的空間。1.2GB需要1200K*3B=3600KB即3.6M

 

18. A.單連結串列的每個節點都具有唯一的前驅節點和唯一的後繼節點,所以當兩個單連結串列存在相交的節點時,這兩個連結串列則同時擁有這個節點,以及這個節點的所有後繼節點,當這個公共節點是尾節點時,他們則只含有公共一個節點-------尾節點。

 

B.快慢指標是判斷單連結串列是否有環的一種方法:兩個指標,每次移動的步長為2叫做快指標,每次移動步長為1的指標叫做慢指標。快慢指標同時從頭結點出發,當快指標率先到達NULL的時候,則說明此單連結串列中不存在環,當快指標追上慢指標的時候,說明此單連結串列中存在環

 

C.有環的單向連結串列和無環的單向連結串列不能相交,因為當相交的時候,無環的單向連結串列也會被迫存在一個環,只不過這個環的”起點“可能不是原來單向連結串列的頭結點。

D. 兩個單向連結串列之間相交可以存在環。

 

19.迴圈單連結串列的最大優點是:從表中任一結點出發均可找到表中其它結點。

 

20.

資料結構   search              insert     delete

陣列        O(N),有序陣列       O(N)      O(N)

折半查詢就是O(logN)

雙向連結串列   O(N)                O(1)      O(1)

排序二叉樹 O(logN)                 O(logN)   O(logN)

雜湊表     O(1)                O(1)      O(1)


雜湊表插入的時間複雜度與衝突次數有關,O(衝突次數/n),最好的情況衝突次數為0,直接插入,時間複雜度為O(1)。最壞情況是所有值對應同一個鍵值,這是衝突次數最多,為0+1+2+3+4+…+(n-1)=n*(n-1)/2,平均比較次數為(n-1)/2,時間複雜度為O(n) 。

 

紅黑數 
一、紅黑樹是每個節點都帶有顏色屬性的二叉查詢樹,顏色或紅色或黑色。在二叉查詢樹強制一般要求以外,對於任何有效的紅黑樹我們增加了如下的額外要求:
性質1.節點是紅色或黑色。
性質2.根節點是黑色。
性質3每個葉節點(NIL節點,空節點)是黑色的。
性質4每個紅色節點的兩個子節點都是黑色。(從每個葉子到根的所有路徑上不能有兩個連續的紅色節點)
性質5.從任一節點到其每個葉子的所有路徑都包含相同數目的黑色節點。

二、 紅黑樹是二叉搜尋樹的一種。它與普通二叉搜尋樹不同的是,紅黑樹的每個節點都附加了另一個屬性――顏色,可以是紅色,也可以是黑色。通過對於每條路徑上節點顏色的規則進行限定,紅黑樹可以保證任何兩條從根部到樹葉的路徑節點個數相差不超過2倍。所以,紅黑樹是一種近似平衡的二叉搜尋樹。 

三、紅黑樹的查詢、最大值、最小值、前趨、後繼等操作,與普通的二叉搜尋樹沒有什麼區別。插入和刪除操作需要重新實現。僅僅用普通的二叉搜尋樹的插入和刪除動作,可能會破壞紅黑樹本身的一些性質,因此,需要進行額外的處理。這些額外的處理主要是改變樹節點的顏色,或是改變樹的結構。

 

小結

       B樹:二叉樹,每個結點只儲存一個關鍵字,等於則命中,小於走左結點,大於走右結點;

       B-樹:多路搜尋樹,每個結點儲存M/2到M個關鍵字,非葉子結點儲存指向關鍵字範圍的子結點;所有關鍵字在整顆樹中出現,且只出現一次,非葉子結點可以命中;

       B+樹:在B-樹基礎上,為葉子結點增加連結串列指標,所有關鍵字都在葉子結點中出現,非葉子結點作為葉子結點的索引;B+樹總是到葉子結點才命中;

       B*樹:在B+樹基礎上,為非葉子結點也增加連結串列指標,將結點的最低利用率從1/2提高到2/3;

 

 

相關文章