一、什麼是資料結構
資料結構,直白地理解,就是研究資料的儲存方式。
我們知道,資料儲存只有一個目的,即為了方便後期對資料的再利用,就如同我們使用陣列儲存 {1,2,3,4,5}
是為了後期取得它們的值,因此,資料在計算機儲存空間的存放,決不是胡亂的,這就要求我們選擇一種好的方式來儲存資料,而這也是資料結構的核心內容例如,要儲存這樣一組資料:{張三,張四,張五,張六,張七},資料之間具有這樣的關係:張三是張四、張五的父親,同時張四還是張六和張七的父親,資料之間的關係如圖所示:
對於儲存之間具有複雜關係的資料,如果還是用變數或陣列來儲存(比如用陣列儲存 {“張三”,"張四",“張五”,"張六","張七"} ),資料儲存是沒有問題,但是無法體現資料之間的邏輯關係,後期根本無法使用,顯然不明智。針對此類資料,資料結構提供了樹(或者圖)儲存結構,專門用於儲存這類資料。通過以上示例可以體會出,資料結構教會我們的絕不僅僅是如何儲存 1、2、這樣簡單的資料,而是解決具有複雜關係的大量資料的儲存問題。
二、常用的資料結構
- 線性表
- 順序表
- 連結串列
- 棧
- 佇列
- 樹
- 圖
三、線性表介紹
線性表結構儲存的資料往往是可以依次排列的,就像小朋友手拉手,每位學生的前面和後面都僅有一個小朋友和他拉手,具備這種“一對一”關係的資料就可以使用線性表來儲存。
四、順序表
順序表,簡單地理解,就是常用的陣列,只是換了個名字而已,例如使用順序表儲存 {1,3,5,7,9},如圖所示:
五、連結串列
我們知道,使用順序表(底層實現靠陣列)時,需要提前申請一定大小的儲存空間,這塊儲存空間的實體地址是連續的,如圖所示。連結串列則完全不同,使用連結串列儲存資料時,是隨用隨申請,因此資料的儲存位置是相互分離的,換句話說,資料的儲存位置是隨機的為了給各個資料塊建立“依次排列”的關係,連結串列給各資料塊增設一個指標,每個資料塊的指標都指向下一個資料塊(最後一個資料塊的指標指向 NULL),就如同一個個小學生都伸手去拉住下一個小學生的手,這樣,看似毫無關係的資料塊就建立了“依次排列”的關係,也就形成了連結串列,如圖所示:
六、棧
棧和佇列隸屬於線性表,是特殊的線性表,因為它們對線性表中元素的進出做了明確的要求。棧中的元素只能從線性表的一端進出(另一端封死),且要遵循“先入後出”的原則,即先進棧的元素後出棧。
棧結構如圖所示,像一個木桶,棧中含有 3 個元素,分別是 A、B 和 C,從在棧中的狀態可以看出 A 最先進的棧,然後 B 進棧,最後 C 進棧。根據“先進後出”的原則,3 個元素出棧的順序應該是:C 最先出棧,然後 B 出棧,最後才是 A 出棧。
七、佇列
佇列中的元素只能從線性表的一端進,從另一端出,且要遵循“先入先出”的特點,即先進佇列的元素也要先出佇列。
佇列結構如圖所示,佇列中有 3 個元素,分別是 A、B 和 C,從在佇列中的狀態可以看出是 A 先進佇列,然後 B 進,最後 C 進。根據“先進先出”的原則,3 個元素出佇列的順序應該是 A 最先出佇列,然後 B 出,最後 C 出。
八、樹儲存結構
樹儲存結構適合儲存具有“一對多”關係的資料。
如圖所示,其中張四隻有一個父親,但他卻有兩(多)個孩子,這就是“一對多”的關係,滿足這種關係的資料可以使用樹儲存結構。
九、圖儲存結構
圖儲存結構適合儲存具有“多對多”關係的資料。
如圖所示,從 V1 可以到達 V2、V3、V4,同樣,從 V2、V3、V4 也可以到達 V1,這就是“多對多”的關係,滿足這種關係的資料可以使用圖儲存結構。