資料結構的知識點全貌

2021-09-01 17:32:16 字數 1706 閱讀 3994

資料結構是演算法的基石,演算法是軟體靈魂。

資料結構的很多概念真的是很莫名其妙,很多坑爹的定義,筆者開始很搞不明白,為什麼學資料結構?為什麼用哪個拗口詞語?這些概念到底用在什麼地方?筆者試圖用自己簡單的話來闡述這些問題,希望能對這些感覺不是很好理解的同學有幫助。

不廢話,直接開始。

一、概論

二、線性表

順序儲存結構:連續的儲存。

鏈式儲存結構:記憶體中隨機儲存的,只需要指標寫出下乙個結點在**即可。

從普通鍊錶拓展的概念:

迴圈鍊錶:首尾相連的鍊錶;

雙鏈表:前後相隨的鍊錶;前<  >後

用途:特殊情況加快鍊錶的操作;

三、棧和佇列

這個什麼東西?就是功能被限制的鍊錶,沒有什麼區別;

棧:只能從上面往下放,然後從上面去取;  就是乙個坑啊,有木有!

佇列:前面裝入資料,後面取出資料; 用途:保障時間的順序,比如使用者事務操作;

四、串就是把字元放到前面的線性表中。不然怎麼叫字串呢? 所以很多語言字串就是乙個物件;

五、多維素組

素組的元素可以又是乙個陣列。 這個就是乙個樹。

六、樹有分叉的鍊錶但是不能首尾相連;(線索二叉樹除外,線索二叉樹就是圖了都);

七、圖無限個指標域,隨你指向那個結點,不要重複就行。

遍歷的問題有點麻煩

八、排序和查詢

先看排序:

氣泡排序:就像氣泡一樣,當前元素和下乙個比,合適就這樣,不合適就交換折騰 n * n次

快速:元素找到自己的排序位置,當每個人都找到了,那個順序就定了。

選擇:老實的排序法,找到最值,放在**,又去找最值。。。。

堆:和選擇一樣建乙個具有堆的性質二叉樹(節點永遠比子節點大),堆頂就是最值,拿出來,再建一次堆。。。

插入:隨便拿乙個向有序的中放。問:開始沒有有序的序列啊?答:開始只有找乙個元素參照,乙個必然是有序的,然後可以結合二分法查詢,來排序,用查詢的思想排序,逆天了有木有啊、

歸併:幾組有序的合併成乙個。很簡單,每人輪流拿出乙個比較下,放進籃子裡不就完了。

排序好了才能查詢,否則就只能乙個乙個查詢了

順序查詢:就是乙個乙個來;

二分法:簡單,找中間,每次排除一半;

分塊:建個索引,就是分割區域,這些區域對應到乙個序列,例如123,然後去找,索引越細緻,速度越快,但是修改了,會重建索引,把握程度即可。

二叉排序樹:把資料存在乙個樹里,這個樹的資料以中序遍歷的順序來存,這個結點的左邊比右邊小,就很好找了、每次排除整體的一半。

b-樹:用二叉排序樹當做索引存普通資料,因為二叉排序樹的建立、刪除代價太大了。

什麼是雜湊?

舉個栗子。。。。資料位1-100,怎麼存?你可以用1-5(自己定哈),1-20劃到1中,21-40劃到2中。那麼就是1-100的雜湊為1-5,查詢就很方便了,先看在那個區域裡,再去找。可以說這是二分法的推廣,二分法其實就是看做1-2的雜湊。

最後說幾個問題:

排序用在資料庫中的表記錄上面,資料庫必須要排序,就是在建立索引時發生的。大量的資料才會體現,排序演算法的價值,可以用來節約錢啊。

資料庫一般把索引檔案和資料檔案分開的。特別典型的就是mysql的myisam儲存引擎。

所謂的儲存引擎就是不通過的演算法實現,採用不同的適合不同場合的演算法,這些場合要求不同,比如有的要求速度,有的要求併發量大,可序列化。資料庫採用具不同的儲存引擎,對程式有很大的影響,且一定要合適。

資料結構 知識點

定義 度 兒子數 分支節點 除了根和葉子的節點 根的深度為1 資料結構的分類 資料結構分為邏輯結構和物理結構。邏輯結構 表現資料之間的關係的一種資料結構,分為線性結構和非線性結構。物理結構 表現資料如何儲存的一種資料結構,通常分為順序結構 鏈式結構 索引結構和雜湊結構。有序表,也叫有序線性表,資料按...

資料結構知識點

1 線性結構與非線性結構 線性結構 線性表,棧,隊 乙個根節點,最多乙個前節點乙個後節點 首節點無前節點,尾接點無後節點 非線性結構 樹形結構,圖形結構 線性表 由一組資料元素構成,資料元素的位置只取決於自己的序號 陣列 棧 限定只能在表的一端進行插入和刪除,先進後出,只能在棧頂進出 佇列 只能在表...

資料結構,知識點

二叉樹 定義 二叉樹在圖論中是這樣定義的 二叉樹是乙個連通的無環圖,並且每乙個頂點的度不大於3。有根二叉樹還要滿足根節點的度不大於2。基本概念 二叉樹是遞迴定義的,其結點有左右之分,邏輯上二叉樹有五種基本形態 1 空二叉樹 2 只有乙個根節點的二叉樹 3 只有左子樹 4 只有右子樹 5 完全二叉樹。...