對於課堂上的《數據結構》,我會懷疑學校的教育方式;對於桌面上的三本《數據結構》,我會質疑做者到底有沒有站在平民百姓的角度去寫這些書;對於網上的一些《數據結構》教學視頻,我開始質疑本身是否一個合格的學習者,又或許是本身沒有找到適合本身的教材吧。數據結構是計算機基礎中的戰鬥機,這是衆所周知的,包括一個計算機初學者也知道這回事。但對於一點計算機經驗都沒有的小白來講,知道的永遠只是個概念,由於老師可能教的只是硬生生的教材文字。我在想,若是一個工做多年的程序員看這些書都以爲吃力,一個懵懂的初學者面對這樣的數據結構須要有多大的勇氣。暫且不提基礎教材那滿山遍野的代碼,開門見山就來一堆有專家理論,確實給人一種看不下去的慾望。我真懷疑那麼多的程序員當中,真正能讀懂和理解數據結構的有多少個。在一個不重視基礎的年代,樓房再高,可否經得起考驗仍是個未知數。因此房地產商能作的除了努力買房子以外,還得祈禱沒有「天災」的光顧。我想如今買再多的學習書籍也彌補不了我學習數據結構受過傷害的恐懼心靈,如今只能依靠我的的學習思路來逐步去摸索和從新理解了。學習新的知識,仍是結合自身熟悉的領域開始作適當的引導,例如以身邊所熟悉的事物爲例來引導新知識的概念和定義。程序員
那到底什麼是數據結構?編程
在這裏我先拋開專業的解釋,先從詞義上來對「數據結構」進行理解。數據結構能夠看做一個名詞,但爲了便於本身對概念的理解,我嘗試把該名詞進行拆分,那就是數據和結構。從拆分中的詞類來看,結構能夠看做是名詞而數據能夠看做是副詞。那我再進一步去理解什麼是結構。從互聯網中得知,結構的意思是組成總體的各部分的搭配和安排。這個相對比較好理解,好比電腦是一個總體,一臺完整的電腦是由它的各個部分如CPU、內存、硬盤等組件搭配和安排而成的。不難看出,若是把副詞「數據」和名詞「結構」再搭配在一塊兒解釋,那麼「數據結構」的意思就是組成數據的各個部分的搭配和安排。電腦的種類我知道有臺式電腦和筆記本電腦等,那麼相對抽象的數據又有什麼種類?仍是從身邊的所熟悉的事物開始,例如在電腦上看到的字符、圖形、圖像甚至包括音樂等等都是數據。有點計算機常識的都知道,數據最底層的邏輯表現形式是0和1,而物理形式能夠經過電路的脈衝信號來表示邏輯形式的0和1進行數據傳輸,跟間諜類電影中經過敲打牆體產生的聲音來看成數據的傳送介質差很少道理。這些都是相對底層的知識,先了解了解。如今再來看看數據結構的專業解釋,「數據結構是計算機存儲、組織數據的方式」。結合上文提到的數據結構詞義就比較好理解什麼是數據結構了。數組
數據結構有哪些形式?換個說法,數據有哪些存儲或組織方式?數據結構
想當年大學期間《數據結構》沒掛科的可都知道,數據結構有集合、線性結構、樹形結構和圖狀結構(網狀結構)四種基本類型。「基本」意味在許多的數據存儲或組織場景中廣泛存在。比如電腦的CPU和內存的是搭配是電腦的基本組織形式,固然能夠按照本身的組織形式DIY符合本身的電腦。數據一樣如此,咱們均可以各自按照本身的組織方式搭配本身所需的數據,例如咱們能夠利用編程語言來定義表示人的「數據結構」,例如在某個場景中須要定義人有口、耳、眼、鼻等屬性,也存在要定義人有姓名、性別、年齡屬性的數據結構。這些數據結之因此不能歸入基本數據結構類型,是由於這些數據結構都是根據不一樣場景的不一樣定義,相對於那四種基本類型,通用性仍是相對較低。既然使用率那麼高,那確定得學習一下啊。編程語言
上文也提到,數據的組織和存儲其實有邏輯結構和物理結構,物理結構涉及的就是計算機相對底層的硬件層面了,這不是我學習的重點。如今主要學習的仍是邏輯結構上的知識。而剛纔提到的那四種基本數據結構類型都是從邏輯上區分的。而這四種基本類型的數據結構中又被分爲線性結構和非線性結構兩大派。感受越說越亂,直接來一張從互聯網上摳來的圖文總結吧。學習
接下來結合個類型的特徵解釋可能會更清晰一點:spa
線性結構特徵視頻
特徵1:集合中必存在惟一的一個"第一個元素";
特徵2:集合中必存在惟一的一個"最後的元素";
特徵3:除最後元素以外,其它數據元素均有惟一的"後繼";
特徵4:除第一元素以外,其它數據元素均有惟一的"前驅"。blog
非線性結構特徵隊列
邏輯特徵是一個結點元素可能對應多個直接前驅和多個後驅。
集合結構
解釋:該結構的數據元素間的關係是「屬於同一個集合」,別無其餘關係。
特徵1:集合中的數據成員是無序的,若是{1,3},{3,1}都表示同一集合;
特徵2:每一個數據成員在集合中不能重複,僅且只出現一次,如{1,3,1}則不能稱之爲集合。
線性結構
解釋:該結構的數據元素之間存在着一對一的關係。
樹型結構
解釋:該結構的數據元素之間存在着一對多的關係。
圖形結構
解釋:該結構的數據元素之間存在着多對多的關係,也稱網狀結構。
若是有過編程經驗的人可能會看出,這個集合的解釋跟編程裏集合的概念還多少有點詫異,不加以區分仍是很用戶被誤導,畢竟在編程中的集合概念是一個大概念,並且編程中的集合數據會存在邏輯關係可能。其實上圖還有一個使人困惑的地方,圖文中各種型的層次關係體現不出集合、線性結構、樹形、圖形這四種基本數據結構類型。感受一維數組、隊列、棧、樹、圖、多維數組才屬通一層次的類型,而集合、線性、非線性纔是大類。固然,個人這些疑問都只是分類概括的概念疑問,實際上的數據組織方式仍是以上那幾種經常使用的。何況時代會一直髮展,也不排除明天就顛覆以上分類的說法。爲了消除本身對數據結構分類的疑問,我從互聯網繼續發現了一張比較符合當下價值觀的一張基本數據結構概括圖:
知識是無限的,重要的是掌握知識的不變量,其它的都是形式而已。