演算法筆記(二)資料結構

2022-01-29 08:21:16 字數 3304 閱讀 2343

資料結構實計算機中對資料的一種儲存和組織的方式,同時也泛指相互之間存在一種或多種特定關係的資料的集合。

到現在為止,計算機技術領域中還沒有乙個統一的資料結構的定義。以下是引用的部分解釋:

data_structure=(d,r)

其中d是資料元素的集合,r是該集合中所有元素之間的關係的有限集合。[2]

sartaj sahni在他的《資料結構、演算法與應用》一書中稱:「資料結構是資料物件,以及存在於該物件的例項和組成實 例的資料元素之間的各種聯絡。這些聯絡可以通過定義相關的函式來給出。」他將資料物件(data object)定義為「乙個資料物件是例項或值的集合」。

clifford a.shaffer在《資料結構與演算法分析》一書中的定義是:「資料結構是adt(抽象資料型別abstract data type) 的物理實現。」

robert l.kruse在《資料結構與程式設計》一書中,將乙個資料結構的設計過程分成抽象層、資料結構層和實現層。其中,抽象層是指抽象資料型別層,它討論資料的邏輯結構及其運算,資料結構層和實現層討論乙個資料結構的表示和在計算機內的儲存細節以及運算的實現。

資料結構具體指同一類資料元素中,各元素之間的相互關係,包括三個組成成分,資料的邏輯結構,資料的儲存結構和資料運算結構。

雖然並沒有乙個統一的定義,但是這些定義都具有相似的含義。

資料結構實一切演算法的基礎。

資料結構實程式語言的基礎。

資料:資料是資訊的載體,是電腦程式加工的原材料。整數,字元,字串,實體類,影象,聲音等都可以認為是資料結構。

資料元素:資料元素是資料的基本單位,也稱為元素,結點,頂點,記錄等。

資料結構:資料結構指的是資料之間的相互關係,也就是資料的組織形式。

一般來說資料結構包括資料的邏輯結構,資料的儲存結構和資料的運算。

資料的邏輯結構:

資料元素之間的邏輯關係。資料的邏輯結構是從邏輯關係上描述資料,跟資料在計算機中如何儲存無關,是獨立於計算機的抽象概念。從數學分析的角度來看,資料的邏輯結構可以看做從具體問題抽象出來的數學模型。

資料的儲存結構:

資料元素及其邏輯關係在計算機儲存器的表現形式。資料的儲存結構依賴於計算機語言,是邏輯機構用計算機語言的實現。一般只有高階語言的層次上才會討論儲存結構,低階的機器語言儲存結構是具體的。

資料的運算:

能夠對資料是假的操作。資料的運算的基礎為資料的邏輯結構,每種邏輯結構都可以歸納為乙個運算的集合,常用的與運算有檢索,插入,刪除,更新和排序等。

資料結構是乙個有機的整體,同乙個邏輯結構可以有不同的儲存結構,同一種邏輯結構也可以有不同的資料運算集合。

資料的邏輯結構,資料的儲存結構和資料的運算任何乙個發生改變都將導致乙個全新的資料結構出現。

按照資料的邏輯結構可以簡單的分為線性結構和非線性結構。

線性結構:

線性結構就是表中各個節點具有線性的關係。如線性表,棧,佇列和串等。從資料結構的語言來描述,線性結構應包括:

線性結構是非空集;

線性結構有且僅有乙個開始節點和乙個終端節點;

線性結構所有節點左右只有乙個直接前趨節點和乙個直接後繼節點。

非線性結構:

表中各個節點具有多個對應關係,如陣列,廣義表,樹結構和圖結構等。非線性結構應包括:

非線性結構是非空集;

非線性結構的乙個節點可能有多個直接前趨節點和直接後繼節點。

資料結構的儲存方式:

順序儲存方式:

順序儲存方式就是在一塊連續的儲存區域乙個接乙個的存放資料。順序儲存方式把邏輯上相鄰的的節點儲存在物理位置上相鄰的儲存單元裡,節點見得邏輯關係由儲存單元的鄰接關係來體現。順序儲存方式也稱為順序儲存結構,一般用陣列或結構陣列來描述。

現行儲存方式主要用於現行邏輯結構的資料存放,對於圖合數等非線性結構並不適用。

鏈結儲存方式也成為鏈式儲存結構。一般在原資料項中增加引用型別表示節點之間的位置關係。

索引儲存方式:

是採用附加索引表的的方式來存節點資訊的一種儲存方式。索引表由若干索引項組成。

索引儲存方式還可以分為稠密索引和稀疏索引。

雜湊儲存方式:

雜湊儲存方式是根據節點的關鍵字直接計算出該結點的儲存位址的一種儲存方式。往往根據具體的資料結構來決定採用哪種儲存方式。

按照資料型別的值是否可以分解,資料型別可以分為基本資料型別和聚合資料型別。

基本資料型別:一般是程式語言自身定義的的一些資料型別。

聚合資料型別:其值可以進一步分解為若干分量,一般是使用者自定義的資料型別。

抽象資料型別(adt):

是指資料的組織及其相關操作。adt可以看做資料的邏輯結構及其在邏輯結構上定義的操作。

抽象資料型別一般具有兩個重要特徵:

資料抽象:使用抽象資料型別時,強調的是實體的本質特,所能夠完成的功能,以及與外部使用者的介面。

資料封裝:用於將屍體的外部特性和其內部實現細節進行分離,並且對外部使用者隱藏其內部實現細節。

陣列:陣列是一種聚合資料型別,是將具有相同型別的若干變數有序的組織在一起的集合。

棧:棧是一種特殊的線性表,其只能在乙個表的乙個固定的端進行資料節點的插入和刪除操作。棧按照後進先出的原則儲存資料。棧中沒有資料稱為空棧。

佇列:佇列和棧類似,也是一種特殊的線性表。但佇列只允許在表的一端進行插入操作,而另一端進行刪除操作。進行插入操作的一端稱為隊尾,進行刪除操作的一端稱為隊頭。

鍊錶:鍊錶是一種資料元素按照鏈式儲存結構進行儲存的樹結構,這種資料結構在物理上具有非連續的特點。鍊錶由一系列資料節點構成,每個資料節點包括資料域和引用域兩部分。

樹:樹是典型的非線性結構,是包括n個結點的有窮集合k。在樹中有且僅有乙個根節點,該結點沒有前驅結點,其他結點都有且僅有乙個前驅結點,而且可以有m個後繼結點。

圖:圖是一種非線性結構。資料結點一般稱為頂點,而邊是結點的序偶對。

堆:堆是一種特殊的樹形資料結構,一般討論的對都是二叉堆。堆得特點是根節點的值是所有節點中最小或最大的,並且根節點的兩個子樹也是乙個堆結構。

雜湊表:

雜湊表源自於雜湊函式,其思想是如果在結構中存在關鍵字和t相等的記錄,那麼必定在f(t)的儲存位置可以找到該記錄,這樣就可以不用進行比較比較而直接取得所查記錄。

線性表是由n個元素組成的有限序列。

資料元素的個數為n,資料長度為n,n=0時稱為空表。

對於乙個非空線性表,其邏輯結構特徵如下,

有且僅有乙個開始結點a1,沒有直接前趨結點,有且僅有乙個直接後繼結點a2;

有且僅有乙個終結結點an,沒有直接後繼結點,有且僅有乙個直接前趨結點a(n-1);

其餘內部結點都有且僅有乙個直接前趨結點和乙個直接後繼結點。

對於同一線性表,各資料元素ai必須具有相同的資料型別,即統一==同一線性表中各項資料元素具有相同的型別,每個資料元素的長度相同。

《資料結構》學習筆記二 演算法(二)

繼續上節的學習,我們在這一篇文章裡把 演算法 這一章內容學習完。本節解決問題 演算法的好壞到底是如何評估的?知識點 1.函式的漸進增長 2.演算法的時間複雜度 3.常見的時間複雜度 4.演算法的空間複雜度 1.函式的漸進增長 這一知識點與數學相關,不過沒關係都是很容易理解的內容。問題 假如兩個演算法...

資料結構演算法(二)

單調棧給定乙個長度為 n 的整數數列,輸出每個數左邊第乙個比它小的數,如果不存在則輸出 1。輸入格式 第一行包含整數 n,表示數列長度。第二行包含 n 個整數,表示整數數列。輸出格式 共一行,包含 n 個整數,其中第 i 個數表示第 i 個數的左邊第乙個比它小的數,如果不存在則輸出 1。資料範圍 1...

資料結構 二 演算法

演算法 是解決特定問題求解步驟的描述,在計算機中表現為指令的有限序列,並且每條指令表示乙個或多個操作 輸入輸出 演算法具有零個或多個輸入。演算法至少有乙個或多個輸出 有窮性 在可接受的時間範圍內結束,不會出現出現迴圈 確定性 不會出現二義性 可行性 每一步都能執行有限次數完成 正確性 沒有語法錯誤 ...