不少人在實際工做中,並不會直接實現數據結構和寫一個算法來解決實際問題,由於這些都在類庫或者框架內部實現了,只須要調用類庫或框架提供的 api。這些 api 極大的幫助了咱們快速實現業務需求,開發出符合要求的產品。這樣的 api 調用對程序猿(媛)來講不是那麼的困難,致使如今愈來愈多的人開始步入這個高薪行業。作開發的人愈來愈多,爲了提升門檻,不少企業開始注重候選人的基本功那就是數據結構和算法。git
咱們平時所用的技術都是基於數據結構和算法在上層作了封裝,想要用好這些技術就得去了解,去熟悉這些技術所用的數據結構或者算法。當程序調用出錯時,熟悉數據結構和算法對於閱讀底層的源碼會有很大的幫助。程序的性能瓶頸每每都跟數據結構和算法有關係的,每種數據結構有各類的優缺點,每種算法有不一樣的時間複雜度和空間複雜度,當你瞭解這些,你就可以使用合適的數據結構和算法讓程序得到更優越的性能。github
有些算法是用來解決一類問題,瞭解算法的思想,就能使用算法來解決同類問題。更高級一點講,若是你對現有的技術不滿意,就能夠本身在數據結構和算法的基礎上加以改進。算法
數據結構是計算機存儲和組織數據的方式。數據結構是用來保存數據的集合。當數據以某種特定的關係聯繫起來,就須要選擇對應的數據結構來存儲,選擇不一樣的數據結構對運行速度和存儲效率都會有影響。api
算法是解決問題的代碼,是描述解決問題的過程。對於符合規定的輸入,得到符合預期的輸出。使用不一樣的算法解決相同的問題所花費的時間是不一樣的。空間複雜度和時間複雜度是用來衡量一個算法的優劣。數組
數據結構是底層,爲算法提供服務。算法老是要依賴種數據結構來解決問題。簡而言之,程序就等於數據結構 + 算法。數據結構
數據結構包括線性結構和非線性結構。框架
線性結構是最經常使用的數據結構,特色是數據元素之間存在一對一的關係。線性結構有兩種存儲方式,一種是順序存儲叫作順序表,其存儲的元素在內存中是連續的,另一種叫作鏈表,其存儲的元素不必定是連續的,元素節點中存放數據元素以及相鄰元素的地址信息。數據結構和算法
常見的線性結構有數組、隊列、鏈表和棧。ide
非線性結構的一個結點元素可能有多個直接前驅和多個直接後繼結點。非線性結構包括二維數組、多維數組、廣義表、樹和圖。性能