數據結構筆記匯總

1.   邏輯結構:線性和非線性

線性:  線性(1:1、棧、隊、數組

非線性:樹形(1:多)圖形(多:多)

存儲結構:順序(數組)、鏈式(指針)

2.   邏輯結構與元素相對位置無關

鏈式存儲物理地址和邏輯地址不一定相同連續,所以它記憶體中可存儲單元的地址/數據結點地址:連續與否都可以

3.   (解釋)不生成可執行文件

4.   讀取元素花費時間最少順序表

5.   在具有 n 個結點的單鏈表上查找值為 x 的元素時,其時間複雜度為On

6.   設指針 q 指向單鏈表中結點 A,指針 p 指向單鏈表中結點 A 的後繼結點 B,指針 s 指向被插的結點 X,則在結點 A 和結點 B 結點 X 的操作序列為:q->next=s;s->next=p;

7.   訪問第 i 個元素的前驅(1<i<=n)的時間複雜度為O1

8.   添加/刪除操作

單鏈表

      

帶頭結點的單鏈表

帶頭結點的雙循環單鏈表

單鏈表的頭插法建立鏈表

單鏈表的頭插法建鏈表所得到的數據的順序與輸的時候的順序相反

單鏈表的頭插法建鏈表演算法不簡單,要引⼊⼤量的指針輔助運算。(F

單鏈表的尾插發建立鏈表

單鏈表的尾插法建鏈表所得到的數據的順序與輸的時候的順序相同

雙鏈表

帶頭結點的雙循環鏈表

鏈式存儲的後插法

帶頭結點的雙循環鏈表的空表

 

9.   3n+nlog2n+n2+8的數量級:n2

10.  演算法的評價不包括並行性

11.  集合中任何兩個結點之間都有邏輯關係但組織形式鬆散(F

12.  數據元素具有相同的特性=數據項個數相同,類型一致

13.  數據在電腦存儲器內表示時,物理地址與邏輯地址相同並且是連續的,稱之為順序存儲結構

14.  演算法

定義:有限序列

目的:分析效率求改進

15.  高效性:指演算法的執行效率高(T

指演算法需要的時間性能(F

16.  鏈表

Malloc()申請

Free()釋放

個帶頭結點的雙向循環鏈表中,若要在 p 所指向的結點之前插⼊⼀個新結點,則需要相繼修改(4)個指針域的值

1、該新結點前驅指針指向p的前驅

2p的前驅指針指向該新結點

3、該新結點的後繼域指向p結點

4、前驅的後繼域指向該新結點

17.  線性表

在進添加/刪除元素時,應該在刪除元素前判空

                          在添加元素前判空(F

可以在任何位置插入刪除

除第個和最後個元素外,其餘每個元素都由個且僅有個直接前驅和直接後繼

元素之間的邏輯關係是通過(物理位置)決定的.

有限序列,可以為空

串是種特殊的線性表

兩種存儲結構:線性和鏈式

線性錶鏈式

線性錶鏈式:插入刪除方便只需要向前或向後移動元素即可(F

線性表鏈接存儲

    鏈表是種動態存儲結構,鏈表的結點可調申請 malloc() free()釋放

                                          鏈表的結點可free()申請和malloc()釋放F

鏈表是隨機存取存儲結構,對鏈表的存取必須從頭指針開始

                         對鏈表的存取可以從任何結點開始F

刪除運算便;只需修改相應指針值

                    只需要向前或向後移動元素即可F

邏輯上相鄰的元素,其物理位置定相鄰,元素之間的鄰接關係由指針域指示

不需要預先分配存儲空間,適用於數據量變化較大的情況

    表的長度:數據結點的個數

    適用於經常進行插入和刪除的操作

鏈接存儲的存儲結構所佔存儲空間分兩部分,部分存放結點值,另部分存放表示結點間關係的指針

線性表順序存儲

不便於插入和刪除的實現,而鏈式存儲便於

適用於變化量小的情況

必須按最可能度預分存儲空間,存儲空間利率低,表的容量難以擴充,靜態存儲結構

是一種隨機存取結構

適用於經常進行存取的操作

刪除時的最壞情況:要刪除的元素是順序表的第一個元素

刪除時的最好情況:要刪除的元素是順序表的最後一個元素

要求能夠較快的插和刪除,要求儲存結構能夠反映數據元素之間的邏輯關係則應該以順序儲存式儲存

度為 n 的順序存儲的線性表中,向第 i 個元素(1<=i<=n+1)位置插⼊⼀個新元素時,需要從後向前依次後移(n-i+1)個元素

線性表一旦建立,就不能添加元素(F

最後一個元素之後插入一個元素和刪除最後一個元素,採用容量足夠大的順序表

長度為n,刪除第i個元素,要向前移動n-1個元素

長度為n,第i個位置插入一個新元素,時間複雜度為On

線性表是n數據元素的有限序列(所以學院組織結構表就不是線性表)

順序線性表中有 n 個數據元素,則刪除表中第 i 個元素需要移動(n-1)個元素

18.  順序表

刪除操作時,應該將表的長度-1

⼊⼀個元素所需移動的元素平均數是n+1/2

順序表的度是指:表中數據元素的個數

個有 127 個元素的順序表中插⼊⼀個新元素並保持原來順序不變,平均要移動(63.5)個元素

度為 n 的順序表中,刪除值為 x 的元素時需要較元素和移動元素的總次數為n

表尾插⼊⼀個元素的時間複雜性的量級為O(1)

19.  數組

邏輯結構à線性結構

存儲結構à順序結構

維數組中有 n 個數組元素,則讀取值為 x 的數據元素的平均時間複雜度為O(n)

維數組中有 n 個數組元素,則讀取第 i 個數組元素的平均時間複雜度為0(1)

假定利數組 a[N]順序存儲個棧, top 表示棧頂指針,top==-1 表示棧空,並已知棧未滿,當元素 x進棧時所執的操作為a[++top]= x

個具有 n 個單元的順序棧中,假定以地址低端(即 0 單元)作為棧底,以 top 作為棧頂指針,則當做出棧處理時,top 變化為top—

20.  隊列

先進先出

只能在隊尾添加/插入新元素

只能在隊首刪除元素

論是順序存儲還是鏈接存儲的棧和隊列,進或刪除運算的時間複雜性均為O(1)

順序隊進元素隊時最的問題是會出現假溢出現象

隊列是被限定為只能在表的端進運算,在表的另端進刪除運算的線性表

當利⽤⼤⼩ N 的數組存儲循環隊列時,該隊列的最⼤⻓度是n

個順序循環隊列中刪除元素時,先需要後移隊首指針

判定個隊列 QU(最多元素為 m0)為滿隊列的條件是QU->rear QU->front = = m0

個鏈隊列中,front rear 分別為頭指針和尾指針,則插⼊⼀個結點 s 的操作為rear->next=s;rear=s;

n 個結點的雙向鏈表中指針 p 所指向的結點之前插⼊⼀個新結點時,其時間複雜性的量級為O(1)

21. 

先進後出,後進先出

只能在棧頂插入/刪除操作

向順序棧中插新的元素分三步,分別是:斷溢出或棧滿棧頂指針新元給棧頂單元

從順序棧中刪除元素分三步,分別是:判斷棧空 棧頂指針的值返回 修改棧頂指針

向棧中壓元素的操作是:先移動棧頂指針,然後存元素

鏈表作為棧的存儲結構則退棧操作:必須判別棧是否為空

鏈表作為棧的存儲結構則進棧操作:對棧不作任何判別

順序棧中在做出棧運算時,應先判別棧是否為空

順序棧中在做進棧運算時,應先判別棧是否為滿

Pushpop

設棧 S 和隊列 Q 的初始狀態為空,元素 e1,e2,e3,e4,e5,e6依次通過棧 S個元素出棧後即進隊列 Q,若 6 個元素出隊的序列是 e2,e4,e3,e6,e5,e1,則棧的容量少應該是3

個棧的輸序列為:1,2,3,4,則棧的不可能輸出的序列是4321

印表機à隊列

判定個順序棧 ST(最多元素為 m0)為空的條件是ST->top==0

假定個鏈式棧的棧頂指針 top 表示,每個結點的結構具有兩個域 data next,出棧時進的指針操作top=top->next

刪除空的順序存儲結構的堆棧的棧頂元素,棧頂指針 top 的變化是top=top-1

個棧頂指針為 hs 的鏈棧中插⼊⼀*s 結點時,應執s->next=hshs=s

順序棧中當棧中元素為 m 時,做進棧運算時發上溢,則說明棧的可容量為m

判定個順序棧的 S(最多元素時 m0)為滿的條件是S->top==m0-1

為了增加記憶體空間的利率和減少發上溢的可能性,由兩個棧共享⼀⽚連續的記憶體空間時,應將兩個

棧的(棧底)分別設在這記憶體空間的兩端,這樣只有當兩個棧的棧頂在棧空間的某位置相遇時才產上溢

設輸序列 123n 經過棧作後,輸出序列中的第個元素是 n,則輸出序列中的第 i 個輸出元素是n+1-i

判定個順序棧 S(棧空間⼤⼩ n)為空的條件是S->top==0

設輸序列為 123456,則通過棧的作後可以得到的輸出序列為:325641

設指針變數 front 表示鏈式隊列的隊頭指針,指針變數 rear 表示鏈式隊列的隊尾指針,指針變數 s 指向將要隊列的結點 X,則隊列的操作序列為rear->next=srear=s

解決順序隊上溢的

1、每當刪除個隊頭元素時,則依次移動隊中的元素,始終使 front 指針指向隊列中的第個位置

2、采平移元素的:每當隊列中加⼊⼀個元素時,隊列中已有的元素向隊頭移動個位置

3、建⽴⼀的存儲空間,但這樣做會造成空間的使效率降低

4、發上溢時,動丟失多餘元素(F)

22.  單鏈表

已知單鏈表尾指針,時間複雜度為O(1)

單鏈表中設置頭結點:空表和非空表統一,演算法處理一致

空的循環單鏈表 head 的尾結點(由 p 所指向),滿條件:p->next==head

度為 n 的單鏈錶鏈接在度為 m 的單鏈表之後的演算法的時間複雜度為O(m)

個單鏈表中,若刪除 p 所指向結點的後續結點(=單鏈表中指針 p 指向結點 m,若要刪除 m 之後的結點(若存在),則需要修改指針的操作為),則執p->next=p->next->next;

單鏈表中 n 個數據結點,則讀第 i 個數據結點的平均時間複雜度為On

對於個具有 n 個結點的單鏈表,在已知的結點*p 後插⼊⼀個新結點的時間複雜性為O(1)

單鏈表的判空條件

不帶頭結點的單鏈表head為空:head=null

條單鏈表的頭指針變數為 head 且該鏈表沒有頭結點,判空:head=0

23. 

à層次

二叉樹不是特殊的樹,使用不是樹轉化過來的特殊情形

叉樹與樹具有相同的樹形結構(F

二叉樹是非線性數據結構,順序存儲結構和鏈式存儲結構都能存儲,但,不是所有的叉樹樹形結構都適順序存儲結構

若初始森林中共有 n 叉樹,進 2n-1 次合併後才能剩下棵最終的哈夫曼樹(F

標串的度為 n,模式串的度為[n/3],則執模式匹配演算法時,在最壞情況下的時間複雜度是O(n2)

分支

叉樹上葉節點數為 n0,雙分數為,單分數為 n1,則n0=n2+1

深度

深度為 k 的完全叉樹中最少有(2k-1)個結點

棵完全叉樹中有 65個結點,則該完全叉樹的深度為7,因為2n-1

叉樹有 n 個結點,則其深度無法確定

    結點數

叉樹的第 k 層的結點數最多為2k-1

叉樹上第 5 層的結點數最多為16個,因為2k-1

深度為 5 叉樹最少有(5)個結點

如果 T2是由有序樹 T 轉化來的叉樹,T後序結點=T2中序結點,T前序結點=T2前序結點

設某棵叉樹中有 2000 個結點,則該叉樹的最⼩⾼度為11,因為210=1024<2000211=2048>2000

棵樹中,每個結點最多有(1)個前驅結點

叉樹中第 i(i≥1)層上的結點數最多有(2i+1)個

n 個值成的哈夫曼樹中共有(2n-1)個結點.

叉樹根結點的層次為 0度為 h 的滿叉樹中的結點個數是2n+1-1

F 是由 T1T2 T3三棵樹組成的森林,與 F 對應的叉樹為 BT1T2 T3 的結點數分別為 N1 N3,則叉樹 B 的根結點的左樹的結點數為N1-1

對含有(1)個結點的叉樹,采任何種遍歷式,其結點訪問序列均相同

棵深度為 h 的滿 k 叉樹有如下性質: 第 h 層上的結點都是葉結點,其餘各層上的結點都有 k .如果按層次順序從 1 開始對全部結點編號,則各層上的結點數ki-1

實現任意叉樹,m 個樹葉, n 個結點,度為 1 的結點 t 個,度為 2 的結點有 p 個,則m=p+1

對於棵具有 n 個結點叉樹,當進鏈接存儲時,其叉鏈表中的指針域的總數為 2n,其中(n-1)個鏈接孩結點,(n+1)個空閑著

設深度為 k 叉樹上只有度為 0和度為 2的節點,則這類叉樹上所含結點總數最少2k-1

二叉樹共有5種不同的形態

具有 3 個結點的叉樹共有(5)種狀態.

設某棵叉樹中只有度數為 0 和度數為 2的結點且度數為 0 的結點數為 n,則這棵叉中共有(2n-1)個結點

叉樹中,度為 0 的結點個數為 n0,度為 2 的結點個數為,則 n=n2+1

    葉子結點

設某棵完全叉樹中有 100 個結點,則該叉樹中有(50)個葉結點

設某棵叉樹的度為 10,則該叉樹上葉結點最多有512

某哈夫曼樹中有 199 個結點,則該哈夫曼樹中有(100)個葉結點//n+1/2

指針域

m 叉樹的結點數為 n多重鏈表表示其存儲結構,則該樹中有n(m-1)+1)個空指針域

設哈夫曼樹中的結點總數為m,若叉鏈表作為存儲結構,則該哈夫曼樹中總共有2m)個空指針

.

N 個結點鏈接存儲,指針域總數 2n,鏈接孩結點 2n,空閑的有 n+1

    高度

對於個具有 n 個結點的叉樹,當它為(完全二叉樹)具有⼩⾼

具有 n(n>0)個結點的完全叉樹的度為[log 2 (n+1)][log 2 n]+1

對於個具有 n 個結點的叉樹,當它為棵(單分支叉樹時具有最⼤⾼.

對於個具有 n 個結點的叉樹,當它為單分⽀⼆叉樹時具有最⼤⾼度,其度為n

    帶權路徑長度

    左孩子、右孩子、雙親結點

將含有 83 個結點的完全叉樹從根結點開始編號,根為 1 號,後按從上到下、從左到右的順序對結

點編號,那麼編號為 41 的雙親結點編號為20

    三叉樹

        在三叉鏈表上,叉樹的求雙親運算很容易實現(F

        欲實現任意叉樹的後序遍歷的遞歸演算法不必使棧結構,最佳案是叉樹采(三叉鏈表)存儲結構.

棵具有 k 層的滿三叉樹中,結點總數為(3k-1)/2

棵三叉樹的結點數為 50,則它的最⼩⾼度為5

 

    哈夫曼樹

於通訊的電僅由 8個字組成,字在電中出現的頻率分別為

 

根據這些頻率作為權值構造哈夫曼樹,則這棵哈夫曼樹的度為7

先序、中序、後序遍歷

前序:第個結點 A 是根結點,是後序的最後個結點

前序:樹的第個結點為樹根結點

中序:根據前序的根節點,判斷是否有左右樹。

中序:–> 根節點–>

後序:–> –>根節點

先序: 根節點–>–>

 

 

    叉樹的先序遍歷序列和後序遍歷序列正好相反,則該叉樹滿的條件是結點右孩

叉樹的先序遍歷序列和後序遍歷序列正好相同,則該叉樹滿的條件是空或只有個結點

    叉樹的先序遍歷序列和中序遍歷序列正好相同,則該叉樹滿的條件是結點左孩

       已知叉樹的前序遍歷和後序遍歷序列並不能惟地確定這棵樹,因為不知道樹的根結點是哪個。(F

任何叉樹的葉結點在其先根、中根、後跟遍歷序列中的相對位置肯定不發生變化

任何叉樹的葉結點在先序、中序和後序遍歷序列中的相對次序不發生改變

叉樹結點的先根序列、中根序列和後根序列中,所有葉結點的先後順序完全相同

叉樹中,具有兩個⼦⼥結點,在中序遍歷序列中,它的後繼結點最多只能有⼦⼥結點

叉樹的前序和後序遍歷序列(不能)惟確定這棵叉樹

ab 叉樹上的兩個結點,在中序遍歷時,a b 前的條件是.a b

叉樹滿下列條件:對任意結點,若存在左、右樹,則其值都它的上所有結點的值,於右上所有結點的值.現采中根)遍歷式就可以得到這棵叉樹所有結點的遞增序列

叉樹有 n 個結點,要按某順序對該叉樹中的結點編號,(號碼為 1-n),編號須具有如下性質:

叉樹中任結點 V,其編號等於其左樹中結點的最編號加 1.其右樹中結點的最編號等於 V 的編號加 1.試問應按(中序)遍歷順序編號

叉鏈表上,求雙親運算的時間性能很好(F

叉判定樹應用在:描述分類過程和處理判定優化等⽅⾯

    後綴表達式

   

24. 

G1=(V1,E1) G2=(V2,E2)為兩個圖,如果 V1ÍV2,E1ÍE2 則稱.G1 G2

有向圖

某有向圖中有 n 個頂點,則該有向圖對應的鄰接表中有(n)個表頭結點

對於個有向圖,若個頂點的度為 k1,出度為 k2,則對應逆鄰接表中該頂點單鏈表中的邊結點數為k1-k2

圖的逆鄰接表存儲結構只適於(有向圖)圖

個具有 n 個頂點的有向圖中,若所有頂點的出度數之和為 s,則所有頂點的度數之和2s

個具有 n 個頂點的有向圖中,若所有頂點的出度數之和為 s,則所有頂點的度數之和s

個具有 n 個頂點的有向完全圖中,所含的邊數為n(n-1)

8 個結點的有向完全圖最多有(56)條邊,因為n(n-1)

無向圖

向圖 G 中有 n 個頂點 e 條邊,則⽤⽤鄰接表作為圖的存儲結構進深度優先或度優先遍歷的時間複雜度為O(n+e)

向圖 G 中有 n 個頂點 e 條邊,則其對應的鄰接表中的表頭結點和表結點的個數分別為n2e

設某有向圖的鄰接表中有 n 個表頭結點和 m 個表結點,則該圖中有(m)條有向邊

向圖 G 中有 n 個頂點 e 條邊,則鄰接矩陣作為圖的存儲結構進⾏⼴度優先遍歷時的時間複雜度為O(n2)

如果 n 個頂點的圖是個環,則它有(n)成樹

向圖G中有n個頂點e條邊,則鄰接表作為圖的存儲結構進深度優先遍歷時的時間複雜度為O(n2)

圖中的條路徑度為 k,該路徑所含的頂點數為k+1

n 個頂點的向圖 G 的頂點度數的最於或者等於(n)時,G 少有條迴路

在含 n 個頂點和 e 條邊的向圖的鄰接矩陣中,零元素的個數為n2-2e

對於個具有 n 個頂點和 e 條邊的向圖,若采鄰接表表示,則表頭數量為n

對於個具有 n 個頂點和 e 條邊的向圖,若采鄰接表表示,則所有鄰接表中的結點總數是2e

向圖有 n 個頂點和 e 條邊,則所有頂點的度的和為2e

一個無向圖有 n 個頂點和e 條邊,則該向圖中所有頂點的度之和為2e

個具有 n 個頂點和 e 條邊的向圖的鄰接矩陣中,表示邊存在的元素(稱為有效元素)的個數為2e

假設個有n個頂點和e條弧的有向圖鄰接表表示,則刪除與某個頂點vi相關的所有弧的時間複雜度是O(n+e)

個具有 n 個頂點的向圖中,要連通全部頂點少需要n-1條邊.

向圖 G 中有 n 個頂點,則該向圖的最⼩⽣成樹上有(n-1)條邊

個具有 n 個頂點的有向圖最多有(n(n-1))條邊

個具有 n 個頂點的向完全圖的邊數為n(n-1)/2

設某向圖中有 n 個頂點 e 條邊,則建該圖鄰接表的時間複雜度為O(n+e)

向圖 G(如下圖所示),則其最⼩⽣成樹上所有邊的權值之和為8

向圖中定義頂點 vi vj 之間的路徑為從 vi vj 頂點序列

    路徑長度

        Dijkstra 演算法求某頂點到其餘各頂點間的最短路徑是按路徑度(遞增)的次序來得到最短路徑的

        關鍵路徑是事件結點絡中的從源點到匯點的最路徑

     

鄰接表

    鄰接表是圖的種鏈式存儲

    連通圖

n 個頂點的連通圖少(n-1)條邊

具有 6 個頂點的向圖少應有(5)條邊才能確保是個連通圖

個連通圖中存在著(1)個連通分量

設某強連通圖中有 n 個頂點,則該強連通圖中少有(n)條邊

具有 50 個頂點的向圖少應有(49)條邊才能確保是個連通圖

對於個具有 n 個頂點的向連通圖,它包含的連通分量的個數為1

如果從向圖的任頂點出發進⾏⼀次深度優先搜索即可訪問所有頂點,則該圖定是連通圖

任何向連通圖的最⼩⽣成樹有一棵或多棵

廣度優先遍歷和深度優先遍歷

度優先遍歷類似於叉樹的層次遍歷

個圖的邊集為{A,B,(A,C),(B,D),(C,F),(D,E),(D,F)},則從頂點 A 開始對該圖進深度優先搜索,得到的頂點序列可能為A,C,F,D,E,B

已知圖的鄰接矩陣同下圖所示,根據演算法,則從頂點 0 出發,按度優先遍歷的結點序列是0 1 2 3 4 6 5

已知圖的鄰接表如下所示,根據演算法,則從頂點 0 出發按度優先遍歷的結點序列是 0 3 2 1

已知圖的鄰接表如下所示,根據演算法,則從頂點 0 出發按深度優先遍歷的結點序列是 0 1 2 3

圖的邊集

個圖的邊集為{<0,1>3,<0,2>5,<0,3>5,<0,4>10,<1,2>4,<2,4>2,<3,4>6},則從頂點 v0到頂點 v4共有(4)條簡單路徑

個圖的邊集為{<1,2>,<1,4>,<2,5>,<3,1>,<3,5>,<4,3>},則從頂點 1開始對該圖進⾏⼴度優先搜索,得到的頂點序列可能為1,2,4,5,3

    拓撲排序

拓撲排序:可以判斷出個有向圖中是否有環(迴路)

個有向圖的拓撲序列有一個或多個

稠密圖、稀疏圖(普里姆和克魯斯卡爾)

        (Prim)演算法求具有 n 個頂點 e 條邊的圖的最⼩⽣成樹的時間複雜度為n2

若要求稠密圖 G 的最⼩⽣成樹,最好(普里姆) 演算法來求解.

若要求稀疏圖 G 的最⼩⽣成樹,最好(克魯斯卡爾) 演算法來求解.

設有稠密圖 G,則 G (矩陣)存儲較省空間.

設有稀疏圖 G,則 G (表)存儲較省空間

領接矩陣

        向圖的鄰接矩陣是個對稱矩陣

已知個圖的鄰接矩陣表示,計算 i 個結點的法是:求矩陣第 i 零元素之和

已知個圖的鄰接矩陣表示,刪除所有從第 i 個結點出發的邊法是:將矩陣第 i 全部置為 0

帶權有向圖 G 鄰接矩陣 A 存儲,則頂點 i 等於 A i ⾮⽆窮的元素個數之和

深度優先遍歷類似於叉樹的先序遍歷

圖的深度優先遍歷序列不唯一

鄰接表表示圖進深度優先遍歷時,通常是采()來實現演算法的

鄰接表表示圖進⾏⼴度優先遍歷時,通常是采(隊列)來實現演算法的.

對於具有 n 個頂點的圖,若采鄰接矩陣表示,則該矩陣的⼤⼩n2

有向圖 G 鄰接矩陣存儲,其第 i 的所有元素之和等於頂點 i 出度

拓撲排序演算法是通過重複選擇具有(0)個前驅頂點的過程來完成的。//拓撲à沒有前驅的

    圖遍歷

        連通圖不能深度優先搜索法(F

    頂點與邊

        個圖中,所有頂點的度數之和=所有邊數

        設某完全向圖中有 n 個頂點,則該完全向圖中有(nn-1)/2條邊

25.  排序

大多數排序演算法都有兩個基本的操作:比較和移動

設需要對 10個不同的記錄關鍵字進排序,則少需要較(9)次

排序的的是為了以後對已排序的數據元數進查找)操作

直接插排序和冒泡排序的時間複雜性為 O, 若初始數據有序(即正序),則時間複雜性為On

初始值

選擇排序/簡單選擇排序/直接選擇排序

在直接插和直接選擇排序中,若初始數據基本反序,則選直接選擇排序

在所有的排序法中,關鍵字的較次數與記錄的初始排列關的是直接選擇排序

個由 n 個整數組成的序列,藉助排序過程找出其中的最值,希望較次數和移動次數最少,應選

直接選擇排序)

關鍵字的較次數與記錄的初始排列

在直接選擇排序中,記錄較次數為 O)數量級,記錄的移動次數為O(n)數量級.

將上萬個序並且互不相等的正整數序列,存放於順序存儲結構中,采選擇排序法能夠最快地找出其中最的正整數

前以較操作為基礎的內部排序的時間複雜性 T(m)的範圍是 Onlog2n)~ O),其較次數

與待排序記錄的初始狀態關的是(直接選擇)排序

排序法中,從未排序序列中挑選元素,並將其依次放已排序序列(初始時為空)的端的法,稱

選擇排序

插入排序/直接插入排序

    n 個元素進直接插排序時間複雜性為n2

組初始記錄關鍵字的度為 8,則最多經過(7)趟插排序可以得到有序序列.

在對 n 個元素進直接插排序的過程中,共需要進n-1)趟.

當初始序列已按健值有序時,直接插演算法進排序,需要較的次數為n-1

直接插排序演算法的平均時間複雜度為O(n²)

排序法中,從未排序序列中依次取出元素與已排序序列(初始時為空)中的元素進⾏⽐較,將其放

已排序序列的正確位置上的法,稱為插入排序

對於直接插排序、冒泡排序、簡單選擇排序、堆排序、快速排序,當件「局部有序」或度較

的情況下,最佳的內部排序法是直接插入排序

冒泡排序

   n 個元素的序列進冒泡排序,在降序的情況下較次數最多,其較次數為(n(n-1))/2

    n 個元素的序列進冒泡排序,最少的較次數是 n,此時元素的排列情況是已從排列

    n 個元素的序列進冒泡排序,最少的較次數是 n,此時元素的排列情況是升序

    n 個元素的序列進冒泡排序,其較次數為 nn-1/2時,其原始數據序列是(降序)情況

    對n個不同的排序碼進升序冒泡法排列,排列好的較的次數最多

對n個不同的排序碼進冒泡排序,在元素序的情況下較的次數為(n(n-1))/2

排序時掃描待排序記錄序列,順次較相鄰的兩個元素的⼤⼩,逆序時就交換位置,這是冒泡排序的

本思想

n 個元素的序列進冒泡排序,在(降序)的情況下較次數最多

n 個元素的序列進冒泡排序,最少的較次數是n-1

    在對組有 8 個記錄的數據表進冒泡排序時,在整個排序過程中共需進(7)趟才可完成.

    件局部有序或度較的情況下,最佳的排序法是冒泡排序

快速排序

    快速排序是對序列中的元素通過適當的位置交換將有關元素次性地放置在其最終位置上

    最壞的情況下的時間複雜度是O(n²)

    在最壞情況下(如初始記錄已有序),快速排序的空間複雜性為n

    在對 n 個元素進快速排序的過程中,最好情況下需要進log 2 n)趟

快速排序在(被排序的數據已基本有序)情況下最不利於發揮其.

在堆排序,快速排序和歸併排序中,若從平均情況下排序最快,則應先選取(快速排序

    在堆排序中、快速排序和歸併排序中,若從節省存儲空間考慮,排在中間的是(快速排序

 

每次把待排序的元素劃分為左、右兩個區間,其中左區間中元素的關鍵字均於等於基準元素的關鍵字,右區間中元素的關鍵字均於等於基準元素的關鍵字,則此排序法叫作快速排序

快速排序演算法的平均時間複雜度為O(nlog 2 n)

歸併排序

    依次將每兩個相鄰的有序表合併成個有序表的排序法叫作歸併排序

在歸併排序過程中,需歸併的趟數為log2n

   

    若對 n 個元素進歸併排序,則進趟歸併的時間複雜度為n

    路歸併排序的時間複雜度為(nlog2n)

在歸併排序中,歸併趟數的數量級表示為Olog2n)

在內部排序中,要求附加的記憶體容量最的是歸併排序

組初始記錄關鍵字序列為(25501535808520403670),其中含有 5度為 2 的有序表,則歸併排序的法對該記錄關鍵字序列進⾏⼀趟歸併後的結果為15253550204080853670

在歸併排序中,若待排序記錄的個數為 20,則共需要進 5趟歸併,在第 3趟歸併中,是把度為 4

有序表歸併為度為4的有序表

希爾排序

組初始記錄關鍵字序列為(9876543210),則以增量 d=5 趟希爾排序結束後前 5條記錄關鍵字為43210

趟排序結束後不定能夠選出個元素放在其最終位置上的是希爾排序

希爾排序的增量序列必須是遞減

堆排序

在堆排序中、快速排序和歸併排序中,若只從最壞的情況下排序最快並且要節省記憶體考慮,應選堆排序)

時間複雜度不受數據初始狀態影響恆為 O(nlog2n)的是堆排序

在任何情況下,時間複雜度均為 O(nlog2n)的不穩定的排序法是堆排序

已知個鏈表中有 3000 個結點,每個結點存放個整數,(堆排序方法)於解決這 3000個整數的排序問題且不需要對演算法作的變動

設有 1000 序的元素,希望最快的速度挑選出其中前 10 個最的元素,最好選)排序法

交換排序

        當兩個元素較出現反序時(即逆序)就相互交換位置的排序法叫作交換排序

基數排序

   

        如果將所有中國按照⽣⽇來排序,則使基數排序)演算法最快

比較排序的穩定和快慢

時間複雜度

       

       

關鍵字序列

26.  查找

    二分查找

   

1.   邏輯結構:線性和非線性

線性:  線性(1:1、棧、隊、數組

非線性:樹形(1:多)圖形(多:多)

存儲結構:順序(數組)、鏈式(指針)

2.   邏輯結構與元素相對位置無關

鏈式存儲物理地址和邏輯地址不一定相同連續,所以它記憶體中可存儲單元的地址/數據結點地址:連續與否都可以

3.   (解釋)不生成可執行文件

4.   讀取元素花費時間最少順序表

5.   在具有 n 個結點的單鏈表上查找值為 x 的元素時,其時間複雜度為On

6.   設指針 q 指向單鏈表中結點 A,指針 p 指向單鏈表中結點 A 的後繼結點 B,指針 s 指向被插的結點 X,則在結點 A 和結點 B 結點 X 的操作序列為:q->next=s;s->next=p;

7.   訪問第 i 個元素的前驅(1<i<=n)的時間複雜度為O1

8.   添加/刪除操作

單鏈表

      

帶頭結點的單鏈表

帶頭結點的雙循環單鏈表

單鏈表的頭插法建立鏈表

單鏈表的頭插法建鏈表所得到的數據的順序與輸的時候的順序相反

單鏈表的頭插法建鏈表演算法不簡單,要引⼊⼤量的指針輔助運算。(F

單鏈表的尾插發建立鏈表

單鏈表的尾插法建鏈表所得到的數據的順序與輸的時候的順序相同

雙鏈表

帶頭結點的雙循環鏈表

鏈式存儲的後插法

帶頭結點的雙循環鏈表的空表

 

9.   3n+nlog2n+n2+8的數量級:n2

10.  演算法的評價不包括並行性

11.  集合中任何兩個結點之間都有邏輯關係但組織形式鬆散(F

12.  數據元素具有相同的特性=數據項個數相同,類型一致

13.  數據在電腦存儲器內表示時,物理地址與邏輯地址相同並且是連續的,稱之為順序存儲結構

14.  演算法

定義:有限序列

目的:分析效率求改進

15.  高效性:指演算法的執行效率高(T

指演算法需要的時間性能(F

16.  鏈表

Malloc()申請

Free()釋放

個帶頭結點的雙向循環鏈表中,若要在 p 所指向的結點之前插⼊⼀個新結點,則需要相繼修改(4)個指針域的值

1、該新結點前驅指針指向p的前驅

2p的前驅指針指向該新結點

3、該新結點的後繼域指向p結點

4、前驅的後繼域指向該新結點

17.  線性表

在進添加/刪除元素時,應該在刪除元素前判空

                          在添加元素前判空(F

可以在任何位置插入刪除

除第個和最後個元素外,其餘每個元素都由個且僅有個直接前驅和直接後繼

元素之間的邏輯關係是通過(物理位置)決定的.

有限序列,可以為空

串是種特殊的線性表

兩種存儲結構:線性和鏈式

線性錶鏈式

線性錶鏈式:插入刪除方便只需要向前或向後移動元素即可(F

線性表鏈接存儲

    鏈表是種動態存儲結構,鏈表的結點可調申請 malloc() free()釋放

                                          鏈表的結點可free()申請和malloc()釋放F

鏈表是隨機存取存儲結構,對鏈表的存取必須從頭指針開始

                         對鏈表的存取可以從任何結點開始F

刪除運算便;只需修改相應指針值

                    只需要向前或向後移動元素即可F

邏輯上相鄰的元素,其物理位置定相鄰,元素之間的鄰接關係由指針域指示

不需要預先分配存儲空間,適用於數據量變化較大的情況

    表的長度:數據結點的個數

    適用於經常進行插入和刪除的操作

鏈接存儲的存儲結構所佔存儲空間分兩部分,部分存放結點值,另部分存放表示結點間關係的指針

線性表順序存儲

不便於插入和刪除的實現,而鏈式存儲便於

適用於變化量小的情況

必須按最可能度預分存儲空間,存儲空間利率低,表的容量難以擴充,靜態存儲結構

是一種隨機存取結構

適用於經常進行存取的操作

刪除時的最壞情況:要刪除的元素是順序表的第一個元素

刪除時的最好情況:要刪除的元素是順序表的最後一個元素

要求能夠較快的插和刪除,要求儲存結構能夠反映數據元素之間的邏輯關係則應該以順序儲存式儲存

度為 n 的順序存儲的線性表中,向第 i 個元素(1<=i<=n+1)位置插⼊⼀個新元素時,需要從後向前依次後移(n-i+1)個元素

線性表一旦建立,就不能添加元素(F

最後一個元素之後插入一個元素和刪除最後一個元素,採用容量足夠大的順序表

長度為n,刪除第i個元素,要向前移動n-1個元素

長度為n,第i個位置插入一個新元素,時間複雜度為On

線性表是n數據元素的有限序列(所以學院組織結構表就不是線性表)

順序線性表中有 n 個數據元素,則刪除表中第 i 個元素需要移動(n-1)個元素

18.  順序表

刪除操作時,應該將表的長度-1

⼊⼀個元素所需移動的元素平均數是n+1/2

順序表的度是指:表中數據元素的個數

個有 127 個元素的順序表中插⼊⼀個新元素並保持原來順序不變,平均要移動(63.5)個元素

度為 n 的順序表中,刪除值為 x 的元素時需要較元素和移動元素的總次數為n

表尾插⼊⼀個元素的時間複雜性的量級為O(1)

19.  數組

邏輯結構à線性結構

存儲結構à順序結構

維數組中有 n 個數組元素,則讀取值為 x 的數據元素的平均時間複雜度為O(n)

維數組中有 n 個數組元素,則讀取第 i 個數組元素的平均時間複雜度為0(1)

假定利數組 a[N]順序存儲個棧, top 表示棧頂指針,top==-1 表示棧空,並已知棧未滿,當元素 x進棧時所執的操作為a[++top]= x

個具有 n 個單元的順序棧中,假定以地址低端(即 0 單元)作為棧底,以 top 作為棧頂指針,則當做出棧處理時,top 變化為top—

20.  隊列

先進先出

只能在隊尾添加/插入新元素

只能在隊首刪除元素

論是順序存儲還是鏈接存儲的棧和隊列,進或刪除運算的時間複雜性均為O(1)

順序隊進元素隊時最的問題是會出現假溢出現象

隊列是被限定為只能在表的端進運算,在表的另端進刪除運算的線性表

當利⽤⼤⼩ N 的數組存儲循環隊列時,該隊列的最⼤⻓度是n

個順序循環隊列中刪除元素時,先需要後移隊首指針

判定個隊列 QU(最多元素為 m0)為滿隊列的條件是QU->rear QU->front = = m0

個鏈隊列中,front rear 分別為頭指針和尾指針,則插⼊⼀個結點 s 的操作為rear->next=s;rear=s;

n 個結點的雙向鏈表中指針 p 所指向的結點之前插⼊⼀個新結點時,其時間複雜性的量級為O(1)

21. 

先進後出,後進先出

只能在棧頂插入/刪除操作

向順序棧中插新的元素分三步,分別是:斷溢出或棧滿棧頂指針新元給棧頂單元

從順序棧中刪除元素分三步,分別是:判斷棧空 棧頂指針的值返回 修改棧頂指針

向棧中壓元素的操作是:先移動棧頂指針,然後存元素

鏈表作為棧的存儲結構則退棧操作:必須判別棧是否為空

鏈表作為棧的存儲結構則進棧操作:對棧不作任何判別

順序棧中在做出棧運算時,應先判別棧是否為空

順序棧中在做進棧運算時,應先判別棧是否為滿

Pushpop

設棧 S 和隊列 Q 的初始狀態為空,元素 e1,e2,e3,e4,e5,e6依次通過棧 S個元素出棧後即進隊列 Q,若 6 個元素出隊的序列是 e2,e4,e3,e6,e5,e1,則棧的容量少應該是3

個棧的輸序列為:1,2,3,4,則棧的不可能輸出的序列是4321

印表機à隊列

判定個順序棧 ST(最多元素為 m0)為空的條件是ST->top==0

假定個鏈式棧的棧頂指針 top 表示,每個結點的結構具有兩個域 data next,出棧時進的指針操作top=top->next

刪除空的順序存儲結構的堆棧的棧頂元素,棧頂指針 top 的變化是top=top-1

個棧頂指針為 hs 的鏈棧中插⼊⼀*s 結點時,應執s->next=hshs=s

順序棧中當棧中元素為 m 時,做進棧運算時發上溢,則說明棧的可容量為m

判定個順序棧的 S(最多元素時 m0)為滿的條件是S->top==m0-1

為了增加記憶體空間的利率和減少發上溢的可能性,由兩個棧共享⼀⽚連續的記憶體空間時,應將兩個

棧的(棧底)分別設在這記憶體空間的兩端,這樣只有當兩個棧的棧頂在棧空間的某位置相遇時才產上溢

設輸序列 123n 經過棧作後,輸出序列中的第個元素是 n,則輸出序列中的第 i 個輸出元素是n+1-i

判定個順序棧 S(棧空間⼤⼩ n)為空的條件是S->top==0

設輸序列為 123456,則通過棧的作後可以得到的輸出序列為:325641

設指針變數 front 表示鏈式隊列的隊頭指針,指針變數 rear 表示鏈式隊列的隊尾指針,指針變數 s 指向將要隊列的結點 X,則隊列的操作序列為rear->next=srear=s

解決順序隊上溢的

1、每當刪除個隊頭元素時,則依次移動隊中的元素,始終使 front 指針指向隊列中的第個位置

2、采平移元素的:每當隊列中加⼊⼀個元素時,隊列中已有的元素向隊頭移動個位置

3、建⽴⼀的存儲空間,但這樣做會造成空間的使效率降低

4、發上溢時,動丟失多餘元素(F)

22.  單鏈表

已知單鏈表尾指針,時間複雜度為O(1)

單鏈表中設置頭結點:空表和非空表統一,演算法處理一致

空的循環單鏈表 head 的尾結點(由 p 所指向),滿條件:p->next==head

度為 n 的單鏈錶鏈接在度為 m 的單鏈表之後的演算法的時間複雜度為O(m)

個單鏈表中,若刪除 p 所指向結點的後續結點(=單鏈表中指針 p 指向結點 m,若要刪除 m 之後的結點(若存在),則需要修改指針的操作為),則執p->next=p->next->next;

單鏈表中 n 個數據結點,則讀第 i 個數據結點的平均時間複雜度為On

對於個具有 n 個結點的單鏈表,在已知的結點*p 後插⼊⼀個新結點的時間複雜性為O(1)

單鏈表的判空條件

不帶頭結點的單鏈表head為空:head=null

條單鏈表的頭指針變數為 head 且該鏈表沒有頭結點,判空:head=0

23. 

à層次

二叉樹不是特殊的樹,使用不是樹轉化過來的特殊情形

叉樹與樹具有相同的樹形結構(F

二叉樹是非線性數據結構,順序存儲結構和鏈式存儲結構都能存儲,但,不是所有的叉樹樹形結構都適順序存儲結構

若初始森林中共有 n 叉樹,進 2n-1 次合併後才能剩下棵最終的哈夫曼樹(F

標串的度為 n,模式串的度為[n/3],則執模式匹配演算法時,在最壞情況下的時間複雜度是O(n2)

分支

叉樹上葉節點數為 n0,雙分數為,單分數為 n1,則n0=n2+1

深度

深度為 k 的完全叉樹中最少有(2k-1)個結點

棵完全叉樹中有 65個結點,則該完全叉樹的深度為7,因為2n-1

叉樹有 n 個結點,則其深度無法確定

    結點數

叉樹的第 k 層的結點數最多為2k-1

叉樹上第 5 層的結點數最多為16個,因為2k-1

深度為 5 叉樹最少有(5)個結點

如果 T2是由有序樹 T 轉化來的叉樹,T後序結點=T2中序結點,T前序結點=T2前序結點

設某棵叉樹中有 2000 個結點,則該叉樹的最⼩⾼度為11,因為210=1024<2000211=2048>2000

棵樹中,每個結點最多有(1)個前驅結點

叉樹中第 i(i≥1)層上的結點數最多有(2i+1)個

n 個值成的哈夫曼樹中共有(2n-1)個結點.

叉樹根結點的層次為 0度為 h 的滿叉樹中的結點個數是2n+1-1

F 是由 T1T2 T3三棵樹組成的森林,與 F 對應的叉樹為 BT1T2 T3 的結點數分別為 N1 N3,則叉樹 B 的根結點的左樹的結點數為N1-1

對含有(1)個結點的叉樹,采任何種遍歷式,其結點訪問序列均相同

棵深度為 h 的滿 k 叉樹有如下性質: 第 h 層上的結點都是葉結點,其餘各層上的結點都有 k .如果按層次順序從 1 開始對全部結點編號,則各層上的結點數ki-1

實現任意叉樹,m 個樹葉, n 個結點,度為 1 的結點 t 個,度為 2 的結點有 p 個,則m=p+1

對於棵具有 n 個結點叉樹,當進鏈接存儲時,其叉鏈表中的指針域的總數為 2n,其中(n-1)個鏈接孩結點,(n+1)個空閑著

設深度為 k 叉樹上只有度為 0和度為 2的節點,則這類叉樹上所含結點總數最少2k-1

二叉樹共有5種不同的形態

具有 3 個結點的叉樹共有(5)種狀態.

設某棵叉樹中只有度數為 0 和度數為 2的結點且度數為 0 的結點數為 n,則這棵叉中共有(2n-1)個結點

叉樹中,度為 0 的結點個數為 n0,度為 2 的結點個數為,則 n=n2+1

    葉子結點

設某棵完全叉樹中有 100 個結點,則該叉樹中有(50)個葉結點

設某棵叉樹的度為 10,則該叉樹上葉結點最多有512

某哈夫曼樹中有 199 個結點,則該哈夫曼樹中有(100)個葉結點//n+1/2

指針域

m 叉樹的結點數為 n多重鏈表表示其存儲結構,則該樹中有n(m-1)+1)個空指針域

設哈夫曼樹中的結點總數為m,若叉鏈表作為存儲結構,則該哈夫曼樹中總共有2m)個空指針

.

N 個結點鏈接存儲,指針域總數 2n,鏈接孩結點 2n,空閑的有 n+1

    高度

對於個具有 n 個結點的叉樹,當它為(完全二叉樹)具有⼩⾼

具有 n(n>0)個結點的完全叉樹的度為[log 2 (n+1)][log 2 n]+1

對於個具有 n 個結點的叉樹,當它為棵(單分支叉樹時具有最⼤⾼.

對於個具有 n 個結點的叉樹,當它為單分⽀⼆叉樹時具有最⼤⾼度,其度為n

    帶權路徑長度

    左孩子、右孩子、雙親結點

將含有 83 個結點的完全叉樹從根結點開始編號,根為 1 號,後按從上到下、從左到右的順序對結

點編號,那麼編號為 41 的雙親結點編號為20

    三叉樹

        在三叉鏈表上,叉樹的求雙親運算很容易實現(F

        欲實現任意叉樹的後序遍歷的遞歸演算法不必使棧結構,最佳案是叉樹采(三叉鏈表)存儲結構.

棵具有 k 層的滿三叉樹中,結點總數為(3k-1)/2

棵三叉樹的結點數為 50,則它的最⼩⾼度為5

 

    哈夫曼樹

於通訊的電僅由 8個字組成,字在電中出現的頻率分別為

 

根據這些頻率作為權值構造哈夫曼樹,則這棵哈夫曼樹的度為7

先序、中序、後序遍歷

前序:第個結點 A 是根結點,是後序的最後個結點

前序:樹的第個結點為樹根結點

中序:根據前序的根節點,判斷是否有左右樹。

中序:–> 根節點–>

後序:–> –>根節點

先序: 根節點–>–>

 

 

    叉樹的先序遍歷序列和後序遍歷序列正好相反,則該叉樹滿的條件是結點右孩

叉樹的先序遍歷序列和後序遍歷序列正好相同,則該叉樹滿的條件是空或只有個結點

    叉樹的先序遍歷序列和中序遍歷序列正好相同,則該叉樹滿的條件是結點左孩

       已知叉樹的前序遍歷和後序遍歷序列並不能惟地確定這棵樹,因為不知道樹的根結點是哪個。(F

任何叉樹的葉結點在其先根、中根、後跟遍歷序列中的相對位置肯定不發生變化

任何叉樹的葉結點在先序、中序和後序遍歷序列中的相對次序不發生改變

叉樹結點的先根序列、中根序列和後根序列中,所有葉結點的先後順序完全相同

叉樹中,具有兩個⼦⼥結點,在中序遍歷序列中,它的後繼結點最多只能有⼦⼥結點

叉樹的前序和後序遍歷序列(不能)惟確定這棵叉樹

ab 叉樹上的兩個結點,在中序遍歷時,a b 前的條件是.a b

叉樹滿下列條件:對任意結點,若存在左、右樹,則其值都它的上所有結點的值,於右上所有結點的值.現采中根)遍歷式就可以得到這棵叉樹所有結點的遞增序列

叉樹有 n 個結點,要按某順序對該叉樹中的結點編號,(號碼為 1-n),編號須具有如下性質:

叉樹中任結點 V,其編號等於其左樹中結點的最編號加 1.其右樹中結點的最編號等於 V 的編號加 1.試問應按(中序)遍歷順序編號

叉鏈表上,求雙親運算的時間性能很好(F

叉判定樹應用在:描述分類過程和處理判定優化等⽅⾯

    後綴表達式

   

24. 

G1=(V1,E1) G2=(V2,E2)為兩個圖,如果 V1ÍV2,E1ÍE2 則稱.G1 G2

有向圖

某有向圖中有 n 個頂點,則該有向圖對應的鄰接表中有(n)個表頭結點

對於個有向圖,若個頂點的度為 k1,出度為 k2,則對應逆鄰接表中該頂點單鏈表中的邊結點數為k1-k2

圖的逆鄰接表存儲結構只適於(有向圖)圖

個具有 n 個頂點的有向圖中,若所有頂點的出度數之和為 s,則所有頂點的度數之和2s

個具有 n 個頂點的有向圖中,若所有頂點的出度數之和為 s,則所有頂點的度數之和s

個具有 n 個頂點的有向完全圖中,所含的邊數為n(n-1)

8 個結點的有向完全圖最多有(56)條邊,因為n(n-1)

無向圖

向圖 G 中有 n 個頂點 e 條邊,則⽤⽤鄰接表作為圖的存儲結構進深度優先或度優先遍歷的時間複雜度為O(n+e)

向圖 G 中有 n 個頂點 e 條邊,則其對應的鄰接表中的表頭結點和表結點的個數分別為n2e

設某有向圖的鄰接表中有 n 個表頭結點和 m 個表結點,則該圖中有(m)條有向邊

向圖 G 中有 n 個頂點 e 條邊,則鄰接矩陣作為圖的存儲結構進⾏⼴度優先遍歷時的時間複雜度為O(n2)

如果 n 個頂點的圖是個環,則它有(n)成樹

向圖G中有n個頂點e條邊,則鄰接表作為圖的存儲結構進深度優先遍歷時的時間複雜度為O(n2)

圖中的條路徑度為 k,該路徑所含的頂點數為k+1

n 個頂點的向圖 G 的頂點度數的最於或者等於(n)時,G 少有條迴路

在含 n 個頂點和 e 條邊的向圖的鄰接矩陣中,零元素的個數為n2-2e

對於個具有 n 個頂點和 e 條邊的向圖,若采鄰接表表示,則表頭數量為n

對於個具有 n 個頂點和 e 條邊的向圖,若采鄰接表表示,則所有鄰接表中的結點總數是2e

向圖有 n 個頂點和 e 條邊,則所有頂點的度的和為2e

一個無向圖有 n 個頂點和e 條邊,則該向圖中所有頂點的度之和為2e

個具有 n 個頂點和 e 條邊的向圖的鄰接矩陣中,表示邊存在的元素(稱為有效元素)的個數為2e

假設個有n個頂點和e條弧的有向圖鄰接表表示,則刪除與某個頂點vi相關的所有弧的時間複雜度是O(n+e)

個具有 n 個頂點的向圖中,要連通全部頂點少需要n-1條邊.

向圖 G 中有 n 個頂點,則該向圖的最⼩⽣成樹上有(n-1)條邊

個具有 n 個頂點的有向圖最多有(n(n-1))條邊

個具有 n 個頂點的向完全圖的邊數為n(n-1)/2

設某向圖中有 n 個頂點 e 條邊,則建該圖鄰接表的時間複雜度為O(n+e)

向圖 G(如下圖所示),則其最⼩⽣成樹上所有邊的權值之和為8

向圖中定義頂點 vi vj 之間的路徑為從 vi vj 頂點序列

    路徑長度

        Dijkstra 演算法求某頂點到其餘各頂點間的最短路徑是按路徑度(遞增)的次序來得到最短路徑的

        關鍵路徑是事件結點絡中的從源點到匯點的最路徑

     

鄰接表

    鄰接表是圖的種鏈式存儲

    連通圖

n 個頂點的連通圖少(n-1)條邊

具有 6 個頂點的向圖少應有(5)條邊才能確保是個連通圖

個連通圖中存在著(1)個連通分量

設某強連通圖中有 n 個頂點,則該強連通圖中少有(n)條邊

具有 50 個頂點的向圖少應有(49)條邊才能確保是個連通圖

對於個具有 n 個頂點的向連通圖,它包含的連通分量的個數為1

如果從向圖的任頂點出發進⾏⼀次深度優先搜索即可訪問所有頂點,則該圖定是連通圖

任何向連通圖的最⼩⽣成樹有一棵或多棵

廣度優先遍歷和深度優先遍歷

度優先遍歷類似於叉樹的層次遍歷

個圖的邊集為{A,B,(A,C),(B,D),(C,F),(D,E),(D,F)},則從頂點 A 開始對該圖進深度優先搜索,得到的頂點序列可能為A,C,F,D,E,B

已知圖的鄰接矩陣同下圖所示,根據演算法,則從頂點 0 出發,按度優先遍歷的結點序列是0 1 2 3 4 6 5

已知圖的鄰接表如下所示,根據演算法,則從頂點 0 出發按度優先遍歷的結點序列是 0 3 2 1

已知圖的鄰接表如下所示,根據演算法,則從頂點 0 出發按深度優先遍歷的結點序列是 0 1 2 3

圖的邊集

個圖的邊集為{<0,1>3,<0,2>5,<0,3>5,<0,4>10,<1,2>4,<2,4>2,<3,4>6},則從頂點 v0到頂點 v4共有(4)條簡單路徑

個圖的邊集為{<1,2>,<1,4>,<2,5>,<3,1>,<3,5>,<4,3>},則從頂點 1開始對該圖進⾏⼴度優先搜索,得到的頂點序列可能為1,2,4,5,3

    拓撲排序

拓撲排序:可以判斷出個有向圖中是否有環(迴路)

個有向圖的拓撲序列有一個或多個

稠密圖、稀疏圖(普里姆和克魯斯卡爾)

        (Prim)演算法求具有 n 個頂點 e 條邊的圖的最⼩⽣成樹的時間複雜度為n2

若要求稠密圖 G 的最⼩⽣成樹,最好(普里姆) 演算法來求解.

若要求稀疏圖 G 的最⼩⽣成樹,最好(克魯斯卡爾) 演算法來求解.

設有稠密圖 G,則 G (矩陣)存儲較省空間.

設有稀疏圖 G,則 G (表)存儲較省空間

領接矩陣

        向圖的鄰接矩陣是個對稱矩陣

已知個圖的鄰接矩陣表示,計算 i 個結點的法是:求矩陣第 i 零元素之和

已知個圖的鄰接矩陣表示,刪除所有從第 i 個結點出發的邊法是:將矩陣第 i 全部置為 0

帶權有向圖 G 鄰接矩陣 A 存儲,則頂點 i 等於 A i ⾮⽆窮的元素個數之和

深度優先遍歷類似於叉樹的先序遍歷

圖的深度優先遍歷序列不唯一

鄰接表表示圖進深度優先遍歷時,通常是采()來實現演算法的

鄰接表表示圖進⾏⼴度優先遍歷時,通常是采(隊列)來實現演算法的.

對於具有 n 個頂點的圖,若采鄰接矩陣表示,則該矩陣的⼤⼩n2

有向圖 G 鄰接矩陣存儲,其第 i 的所有元素之和等於頂點 i 出度

拓撲排序演算法是通過重複選擇具有(0)個前驅頂點的過程來完成的。//拓撲à沒有前驅的

    圖遍歷

        連通圖不能深度優先搜索法(F

    頂點與邊

        個圖中,所有頂點的度數之和=所有邊數

        設某完全向圖中有 n 個頂點,則該完全向圖中有(nn-1)/2條邊

25.  排序

大多數排序演算法都有兩個基本的操作:比較和移動

設需要對 10個不同的記錄關鍵字進排序,則少需要較(9)次

排序的的是為了以後對已排序的數據元數進查找)操作

直接插排序和冒泡排序的時間複雜性為 O, 若初始數據有序(即正序),則時間複雜性為On

初始值

選擇排序/簡單選擇排序/直接選擇排序

在直接插和直接選擇排序中,若初始數據基本反序,則選直接選擇排序

在所有的排序法中,關鍵字的較次數與記錄的初始排列關的是直接選擇排序

個由 n 個整數組成的序列,藉助排序過程找出其中的最值,希望較次數和移動次數最少,應選

直接選擇排序)

關鍵字的較次數與記錄的初始排列

在直接選擇排序中,記錄較次數為 O)數量級,記錄的移動次數為O(n)數量級.

將上萬個序並且互不相等的正整數序列,存放於順序存儲結構中,采選擇排序法能夠最快地找出其中最的正整數

前以較操作為基礎的內部排序的時間複雜性 T(m)的範圍是 Onlog2n)~ O),其較次數

與待排序記錄的初始狀態關的是(直接選擇)排序

排序法中,從未排序序列中挑選元素,並將其依次放已排序序列(初始時為空)的端的法,稱

選擇排序

插入排序/直接插入排序

    n 個元素進直接插排序時間複雜性為n2

組初始記錄關鍵字的度為 8,則最多經過(7)趟插排序可以得到有序序列.

在對 n 個元素進直接插排序的過程中,共需要進n-1)趟.

當初始序列已按健值有序時,直接插演算法進排序,需要較的次數為n-1

直接插排序演算法的平均時間複雜度為O(n²)

排序法中,從未排序序列中依次取出元素與已排序序列(初始時為空)中的元素進⾏⽐較,將其放

已排序序列的正確位置上的法,稱為插入排序

對於直接插排序、冒泡排序、簡單選擇排序、堆排序、快速排序,當件「局部有序」或度較

的情況下,最佳的內部排序法是直接插入排序

冒泡排序

   n 個元素的序列進冒泡排序,在降序的情況下較次數最多,其較次數為(n(n-1))/2

    n 個元素的序列進冒泡排序,最少的較次數是 n,此時元素的排列情況是已從排列

    n 個元素的序列進冒泡排序,最少的較次數是 n,此時元素的排列情況是升序

    n 個元素的序列進冒泡排序,其較次數為 nn-1/2時,其原始數據序列是(降序)情況

    對n個不同的排序碼進升序冒泡法排列,排列好的較的次數最多

對n個不同的排序碼進冒泡排序,在元素序的情況下較的次數為(n(n-1))/2

排序時掃描待排序記錄序列,順次較相鄰的兩個元素的⼤⼩,逆序時就交換位置,這是冒泡排序的

本思想

n 個元素的序列進冒泡排序,在(降序)的情況下較次數最多

n 個元素的序列進冒泡排序,最少的較次數是n-1

    在對組有 8 個記錄的數據表進冒泡排序時,在整個排序過程中共需進(7)趟才可完成.

    件局部有序或度較的情況下,最佳的排序法是冒泡排序

快速排序

    快速排序是對序列中的元素通過適當的位置交換將有關元素次性地放置在其最終位置上

    最壞的情況下的時間複雜度是O(n²)

    在最壞情況下(如初始記錄已有序),快速排序的空間複雜性為n

    在對 n 個元素進快速排序的過程中,最好情況下需要進log 2 n)趟

快速排序在(被排序的數據已基本有序)情況下最不利於發揮其.

在堆排序,快速排序和歸併排序中,若從平均情況下排序最快,則應先選取(快速排序

    在堆排序中、快速排序和歸併排序中,若從節省存儲空間考慮,排在中間的是(快速排序

 

每次把待排序的元素劃分為左、右兩個區間,其中左區間中元素的關鍵字均於等於基準元素的關鍵字,右區間中元素的關鍵字均於等於基準元素的關鍵字,則此排序法叫作快速排序

快速排序演算法的平均時間複雜度為O(nlog 2 n)

歸併排序

    依次將每兩個相鄰的有序表合併成個有序表的排序法叫作歸併排序

在歸併排序過程中,需歸併的趟數為log2n

   

    若對 n 個元素進歸併排序,則進趟歸併的時間複雜度為n

    路歸併排序的時間複雜度為(nlog2n)

在歸併排序中,歸併趟數的數量級表示為Olog2n)

在內部排序中,要求附加的記憶體容量最的是歸併排序

組初始記錄關鍵字序列為(25501535808520403670),其中含有 5度為 2 的有序表,則歸併排序的法對該記錄關鍵字序列進⾏⼀趟歸併後的結果為15253550204080853670

在歸併排序中,若待排序記錄的個數為 20,則共需要進 5趟歸併,在第 3趟歸併中,是把度為 4

有序表歸併為度為4的有序表

希爾排序

組初始記錄關鍵字序列為(9876543210),則以增量 d=5 趟希爾排序結束後前 5條記錄關鍵字為43210

趟排序結束後不定能夠選出個元素放在其最終位置上的是希爾排序

希爾排序的增量序列必須是遞減

堆排序

在堆排序中、快速排序和歸併排序中,若只從最壞的情況下排序最快並且要節省記憶體考慮,應選堆排序)

時間複雜度不受數據初始狀態影響恆為 O(nlog2n)的是堆排序

在任何情況下,時間複雜度均為 O(nlog2n)的不穩定的排序法是堆排序

已知個鏈表中有 3000 個結點,每個結點存放個整數,(堆排序方法)於解決這 3000個整數的排序問題且不需要對演算法作的變動

設有 1000 序的元素,希望最快的速度挑選出其中前 10 個最的元素,最好選)排序法

交換排序

        當兩個元素較出現反序時(即逆序)就相互交換位置的排序法叫作交換排序

基數排序

   

        如果將所有中國按照⽣⽇來排序,則使基數排序)演算法最快

比較排序的穩定和快慢

時間複雜度

       

       

關鍵字序列

26.  查找

    二分查找