1. 緣起
- 在處理的數據的時候,不想讓數據像大學宿舍裏一樣混亂
- 希望的數據是結構化的,方便讀取
- 因此,科學家發明了「數據結構」
2. 分類
-
數組
- 名稱:也叫列表,或向量
- 特點:數組的值一個一個連續存在內存裏
- 下標:爲了拿到數組中的某個值,我們需要指定一個下標
- 庫函數
- 排序函數:只要傳入數組,就會返回排序後的數組,不需要寫排序算法
-
字符串
- 其實就是字母、數字、標點符號等,組成的數組
-
矩陣
- 數組的數組
-
結構體
- 概念:多個變量打包在一起
- 特點:可以創造更復雜的數據結構,消除這些限制
- 舉例
- 節點:存一個變量,一個指針
- 指針:是一種特殊變量,指向一個內存地址,因此得名
-
鏈表
- 特點1:是一種靈活的數據結構,能存很多個節點
- 特點2:很容易重新排序,兩端縮減,分割,倒序等
- 特點3:很多複雜數據結構都用鏈表,最出名的是隊列和棧
- 靈活性是通過每個節點 指向 下一個節點實現的
- 循環鏈表:最後一個結點指向頭結點,形成一個環
- 當程序員使用鏈表時,很少看指針具體指向哪裏,而是用鏈表的抽象模型,更容易看懂
-
隊列
- 像郵局排隊,誰先來就排前面,這叫先進先出(FIFO)
-
棧
- 後進先出(LIFO)
- 舉例:鬆餅
-
樹
- 最高的節點叫「根節點」
- 根節點下的所有節點,都叫「子節點」
- 任何子節點的直屬上層節點,叫「母節點」
- 沒有任何「子節點」的節點,也就是「樹」結束的地方,叫「葉節點」
- 重要性質:「根」到「葉」是單向的
-
圖
- 特點1:數據隨意連接,包括循環
- 特點2:可以用有多個指針的節點表示,因此沒有「根」、「葉」、「子節點」、「父節點」這些概念,可以隨意指向
總結
- 不同數據結構適用於不同場景,選擇正確數據結構會讓工作更簡單,所以花時間考慮用什麼數據結構是值得的
- 大多數編程語言自帶了預先做好的數據結構,程序員不同浪費時間從零寫,時間可以花在更有趣的事情上
- C++ 有「標準模板庫」
- Java 有 「Java 類庫」