記得是大一大二的時候學習了數據結構。時間過的好快,現在實現了,現在感覺自己的基礎好差很多都不會。欠的帳還是要還的!
什麼是數據結構?什麼是算法?
呃呃呃呃 哎….不會。
多次參加了MOOC姥姥的數據結構,都沒有堅持下來,希望這次可以堅持下來。
引用姥姥的例子:如果給你一堆書你會怎麼放?
想怎麼放就怎麼放,哈哈。
如果書不多,我們一般是一本插着一本的放着。如下圖
要是書的規模很大呢?如學校圖書館裏面的書如果是按上述一本一本的插入,那麼以後需要找書的時候是不是累死人了。如下圖
所以答案是看書的規模。
什麼是數據結構?
數據是什麼?結構是什麼?
參考大話數據結構,幾個術語的定義
數據:是描述客觀事物的符號,是計算機中可以操作的對象,是能被計算機識別,並輸入給計算機處理的符號集合。
其實就是圖書館中所有的書。
數據元素:是組成數據的、有一定意義的基本單位,在計算機中通常作爲整體處理。也被稱爲記錄。
就是書。
數據項:一個數據元素可以由若干個數據項組成。
其實就是書名、作者、出版社啥的….
class Book {
//書名
private String bookName;
//作者
private String bookAuthor;
//出版社
private String bookPress;
}
其實一個Book對象就是數據元素,bookName、bookAuthor、bookPress就是數據項。
數據對象:是性質相同的數據元素的集合,是數據的子集。
其實就是某一類書。如圖下圖都是數據結構一類的書
是不是明白了什麼是數據?哈哈 還是需要結合例子理解的深入啊。
什麼是結構?
邏輯結構、物理結構。
邏輯結構:是指數據對象中數據元素之間的相互關係。包括集合結構、線性結構、樹形結構、圖形結構。
集合結構:集合結構中的數據元素除了同屬於一個集合外,它們之間沒有其它關係。
線性結構:線性結構中的數據之間是一對一的關係。
樹形結構:樹形結構中的數據之間存在一種一對多的層次關係。
圖形結構:圖形結構的數據元素是多對多的關係。
物理結構:是指數據的邏輯結構在計算機中的存儲形式。順序存儲和鏈式存儲。
順序存儲:是把數據元素存放在地址連續的存儲單元裏。
鏈式存儲:是把數據元素存放在任意的存儲單元裏,這組存儲單元可以是連續的,也可以是不連續的。
什麼是數據結構?
Sartaj Sahni在他的《數據結構、算法與應用》一書中稱:“數據結構是數據對象,以及存在於該對象的實例合組成實例的數據元素之間的各種聯繫。這些聯繫可以通過定義相關的函數來給出。”他將數據對象(data object)定義爲“一個數據對象是實例或值的集合”。
Clifford A.Shaffer在《數據結構與算法分析》一書中的定義是:“數據結構是 ADT(抽象數據類型Abstract Data Type) 的物理實現。”
大話數據結構:數據結構是相互之間存在一種或多種特定關係的數據元素的集合。
姥姥:數據結構包括數據對象集以及它們在計算機中的組織方式,即它們的邏輯結構和物理存儲結構,同時還包括與數據對象集相關的操作集,以及實現這些操作的最高效的算法。
個人:就是把圖書館中的書轉化爲一些字符數據存入電腦中,以及對這些數據對象集的操作。如找書,擺放放書等。
什麼是算法?
還是圖書館的例子,如果一本一本找累死人,要是有個索引,先找哪一類這樣會快很多。如何查找其實就是算法。
算法是解決問題步驟的有限集合,通常用某一種計算機語言進行僞碼描述。通常用時間複雜度和空間複雜度來衡量算法的優劣。
算法的五大特徵:輸入、輸出、有窮性、確定性、可行性。
輸入:零個或多個輸入。
輸出:一個或多個輸出。
有窮性:有限步驟後在可接受時間內完成。
確定性:每個步驟都有確定含義,無二義性。
可行性:每一步都是可行的。
算法設計要求:正確性、可讀性、健壯性、時間效率高和存儲低。
正確性:有輸入輸出,無二義性,有正確答案。
可讀性:方便閱讀。
健壯性:輸入不合法能處理
時間效率高和存儲低:時間空間複雜度越低越好。
這就是數據結構和算法。