學習筆記 第8章 資料結構與演算法

2021-07-10 12:15:44 字數 2742 閱讀 5845

1、乙個線性表是n個元素的有限序列(n>=0),通常表示為(a1,a2,…,an)。其特點是在非空的線性表中:

(1)存在唯一的乙個稱作「第乙個」的元素。

(2)存在唯一的乙個稱作「最後乙個」的元素。

(3)除第乙個元素外,序列中的每個元素均只有乙個直接前驅。

(4)除最後乙個元素外,序列中的每個元素只有乙個直接後繼。

2、棧和佇列是程式中常用的兩種資料結構,它們的邏輯結構與線性表相同。其特點在於運算收到了限制:棧按「後進先出」的規則操作,佇列按「先進先出」的規則進行操作,故稱運算受限的線性表。

3、串的基本概念

串長:即串的長度,指字串中的字元個數

空串:長度為0的串,空串不包含任何字元。

空格串:由乙個或多個空格組成的船。雖然空格是乙個空白符,但它也是乙個字元,計算串長度時要將其計算在內。

子串:由串中任意長度的連續字元構成的序列稱為子串。含有子串的串稱為主串。子串在主串中的位置指子串首次出現是,該子串的第乙個字元在    主串的位置。空串是任意串的子串。

串相等:指兩個串長度相等且對應序號上的字元也相同。

串比較:兩個串比較大小時以字元的ascii碼值作為依據。比較操作從兩個串的第乙個字元開始進行,字元的ascii碼值大者所在的串為大;若其中    乙個串先結束,則以串長較大者為大。

4、陣列結構的特點如下。

(1)資料元素數目固定。一旦定義了乙個陣列結構,就不再有元素的增減變化。

(2)資料元素具有相同的型別。

(3)資料元素的下標關係具有上下界的約束且下標有序。

5、二叉樹的性質

(1)二叉樹第i層(i>=1)上至多有2的(i-1)次方個結點。

(2)深度為k的二叉樹至多有2的k次方-1個結點(k>=1)。

(3)對任何一顆二叉樹,若其終端節點數為n0,度為2的結點數為n2,則n0=n2+1。

(4)具有n個結點的完全二叉樹的深度為log2n+1。

(5)對一棵有n個結點的完全二叉樹的結點按層次自左至右進行編號,則對任一節點i(1<=i<=n)有:

若i=1,則結點i是二叉樹的根,無雙親;若i>1,則其雙親為i/2。

若2i>n,則結點i無左孩子,否則其左孩子為2i。

若2i+1>n,則結點i無右孩子,否則其右孩子為2i+1。

6、圖g是由兩個集合v和e構成的二元組,記作g=(v,e),其中v是圖中頂點的非空有限集合,e是圖中邊的有限集合。從資料結構的邏輯關係角度來看,圖中任一頂點都有可能與圖中其他頂點有關係,而圖中所有頂點都有可能與某一頂點有關係。在圖中,資料結構中的資料元素用頂點表示,資料元素之間的關係用邊表示。

有向圖:若圖中每條邊都是有方向的,則稱為有向圖。從頂點vi到vj的有向邊也稱為弧,起點vi稱為弧尾;終點vj稱為弧頭。在有向圖中,與分別表示兩條弧。

無向圖:若圖中的每條邊都是無方向的,頂點vi和vj之間的邊用(vi,vj)表示。在無向圖中,(vi,vj)與(vj,vi)表示的是同一條邊。

完全圖:若乙個無向圖具有n個頂點,而每個頂點與其他n-1個頂點之間都有邊,則稱之為無向完全圖。顯然,含有n個頂點的無向完全圖共有n(n-1)/2條邊。類似地,有n個頂點的有向完全圖中弧的數目為n(n-1),即任意兩個不同頂點之間都存在方向相反的兩條弧。

度、出度和入度:頂點v的度是指關聯於該頂點的邊的數目,記作d(v)。若g為有向圖,頂點的度表示該頂點的入度和出度之和。頂點的入度是以該頂點為終點的有向邊的數目,而頂點的出度指以該頂點為起點的有向邊的數目,分別記為id(v)和od(v)。

路徑:在無向圖g中,從頂點vp到頂點vq的路徑是指存在乙個頂點序列vp,vi1,vi2,…,vin,vq,使得(vp,vi),(vi1,vi2),…,(vin,vq)均屬於e(g)。若g是有向圖,其路徑也是有方向的,它由e(g)中的有向邊,,…,組成。路徑長度時路徑上邊或弧的數目。第乙個頂點和最後乙個頂點相同的路徑稱為迴路或環。若一條路徑上除了vp和vq可以相同外,其餘頂點均不相同,這種路徑稱為一條簡單路徑。

子圖:若有兩個圖g=(v,e)和g'=(v',e'),如果v'包含於v且e'包含於e,則稱g'為g的子圖。

連通圖:在無向圖g中,若從頂點vi到頂點vj有路徑,則稱頂點vi和vj是連通的。如果無向圖g中任意兩個頂點都是連通的,則稱其為連通圖。

強連通圖:在有向圖g中,如果對於每一對頂點vi,vj包含於v且vi不等於vj,從頂點vi到頂點vj和從頂點vj到頂點vi都存在路徑,則稱圖g為強連通圖。

網:邊(或弧)具有權值的圖稱為網。

7、乙個演算法的優劣可從以下幾個方面考查。

(1)正確性。也稱為有效性,是指演算法能滿足具體問題的要求。即對任何合法的輸入,演算法都能得到正確的結果。

(2)可讀性。指演算法被理解的難易程度。人們常把演算法的可讀性放在比較重要的位置,因為晦澀難懂的演算法不易交流和推廣使用,也難以修改和擴充套件。因此,設計的演算法應盡可能簡單易懂。

(3)健壯性。也稱為魯棒性,即對非法輸入的抵抗能力。對於非法的輸入資料,演算法應能加以識別和處理,而不會產生誤動作或執行過程失控。

(4)效率。粗略地講,就是演算法執行時花費的時間和使用的空間。對演算法的理想要求是執行時間短、占用空間小。

內部排序:指待排序記錄全部存放在記憶體中進行排序的過程。

外部排序:指待排序記錄的數量很大,以至記憶體不能容納全部記錄,在排序過程中尚需對外存進行訪問的排序過程。

9、解決衝突就是為出現衝突的關鍵字找到另乙個「空」的雜湊位址。常見的處理衝突的方法有開放定址法、鏈位址法(拉鍊法)、再雜湊法、建立公共溢位區法等,在處理衝突的過程中,可能得到乙個位址序列,記為hi(i=1,2,…,k)。

10、通常情況下,字串儲存在一維字元陣列中,每個字串的末尾都有乙個串結束符,在c語言中以特殊字元「\0」作為結束標記。

筆記 大話資料結構 第2章 演算法

寫乙個1 2 3 100求和程式int i,sum 0,n 100 執行了1次 for i 1 i n i 執行了n 1次 printf d sum 執行了1次 這樣可能不高效,高斯同學是這樣想的 int i,sum 0,n 100 執行了1次 sum 1 n n 2 執行了1次 printf d ...

資料結構與演算法筆記 8 棧

棧是一種簡單的緩衝儲存結構,它只支援資料項的儲存和訪問,不支援資料項之間的任何關係。棧具有後進先出的特性。棧的實現 基於棧的特性,實現乙個棧可以基於兩種結構,線性表和列表 1.異常類class stackunderflow valueerror pass2.基於線性表實現棧class stack o...

第1章 資料結構與演算法概述

1.3 線性結構 非線性結構 宣告資料 data 結構 structure 是一門研究組織資料方式的學科,有了程式語言也有了資料結構。學好資料結構可以編寫出更加漂亮 更加有效率的 要學習好資料結構就要多考慮如何將生活中遇到的問題,用程式去實現解決 程式 資料結構 演算法資料結構是演算法的基礎,換言之...