【從頭開始學】資料結構01
- 首先什么是資料結構?
- 什么是順序存盤?
- 什么是鏈式存盤?
- 總的來說,順序存盤和鏈式存盤在時間復雜度上都是O(n),但在查找效率和洗掉效率上相差很大,
- 下節繼續分解存盤結構的剩下兩種方式
【從頭開始學】系列簡介
大家好,我是D狼,作為一個計算機專業的學生,在大學做過一些專業實踐,但是沒有養成良好的編程習慣,寫這個博客的主要目的是想記錄自己重新學習專業課的心路歷程(D狼覺得現在的專業課教學過于理論),于是我想通過分享自己在實際編程練習中對資料結構的理解,希望能幫助那些和我一樣對專業課理解不深或者對計算機專業課迷茫的人,也讓自己在這個分享程序中提升自己代碼的質量,
首先什么是資料結構?
資料結構是計算機存盤、組織資料的方式,資料結構是指相互之間存在一種或多種特定關系的資料元素的集合,通常情況下,精心選擇的資料結構可以帶來更高的運行或者存盤效率,資料結構往往同高效的檢索演算法和索引技術有關, (第一次看的時候我也很懵逼,很抽象)
說人話就是 :資料結構就是在你編程開發或者在對資料進行操作時,針對你所在的特定情況選擇對于你現在來說最適合的演算法或者操作,記住,最合適的就是最好的,
資料結構由 邏輯結構、存盤結構 和 資料運算 組成;
1.邏輯結構又分為 線性結構 和 非線性結構 組成;
其中線性結構就是一對一,例如 陣列、鏈表等,而非線性結構有 集合結構 和 樹結構、圖結構 ,集合結構就是同屬于一個集合,
2.存盤結構有 順序存盤、鏈接存盤、引索存盤和散列存盤,
順序存盤,相鄰存盤單位;
鏈接結構,不要求物理地址相鄰,通過地址指標去存取資料;
引索結構,附加引索表;
散列存盤,根據關鍵字直接計算出存盤位置
什么是順序存盤?
在編程程序中,用到順序存盤的資料結構,典型代表就是陣列、在Java中List物件、TreeSet物件都是有序的,都是在記憶體中開辟一塊靜態連續區域用于存盤資料,如下表所示,
| 0 | 1 | 2 | 3 |
|---|---|---|---|
| a | b | c | d |
順序存盤的優勢是可以快速的找到你說需要的值,就好比你在一棵樹下可以很清楚的看到哪個枝丫上長著果子一樣,時間復雜度為o(1),
但是缺點是當我想要摘掉壞的果子時,就改變了樹上果子的序列,這樣我對這些果子的編號都要重新去編排,時間復雜度為O(N),

在順序存盤中,修改和添加、洗掉資料需要大量移動,導致了效率的降低,
什么是鏈式存盤?
大家小時候都玩過磁鐵吧,小時候就喜歡把貼著神奇寶貝圖片的磁鐵連在一起,這個鏈表就有這個意思,假如第一個磁鐵上面是妙蛙種子,而第二個是皮卡丘,第三個為噴火龍,
鏈式存盤可以分布在任何一個碎片的存盤空間中,但是可以通過上一個所存資訊找到下一個所在位置,從而進行增刪查改,在JAVA中LINKLIST就是代表,
優點是能夠快速的進行增刪改操作,時間復雜度為O(1),前提是知道元素所在位置,
缺點是找到這個元素,需要一個個遍歷,所以時間復雜度為O(n),
總的來說,順序存盤和鏈式存盤在時間復雜度上都是O(n),但在查找效率和洗掉效率上相差很大,
下節繼續分解存盤結構的剩下兩種方式
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/49744.html
標籤:其他
上一篇:ICPC 2019-2020 North-Western Russia Regional Contest E. Equidistant(分層)
下一篇:【從頭開始學】資料結構02
