你們好,我是D狼,做爲一個計算機專業的學生,在大學作過一些專業實踐,可是沒有養成良好的編程習慣,寫這個博客的主要目的是想記錄本身從新學習專業課的心路歷程(D狼以爲如今的專業課教學過於理論),因而我想經過分享本身在實際編程練習中對數據結構的理解,但願能幫助那些和我同樣對專業課理解不深或者對計算機專業課迷茫的人,也讓本身在這個分享過程當中提高本身代碼的質量。算法
數據結構是計算機存儲、組織數據的方式。數據結構是指相互之間存在一種或多種特定關係的數據元素的集合。一般狀況下,精心選擇的數據結構能夠帶來更高的運行或者存儲效率。數據結構每每同高效的檢索算法和索引技術有關。 (第一次看的時候我也很懵逼,很抽象)
說人話就是 :數據結構就是在你編程開發或者在對數據進行操做時,針對你所在的特定狀況選擇對於你如今來講最適合的算法或者操做,記住,最合適的就是最好的。編程
數據結構由 邏輯結構、存儲結構 和 數據運算 組成;
1.邏輯結構又分爲 線性結構 和 非線性結構 組成;
其中線性結構就是一對一,例如 數組、鏈表等,而非線性結構有 集合結構 和 樹結構、圖結構 ,集合結構就是同屬於一個集合。
2.存儲結構有 順序存儲、連接存儲、引索存儲和散列存儲。
順序存儲,相鄰存儲單位;
連接結構,不要求物理地址相鄰,經過地址指針去存取數據;
引索結構,附加引索表;
散列存儲,根據關鍵字直接計算出存儲位置數組
在編程過程當中,用到順序存儲的數據結構,典型表明就是數組、在Java中List對象、TreeSet對象都是有序的。都是在內存中開闢一塊靜態連續區域用於存儲數據。以下表所示。數據結構
0 | 1 | 2 | 3 |
---|---|---|---|
a | b | c | d |
順序存儲的優點是能夠快速的找到你說須要的值,就比如你在一棵樹下能夠很清楚的看到哪一個枝丫上長着果子同樣,時間複雜度爲o(1)。
可是缺點是當我想要摘掉壞的果子時,就改變了樹上果子的序列,這樣我對這些果子的編號都要從新去編排,時間複雜度爲O(N)。app
在順序存儲中,修改和添加、刪除數據須要大量移動,致使了效率的下降。學習
你們小時候都玩過磁鐵吧,小時候就喜歡把貼着神奇寶貝圖片的磁鐵連在一塊兒,這個鏈表就有這個意思,假如第一個磁鐵上面是妙蛙種子,而第二個是皮卡丘,第三個爲噴火龍。
鏈式存儲能夠分佈在任何一個碎片的存儲空間中,可是能夠經過上一個所存信息找到下一個所在位置,從而進行增刪查改。在JAVA中LINKLIST就是表明。
優勢是可以快速的進行增刪改操做。時間複雜度爲O(1),前提是知道元素所在位置。
缺點是找到這個元素,須要一個個遍歷,因此時間複雜度爲O(n)。
指針