1 揭開數據結構神奇的面紗
1.1 初識數據結構
? ? 在C++的標準庫模板(Standard Template Library,STL)課程上,我初次結識了《數據結構》。C++語言提供的標準庫模板是面向對象程序設計與泛型程序設計思想相結合的典范。所謂的泛型編程就是編寫不依賴于具體數據類型的程序。
????STL容器的底層實現依賴于數據結構。向量(vector)是一種順序容器,可視為一種動態數組。集合(set)和映射(map)的底層是用紅黑樹(Red Black Tree)實現的。無序集合(unordered set)和無序映射(unordered map)的底層是哈希表(hash table)實現的。從上面的分析可以看出,STL容器的實現依賴了大量的數據結構。
? ? 作為面向對象程序設計的經典,C++的標準庫模板封裝了大量的數據結構。數據結構知識的匱乏可能會導致STL理解的困難。筆者認為,在學習STL這一部分的內容之前,讀者應該對數據結構有一個基本的認識。
1.2 數據結構的學習
? ? 在搜索引擎上搜索“如何學習數據結構”,網友不是給你推薦五花八門的書籍,就是給你推薦各種刷題技巧。對于一個初學者來說,最重要的是掌握數據結構的基本原理。如若拘泥于各種繁雜是數學推導,那么你在學習了幾節之后變會覺得索然無味,書籍也自然而然地束之高閣了。
? ? 對于初學者,筆者比較推薦通過網絡視頻來學習。筆者比較推薦電子科技大學戴波老師的數據結構與算法慕課課程,該課程講解深入淺出,并且給出了大量的實現代碼。想了解更多數據結構知識,推薦讀者閱讀數據結構與算法教程。
? ? 在學習完成基礎課程之后,讀者可以在解鎖leetcode刷題網站,強烈建議讀者從探索板塊的數據結構專欄開始刷題。通過大量的聯系,我相信讀者對數據結構的理解一定會更加深入,編程能力亦能極大地提高。
1.3 數據結構知識體系
? ? 數據結構是帶有結構的數據原始的集合。數據結構有兩大用途:(1)用于存放要處理的數據;(2)用于實現的算法策略。數據結構可由一個四元組組成:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
????上式表示數據結構由數據原始、數據原始之間的邏輯關系、邏輯關系在計算機中的存儲表示及所規定的操作組成。
????按照邏輯結構,數據結構可以分為線性結構、樹形結構、圖形結構和結合結構等。下圖為邏輯結構分類示意圖。

????按照存儲結構,數據結構可分為順序存儲、鏈式存儲和哈希存儲等。順序存儲結構:把邏輯上相鄰的元素存儲在物理位置相鄰的存儲單元中。鏈式存儲結構:在數據元素中添加一些地址或輔助結構,用于存儲數據原始之間的關系。下圖反映了數據的邏輯結構和存儲結構之間的聯系。

????????數據結構的操作,主要包括查找、插入、刪除、遍歷和排序等。


喜歡的朋友記得點贊、收藏、關注哦!!!