線性表,棧,隊列,串,數組,廣義表,樹,二叉樹,圖算法
重點是線性表,二叉樹數組
每種數據結構須要掌握,添加、更新、刪除、查詢、排序等操做的實現網絡
學習數據結構的四種境界:數據結構
境界1:聽懂理論,聽懂算法思路函數
境界2:完成主要數據結構基本算法的實現(理論+實踐,數據結構入門)性能
境界3:完成更多數據結構更多算法的實現學習
境界4:融會貫通,觸類旁通,在後續開發中綜合應用數據結構知識。優化
一種是數據結構的邏輯層面,即數據的邏輯結構。指針
一種是存在於計算機的物理層面,即數據的存儲結構。對象
線性結構:有且只有一個開始節點和終端結點,而且全部節點最多隻有一個直接前驅和直接後繼。
線性表是一個典型的線性結構。
表和樹是最經常使用的兩種高效數據結構。
集合結構:相似數學裏的集合。
線性結構:數據元素之間存在一對一的線性關係的數據關係
樹狀結構:除了第一個元素之外每一個元素有且僅有一個直接前驅元素,可是能夠有多個後繼元素。一對多的關係。
網狀結構:每一個數據能夠有多個前驅、多個後繼。多對多的關係。
優勢:節省存儲空間。分配的存儲空間用來存儲結點的數據,結點之間的邏輯關係不佔用存儲空間。能夠實現對結點的隨機存取,一個結點對應一個序號,經過序號獲得存儲地址,查詢方便。
缺點:插入和刪除操做須要移動元素,效率低。
每一個結點有數據域和指針域組成,元素之間的邏輯關係經過存儲結點之間的連接關係反映出來。
特色:1 比順序存儲結構密度小。
2 邏輯上相鄰的物理結點沒必要相鄰。
3 插入、刪除靈活(沒必要移動結點,只須要改變其中的指針)。
4 查詢慢
引用型運算:不改變數據結構中原有的數據元素的狀態,只根據須要讀取某些信息
加工型運算:改變數據結構中數據元素的狀態,如內容,個數
對特定問題求解步驟的一種描述,是指令的有限序列。其中每一條指令表示一個或多個操做。
有窮性:一個算法必須在有限個步驟以後結束
肯定性:一個算法的每個步驟都有其確切的含義,相同的輸入必然有相同的輸出
可行性:算法中的每一步必須能夠經過基本運算的有限次執行實現
輸入:零個或多個,取決於特定的數據對象集合。
輸出:一個或多個,輸出與輸入之間存在某種特定的關係。
正確:算法的執行結果知足預先規定的功能和性能要求
可讀:一個算法應當思路清晰,井井有條、簡單明瞭、易讀易懂,一個算法不只是讓機器來執行,也是讓人來讀的
健壯:當輸入不合法數據時,算法可以進行適當處理,而不會產生莫名其妙的輸出或者引發其餘的後果
高效:算法應當具有良好的時空性能
時間複雜度:一個算法在計算機上轉換成程序並運行所須要的時間,由問題規模決定。
主要取決於如下因素:
空間複雜度:算法運行從開始到結束須要的存儲量。
主要由如下構成: