大話資料結構 讀書筆記

2021-10-24 16:15:40 字數 4176 閱讀 6235

是相互之間存在一種或多種特定關係資料元素的集合

說白了就是資料的集合、但是集合裡面的資料之間存在特地的關係(這翻譯得好像沒說一樣)

是指資料元素之間的相互關係

指資料的邏輯結構在計算機儲存形式

鏈式儲存結構:是把資料元素存放在任意的儲存單元、這組儲存單元可以是連續的、也可以是不連續的

資料型別指的是一組性質相同的值的集合以及定義在此集合上的一些操作的總稱

資料型別可以分為兩類

演算法是解決特定問題的求解步驟的描述。在計算機中表現為指令的有限序列、並且每條指令表示乙個或多個操作。

演算法的五個特性:輸入、輸出、有窮性、確定性、可行性

在進行演算法分析時、語句總的執行次數 t(n) 是關於問題規模 n 的函式、進而分析 t(n) 隨 n 的變化情況並確定 t(n) 的數量級。

演算法的時間複雜度、也就是演算法的時間量度、記作 t(n) = o(f(n))、他表示隨問題規模 n 的增大、演算法執行時間的增長率和 f(n) 的增長率相同。其中 f(n) 是問題規模 n 的某個函式。

使用大寫 o() 來體現演算法的時間複雜度記法。

一般情況下、隨著 n 的增大、t(n) 增長最慢的演算法稱為最優演算法

o(1) 常數階、o(n)線性階、o(n^2)平方階、o(logn)對數階

常見的時間複雜度

o(1)2)3)n)n)

最壞情況執行時間是一種保證、那就是執行時間將不會再壞了。這是一種最重要的需求、通常、除非特別制定、我們提到的執行時間都是最壞情況的執行時間

平均執行時間是所有情況中最油意義的、因為他是期望執行時間。

演算法的空間複雜度通過計算演算法所需的儲存空間實現、演算法空間複雜度的計算公式記住:s(n)=o(f(n)) 。其中 n 為問題的規模,f(n)為語句關於n所儲存空間的函式。

零個或多個資料元素的有限序列

首先 它是乙個序列、也就是說元素之間是有順序的、若元素存在多個、則第乙個元素無前驅、最後乙個元素無後繼,其他每個元素都有且僅有乙個前驅和乙個後繼。線性表強調的另乙個點是有限。

線性表的順序儲存結構、指的是用一段位址連續的儲存單元依次儲存線性表的資料元素

優缺點對單鏈表結構和順序儲存結構做對比

查詢 插入和刪除

空間效能

棧是限定僅在表尾進行插入和刪除操作的線性表

佇列是只允許在一端進行插入操作、而在另一端進行刪除操作的線性表

棧的應用-遞迴

直接或間接的呼叫函式自己本身。

遞迴出口:沒過遞迴定義必須至少有乙個條件、滿足時遞迴不再進行,即不再引用自身而是返回值推出。

棧的應用-四則運算表示式求值

一種不需要括號的字尾表達法、我們也可以把它稱為逆波蘭。字尾表示式就是所有的符號都是在要運算數字的後面出現。

線性表有順序儲存、棧是線性表、所以有這兩種儲存方式。同樣佇列作為一種特殊的線性表,也同樣存在這兩種儲存方式。

迴圈佇列

解決假溢位的辦法就是後面滿了、就再從頭開始、也就是頭尾相接的迴圈、我們把這種頭尾相接的順序儲存結構稱為迴圈佇列。

串是由零個或多個字元組成的有限序列、又名叫字串。

kmp 模式匹配演算法就是為了不必要的回溯不會發生

樹是由n(n>=0)個結點的有限集,n=0時稱為空樹。在任意一棵非空樹中,

結點擁有的子樹數稱為結點的度。度為0度結點稱為頁結點或終端結點。度不為0的結點稱為非終端結點。

除根結點外、分支結點也稱為內部結點

樹的度是樹內部各結點的度的最大值

結點的子樹稱為該結點的孩子、相應地、該結點稱為孩子的雙親。

結點的層次、從根開始定義起、根為第一層、根的孩子喂第二層。

樹中結點的最大層次稱為樹的深度

如果將樹中結點的各子樹看成從左至右是有次序的、不能互換的、則稱該樹為有序樹、否則稱為無序樹。

森林是m棵互不相交的樹的集合。

是 n 個結點的有限集合、該集合或者為空集、或者由乙個根結點和兩棵互不相交的、分別稱為根結點的左子樹和右子樹的二叉樹組成。

二叉樹的特點

特殊二叉樹

二叉樹性質

遍歷二叉樹

二叉樹的遍歷是指從根結點出發、按照某種次序依次訪問二叉樹中所有結點、使得每個結點被訪問一次且僅被訪問一次。

圖是由頂點的有窮非空集合和頂點之間邊的集合組成的,通常表示為 g(v,e)。其中 g 表示乙個圖、v 是圖g中頂點的集合、e是圖g中邊的集合。

也稱為深度優先搜尋、簡稱 dfs

它從圖中某個頂點 v 出發、訪問此頂點、然後從 v 的未被訪問的鄰接點出發深度優先遍歷圖、直至圖中所有和 v 有路徑相同的頂點都被訪問到。

又稱為廣度優先搜尋、簡稱 bfs

類似於樹的層序遍歷。

我們把構造連通網的最小代價生成樹稱為最小生成樹。

對於網圖來說、最短路徑、是指兩頂點之間經過的邊上權值之和最少的路徑、並且我們稱路徑上的第乙個頂點時源點、最後乙個頂點是終點。

查詢就是根據給定的某個值、在查詢表中確定乙個其關鍵字等於給定值的元素。

又叫線性查詢、是最基本的查詢技術、它的查詢過程是:從表中的第乙個記錄開始、逐個進行記錄關鍵字和給定值比較、若某個記錄的關鍵字和給定值相等、則查詢成功、找到所查詢的記錄、如果直到最後乙個記錄、其關鍵字和給定值比較都不等時、則代表表中沒有所查詢的記錄。

折半查詢

折半查詢又稱為二分查詢、它的前提是線性表中的記錄必須是關鍵碼有序的、線性表必須採用順序儲存。折半查詢的基本思想是:在有序表中、取中間記錄作為比較物件、若給定值與中間記錄的關鍵字相等、則查詢成功、若給定值小於中間記錄的關鍵字、則在中間記錄的左半區繼續查詢、若給定值大於中間記錄的關鍵字、則在中間記錄的右半區繼續查詢。不斷重複上訴過程、直到查詢成功或者查詢區域無記錄。

插值查詢

插值查詢是根據要查詢的關鍵字 key 與查詢表中最大最小記錄的關鍵字比較後的查詢方法、其核心在於插值的計算公式 key-a[low] / a[high]-a[low]

斐波那契查詢資料結構的最終目的是提高資料的處理速度、索引是為了加快查詢速度而設計的一種資料結構。索引就是把乙個關鍵字與它對應的記錄相關聯的過程。

索引按照結構可以分為線性索引、樹形索引和多級索引。

所謂的線性索引就是將索引項集合組織為線性結構、也稱為索引表。

線性索引可以分為稠密索引、分塊索引、倒排索引。

稠密索引

對於稠密索引這個索引表來說、索引項一定是按照關鍵碼有序排列的

稠密索引的個數等於資料集記錄的個數

分塊索引

是把資料集的記錄分成若干塊、並且這些塊需要滿足兩個條件

倒排索引

將單詞或記錄作為索引、將文件id作為記錄、這樣便可以方便地通過單詞或記錄查詢到其所在的文件。

構造一棵二叉排序樹的目的、並不是為了排序、而是為了提高查詢和插入刪除關鍵字的速度

平衡二叉樹是一種二叉排序樹、其中每個結點的左子樹和右子樹的高度差至多等於 1。

將二叉樹上結點的左子樹深度減去右子樹深度的值稱為平衡因子。值只有-1、0、1

多路查詢樹

多路查詢樹其每乙個結點的孩子數可以躲雨兩個、且每個結點處可以儲存多個元素。

b樹b 樹是一種平衡的多路查詢樹

左側灰色方塊表示當前結點的元素個數。

b+樹

雜湊表雜湊技術是在記錄的儲存位置和它的關鍵字之間建立乙個確定的對應關係f、使得每個關鍵字 key 對應乙個儲存位置 f

解決雜湊衝突

插入排序

選擇排序

歸併排序

基數排序

大話資料結構讀書筆記

第一章 資料結構的定義 資料就夠是相互直接存在一種或多種特定關係的資料元素的集合 邏輯結構 集合結構 線性結構 樹形結構 圖形結構 第二章 演算法 1 演算法的特性 輸入 輸出 有窮性 確定性和可行性 2 演算法事假複雜度定義 在進行演算法分析時,語句總的次數t n 第三章1 線性表 定義 零個或多...

讀書筆記 大話資料結構 1

對於電腦科學,資料結構的重要性不言而喻。它對於乙個程式設計師的功力的提高起著關鍵的作用。勿在浮沙築高台,想要成為一名合格的hacker。基礎理論決定乙個程式設計師思維的深度。介於此,決定認真學習資料結構,找到比較基礎易懂的大話資料結構來開始我的學習之旅。資料結構 相互之間存在一種或多種特定關係的資料...

《大話資料結構》讀書筆記(三)

零個或多個資料元素的有限序列。線性表的順序儲存結構,指的是用一段位址連續的儲存單元依次儲存線性表的資料元素。c語言描述線性表的順序儲存結構 描述順序儲存結構需要三個屬性 儲存空間的起始位置 陣列data,它的儲存位置就是儲存空間的儲存位置。線性表的最大儲存容量 陣列長度maxsize 線性表的當前長...