python算法與數據結構-數據結構介紹(38)

1、什麼是數據結構

數據結構,直白地理解,就是研究數據的存儲方式。數組

  咱們知道,數據存儲只有一個目的,即爲了方便後期對數據的再利用,就如同咱們使用數組存儲 {1,2,3,4,5} 是爲了後期取得它們的值,所以,數據在計算機存儲空間的存放,決不是胡亂的,這就要求咱們選擇一種好的方式來存儲數據,而這也是數據結構的核心內容例如,要存儲這樣一組數據:{張三,張四,張五,張六,張七},數據之間具備這樣的關係:張三是張4、張五的父親,同時張四仍是張六和張七的父親,數據之間的關係如圖所示:數據結構

  對於存儲之間具備複雜關係的數據,若是仍是用變量或數組來存儲(好比用數組存儲 {「張三」,"張四",「張五」,"張六","張七"} ),數據存儲是沒有問題,可是沒法體現數據之間的邏輯關係,後期根本沒法使用,顯然不明智。針對此類數據,數據結構提供了樹(或者圖)存儲結構,專門用於存儲這類數據。經過以上示例能夠體會出,數據結構教會咱們的毫不僅僅是如何存儲 一、二、這樣簡單的數據,而是解決具備複雜關係的大量數據的存儲問題。3d

2、經常使用的數據結構

  1. 線性表
  2. 順序表
  3. 鏈表
  4. 隊列

3、線性表介紹

  線性表結構存儲的數據每每是能夠依次排列的,就像小朋友手拉手,每位學生的前面和後面都僅有一個小朋友和他拉手,具有這種「一對一」關係的數據就可使用線性表來存儲。指針

 
例如,存儲相似 list = [1,3,5,7,9]這樣的數據時,各元素依次排列,每一個元素的前面和後邊有且僅有一個元素與之相鄰(除首元素和尾元素),所以可使用線性表存儲。線性表並非一種具體的存儲結構,它包含順序存儲結構和鏈式存儲結構,是順序表和鏈表的統稱。

4、順序表

  順序表,簡單地理解,就是經常使用的數組,只是換了個名字而已,例如使用順序表存儲 {1,3,5,7,9},如圖所示:code

順序表結構

5、鏈表

  咱們知道,使用順序表(底層實現靠數組)時,須要提早申請必定大小的存儲空間,這塊存儲空間的物理地址是連續的,如圖所示。鏈表則徹底不一樣,使用鏈表存儲數據時,是隨用隨申請,所以數據的存儲位置是相互分離的,換句話說,數據的存儲位置是隨機的爲了給各個數據塊創建「依次排列」的關係,鏈表給各數據塊增設一個指針,每一個數據塊的指針都指向下一個數據塊(最後一個數據塊的指針指向 NULL),就如同一個個小學生都伸手去拉住下一個小學生的手,這樣,看似毫無關係的數據塊就創建了「依次排列」的關係,也就造成了鏈表,如圖所示:blog


鏈表結構

6、棧

棧和隊列隸屬於線性表,是特殊的線性表,由於它們對線性表中元素的進出作了明確的要求。棧中的元素只能從線性表的一端進出(另外一端封死),且要遵循「先入後出」的原則,即先進棧的元素後出棧。隊列

 

棧結構示意圖

棧結構如圖所示,像一個木桶,棧中含有 3 個元素,分別是 A、B 和 C,從在棧中的狀態能夠看出 A 最早進的棧,而後 B 進棧,最後 C 進棧。根據「先進後出」的原則,3 個元素出棧的順序應該是:C 最早出棧,而後 B 出棧,最後纔是 A 出棧。class

7、隊列

隊列中的元素只能從線性表的一端進,從另外一端出,且要遵循「先入先出」的特色,即先進隊列的元素也要先出隊列。變量


隊列結構示意圖
隊列結構如圖所示,隊列中有 3 個元素,分別是 A、B 和 C,從在隊列中的狀態能夠看出是 A 先進隊列,而後 B 進,最後 C 進。根據「先進先出」的原則,3 個元素出隊列的順序應該是 A 最早出隊列,而後 B 出,最後 C 出。

8、樹存儲結構

樹存儲結構適合存儲具備「一對多」關係的數據。im


如圖所示,其中張四隻有一個父親,但他卻有兩(多)個孩子,這就是「一對多」的關係,知足這種關係的數據可使用樹存儲結構。

9、圖存儲結構

圖存儲結構適合存儲具備「多對多」關係的數據。


圖存儲結構示意圖

如圖所示,從 V1 能夠到達 V二、V三、V4,一樣,從 V二、V三、V4 也能夠到達 V1,這就是「多對多」的關係,知足這種關係的數據可使用圖存儲結構。

相關文章
相關標籤/搜索