瞭解和學習一種知識的最好方法是帶着相關的問題去探索,當咱們把一些常見的問題所有解答了,咱們也就能對這種事物有一些初步的瞭解了。試着回答下面的幾個問題,讓咱們對數據結構和算法有一個基本的認識吧。前端
從字面意思來理解就是一種數據的多種表現方法,什麼是結構——由組成總體的各部分的搭配和安排(百度百科)。個人理解是:數據的排列,不一樣的數據結構就是數據的多種排列形式,而後根據排列的狀況咱們一般用一個學名來表示它,好比說:數組,集合,樹,圖等。git
當咱們瞭解了數據結構以後,在實際的編程過程中,咱們遇到某一類的數據的時候,咱們就可以找到一種最合適的數據結構來表示他們了。這樣再處理跟數據相關問題的時候就會變得高效,由於肯定了數據結構,咱們也就肯定了針對該結構的數據,使用那些方法來對數據進行相關的操做了。好比說,咱們須要一種數據結構來記錄天天的天氣狀況,當咱們說到某一天的時候,就能馬上知道當天的天氣是怎麼樣的時候咱們能夠用一個數組來表現。又如,咱們要描述一個家族的族譜的時候,用樹型結構比較合適;描述一我的的年齡,身高,體重,民族,學歷這種用集合比較合適;描述排隊的狀況用隊列。github
最經常使用的應該有兩種了:數組,對象。到了ES6又增長了兩種新的數據結構Set和Map,其實Set和Map應該算是數組和對象的一種變種,但總的來講它們又是另外兩種類型的數據結構;算法
數據結構只不過是咱們描述數據的一種手段,但咱們最終的目的一般是對這些數據進行相關的操做,好比:添加,刪除,查找,排序等。所謂的算法就是如何去實現這種操做的一種計算方式。但算法每每不止一種,有道是條條道路通羅馬,一般要達到某種目的,咱們可能會有不少種的算法。好比一個數組咱們要給他進行去重,就有不少種方法。你能夠循環遍歷,把每一個值跟其餘的值比較一遍,也能夠把數組轉成Set結構的數據。編程
上面說到實現某種操做的方法有不少種,可是哪種是最好的,咱們要如何判斷呢。咱們能夠經過算法的執行時間對吧,那種算法執行的速度越快,固然那種算法就最好。但計算機當中,還要考慮到算法的空間複雜度,也就是算法執行過程中,可能佔用的內存空間,一個算法執行的速度很是塊,但執行的時候,須要1T的內存空間,這就不行。因此好的算法每每有兩個條件:數組
我還有個第三點,那就是代碼便於理解,但這部分優秀的算法,每每涉及到不少數學相關的問題,若是沒有這部分相關的概念,理解起來是很是不容易的。數據結構
涉及到前端數據結構和算法的一些學習筆記,我放到了github上面,內容還在更新,儘可能一週分享一個,歡迎你們一塊兒來討論並參與分享,github地址以下:數據結構和算法