資料結構 學習筆記

2021-06-17 17:26:56 字數 2240 閱讀 4621

一、鍊錶

1、基本特徵:記憶體節點是不連續的,節點之間通過指標彼此關聯。

2、基本操作:追加、插入、刪除、遍歷、偽隨機訪問!

3、實現要點

1)追加:新建節點存放資料,令新節點的前指標指向當前尾節點,新節點的後指標為null,令當前尾節點的後指標指向新節點,尾指標指向新節點。考慮在空煉表中追加第乙個節點的情況!

2)插入:新建節點存放資料,令新節點的前後指標指向前後節點!前後節點的後前指標指向新節點!考慮在頭節點前插入的情況!

3)刪除:令被刪除節點的前節點的後指標指向 被刪除節點的後節點!被刪除節點的後節點的前指標指向被刪除節點的前節點。考慮刪除頭尾節點的情況!

4)遍歷:從頭節點開始,沿著每個節點的後指標依次遍歷節點資料直到尾節點!

-----------------正向遍歷!

反之,從尾節點開始,沿著每個節點的前指標依次遍歷節點資料直到頭節點

-----------------反向(後向)遍歷

5)偽隨機訪問:在遍歷的同時對節點做計數,直到找到所需要訪問的特定位置(索引的節點!

二、二叉樹

1、基本特徵

1)表達樹形結構的最簡模型,每個節點的做多兩個子節點。

2)單根,每個子節點有且僅有乙個父節點,整顆數只有乙個根節點

3)結構上遞迴特性,用遞迴的方法進行處理,可以簡化演算法!

2、基本操作

生成遍歷

3、實現要點 

1)由父及子的生成方式!

2) 三種遍歷序:

前序遍歷 dlr

中序遍歷 ldr  

後序遍歷 lrd

3)有序二叉樹(二叉搜尋樹):

50 70 20 60 40 30 10 90 80    

按照某種規則將一種無序的資料存入有序二叉樹結構,而後對該數做中序遍歷,

得到乙個由小到大的有序數列!

規則:l < d < r

50/     \

20       70  

/   \      /   \    

10    40   60    90

/          /   

30         80

10-20-30-40-50-60-70-80-90

三、氣泡排序

13  23  20  12  15  31  19  26  14  37

1、演算法

1)比較相鄰的元素,如果第乙個比第二個大,就交換他們兩個;

2)對每乙個相鄰的元素做同樣的工作,從開始的第乙個到結尾的最後一對

經過這一步,最後的元素將是最大的值;    

3)針對所有的元素去重複以上步驟,除了最後乙個!

4)持續每次對越來越少的元素重複以上步驟,直到沒有元素需要交換 。

2、評價

平均時間複雜度o(n^2); 和資料量的平方成正比

穩定的,對資料樣本的有序性非常敏感!

void bubble(int data,int size)

{for(int i=0;i

四、插入排序

10  11  12  14  20  13  16  27

^         v

1、演算法

1)從第乙個元素開始,該元素可以認為已經有序;

2)取出下乙個元素,在已經有序的元素中從後向前掃瞄;

3)若該元素大於新元素,則將該元素賦值到下乙個位置!

4)若該元素小於等於新元素,則新元素置到該元素之後!

5)重複步驟2),直到處理完所有元素!

2、評價:

平均時間複雜度o(n^2),穩定,對樣本的有序性非常敏感,但是賦值次數

要比氣泡排序少,因此略優於氣泡排序!

void insert(int data,int size)

{for(int i=1;i0&&temp七、線性查詢

1)演算法:從表頭開始,依次將每乙個值與目標元素進行比較,直到找到或找不到位置!

2)評價:平均時間複雜度o(n),對樣本的有序性沒有要求!

八、二分查詢(折半查詢)

12  34  56  77  87  99  100  110  130

1、演算法:(假設表中元素按有序排列)

將表的中間元素與查詢目標比較,如果相等則查詢成功,如果中間元素大於查詢目標則在中間元素的左側子表中繼續查詢,否則在中間元素的右側子表中繼續查詢。重複以上過程,直到找到滿足條件的元素為止 ----查詢成功!或子表不存在----查詢失敗!

2、平均時間複雜度o(logn),樣本必須有序! 

資料結構學習筆記

資料結構概述 定義我們如何把現實中大量而複雜的問題以特定的資料型別和特定的儲存結構 儲存到主儲存器 記憶體 中,以及在此基礎上為實現某個功能 比如查詢摸個 元素,刪除某個元素,對所有元素進行排序 而執行的相應操作,這個相應 的操作也叫演算法 資料結構 個體 個體的關係 演算法 對儲存資料的操作 演算...

資料結構學習筆記

資料結構學習筆記 程式 資料結構 演算法 資料結構 資料 結構 結構的本質是關係 資料之間的關係從不通風層面上分為邏輯關係和物理關係 演算法的設計要依據資料的邏輯關係 演算法的實現要依據資料的物理關係 物理關係是邏輯關係的基礎和載體 演算法實現時需要先依據問題抽象出資料模型,即初步確定待處理資料的邏...

資料結構學習筆記

注意用陣列模擬棧,所有刪除操作都是移動棧頂標記,因為陣列難以進行刪除操作 include using namespace std class stack bool isempty bool isfull int top void push int x void pop stack stack int...