個人看法:
資料結構的重要性對于碼農而言就像蓋房子的圖紙,做飯的菜單,沒有它,也許也能蓋得成房子,也能做的熟菜,但是品質如何就不敢說了。我們從大學的時候就把《資料結構》作為重要的基礎課程來認真學習,但是真正聽懂的,弄明白的,并不是很多。工作了幾年,體會到它的重要性,決定回過頭來再次抱起書本,系統的再次學習這門課程。我相信,一定會有不一樣的感受和收獲。閑談少叙,書歸正傳。
一、本節解決問題:
1.什麼是資料結構?
二、主要内容:
1.學習前的心裡準備
2.一個小例子
3.起源
4.概念和術語
5.邏輯結構和實體結構
6.資料類型
7.總結
三、開始學習吧
1.學習前的心理準備
資料結構很重要我們知道了,我們學習這門課程的時候一定是抱着好好學,認真踏實的學習的心态的,但是呢,這中間也許會有一個個疑團,一道道障礙,别放棄,就對了!
學習資料結構就像過年回家一樣,也許是做高鐵,也許是飛機,也許是綠皮車,也許是大巴車,還可能是搭順風車,兜兜轉轉隻要到達目的地,就是成功了。
有個同學叫“小菜”,他剛入職場,做了一位碼農。工作中,他們要做一個客服電話系統,他們上司給他一個任務就是完成客戶排隊子產品的代碼。
小菜覺得很容易啊,不就是排隊嗎,用資料庫就能簡單的解決啊。于是他設計了一張客戶排隊表,用自動遞增的整型數字作為客戶編号。來一個客戶,在表的末尾插入一條資料。等系統一空閑,就從表中取出編号最小的客戶送出,并删除該記錄。寫好後,小菜高高興興的送出了。
上司看完代碼,把小菜叫到跟前,對他說:“你資料結構怎麼學的啊?這種實時排隊記憶體就能搞定,用什麼資料庫啊!”
小菜回去後,細細思考,決定用數組來實作,又怕數組溢出,還要考慮數組的長度。
小菜戰戰兢兢地送出了代碼。
果然,沒過多久,上司再次叫來了小菜,告訴他,隻需要用資料結構的隊列結構就能解決這個問題,回去好好想想,再重新寫來。
小菜回去一宿沒睡,仔細學習了“隊列結構”,重新設計了實時排隊的代碼,送出了。這一次,上司跟小菜說:“小夥子,還不錯。”
既然資料結構這麼重要,那一定要好好學啊。
《資料結構》是怎麼來的?
1968年,美國有個叫做高德納的教授寫了一本書叫做《計算機程式設計藝術》,其中第一卷《基本算法》中,他系統的闡述了資料的 邏輯結構 和 實體結構還有資料操作,開創了《資料結構》的課程體系。從這一年起,《資料結構》正式誕生了。
1》資料
資料結構,顧名思義是“資料的結構”。那麼就有必要知道什麼是“資料”呢?
資料就是描述客觀事物的符号,是計算機可以操作的對象,是能被計算機識别、輸入的符号集合。例如:1,2,3等數字、“你好”,“hello”等文字元号,逗号,括号等标點符号、圖檔、音頻、視訊等。
思考:這些符号為什麼能夠被計算機識别呢?
個人思考:因為這些符号在計算機中有約定的編碼,比如 a 的編碼是65,編碼之後的符号能夠被計算機識别。計算機也是人設計的,它是根據人的設定工作的,你說 編碼是65的是字元a,它就認為是a。
2》資料元素
資料元素:組成資料的、有一定意義的基本機關,在計算機中通常作為整體處理,也被稱為記錄。
例如:人類中,小明,小華都是資料元素;
車類中,小汽車,大卡車,公共汽車都是資料元素。
3》資料項
資料項:一個資料元素可以由若幹資料項組成。
例如:小明這個資料元素,他的眼睛、耳朵、手、腳、姓名、年齡、家庭住址等等都是資料項。其實就是類的屬性。
4》資料對象
資料對象:性質相同的資料元素的集合,是資料的子集。
什麼是性質相同呢?比如,人都有姓名、性别和出生日期這些相同的資料項。
我們把資料結構中的基本概念都介紹完了,那麼到底什麼是資料結構呢?
資料結構:互相之間存在一種或者多種特定關系的資料元素的集合。
資料結構之是以難以了解,是因為它讨論的是“關系”,還不是一種關系,而是可能有多種關系。到底都有哪些關系呢?
按照視點的不同,我們把資料結構分為“邏輯結構”和“實體結構”。
邏輯結構:資料對象(性質相同的資料元素)中資料元素之間的互相關系。
1.集合結構
2.線性結構
3.樹形結構
4.圖形結構
集合結構:元素之間的關系是同在一個集合中。

image.png
線性結構:1對1的關系
樹形結構:1對多的關系
圖形結構: 多對多的關系
實體結構:也叫做存儲結構,是指資料的邏輯結構在計算機中的存儲形式。
注意:這裡的存儲主要指的是記憶體的存儲,而不是像硬碟啊,CD光牒啊這些外部存儲器的存儲。
存儲結構有兩種:
1.順序存儲:例如數組
2.鍊式存儲:例如連結清單等
什麼是順序存儲?
就是把資料元素存放在連續的記憶體單元裡面,其資料間的邏輯關系和實體關系是一緻的。
(請忽略醜陋的文字)
什麼是鍊式存儲?
就是資料元素存儲在任意的存儲單元裡,這組存儲單元可以是連續的,也可以是不連續的。
這就像什麼呢?就像上學時候早晨做早操站隊,假如站成一隊,每個人不可能把所有人的位置都記得,他隻需要記住自己的前一個同學是誰就行了。而第一個同學知道自己是第一個,最後一個同學知道自己是最後一個,這樣每次排隊,大家都能找到自己的位置了。
注意:邏輯結構是面向問題的,實體結構是面向計算機的,其基本目标是将資料以及邏輯關系存儲在計算機中。
前面我們知道了什麼是資料,而資料也是有類型的,這個類型是什麼回事呢?就像每個人都有自己的姓氏一樣,同一個類型的資料也有共同的特征。
為什麼需要類型呢?
因為計算機的記憶體是有限的,我們聲明了一個變量 a ,那麼給它多大的空間存儲它好呢?給太大了,浪費記憶體,給太小了,又怕不夠,怎麼辦呢?就根據資料的特征,給他們不同的類型。比如,整型的資料,所占的存儲空間是4位,一位是8個位元組,,留出一個位元組用作正負符号表示,整型的取值範圍就是2的31次方減1.
打個比方說吧,大家都要住房子,都希望房子越大越好,但是呢,有的有錢,有的沒錢,是以呢,房子也就有大的,有小的。
這裡順便提一下“溢出”是什麼回事兒。
我們知道了,一個整型的資料占4位,一個浮點型的占8位(當然了,不同計算機也是不一樣的),你把一個超過整型範圍的浮點型資料硬要塞到放整型的房子裡,那能放得下嗎?放不下,不就漏出來了,叫“溢出”。
具體每種語言都有什麼類型,這些類型是如何定義的,我們這裡不做讨論。
本節說了這麼多,就是為了解決開頭的一個問題:什麼是資料結構。
資料結構是研究資料元素之間一種或者多種關系的集合。
程式設計與資料結構的關系:
程式設計 = 資料結構 + 算法