陣列與連結串列
陣列和連結串列是兩種資料結構,陣列非常簡單易用但他有兩個非常大的缺點,一個是陣列一旦建立無法擴充套件,另一個數組的查詢和刪除很慢。
連結串列改善了一些陣列的缺點,但是同樣的連結串列自身也存在一些自己的缺點
大0表示法,一種粗略的評價計算機效率的方法,後面的內容會用到表示效率的方法
#1.陣列
我們按照陣列中的陣列是否排序對陣列進行劃分,將陣列分為無序陣列和有序陣列,無序陣列中的陣列是無序的,有序陣列中是按照升序+降序排序的
##1.1無序陣列
無序陣列中的資料是無序的,往陣列中新增時不用進行比較和移動資料,所以新增資料的時間相同,效率為0(1)
至於查詢和刪除就沒有那麼快了 效率O(N)
結論:
1.插入很快,因為將資料插入到陣列的空餘位置
2.查詢和刪除很慢 ,陣列長度為n,平均查詢速度是N/2 並且還需要移動資料
##1.2有序陣列
無序數組裡面無序 有序數組裡面是有序的
因為有序陣列中資料升降排列,所以插入需要進行排序並且移動資料項 所以查詢比無序陣列慢 刪除一樣慢 O(N)
有序陣列的查詢速度要比無序陣列快,因為使用了一個叫二分查詢法
折半查詢
有序陣列使用二分查詢的效率為 0(logn) 有序陣列也可以二分查詢來新增和刪除資料來提高效率,但依舊 新增刪除侯移動資料項
總結:1. 有序查詢比無序高 效率O(logn)
2.有序陣列刪除和新增的效率很慢 O(N)
##1.3陣列 總結
陣列雖然簡單 但有兩個致命的缺點
1.陣列的儲存數量有限,建立大了浪費,建立小了過溢
2.陣列的效率比其他資料結構低
*無序陣列插入效率為o(1)時間 插入0(n)
* 有序陣列查o(logn)時間,插入花費O(N)時間
*刪除需要移動平均半數的資料項,所以刪除都是O(n)時間
#2.連結串列
陣列一經建立大小就固定,連結串列做出了需改,只要記憶體夠用就可以無限制擴大
連結串列是陣列之後應用最廣泛的資料結構
##2.1 連結串列的特點
連結串列 儲存資料的方式就像一條鎖鏈
每一個鎖鏈一個節點 呼叫next()方法可以遍歷連結串列所有資料
鏈節點 link中,一個鏈結點是某一個類的物件,這個類可以叫做LINK,因為連結串列中有好多的類,所以要不同於連結串列的類來表達連結點
每一個Link物件都包含一個對下一個連結點引用的欄位 叫做next
連結串列本身物件有一個欄位指向對第一個連結點的引用
陣列與連結串列查詢資料得區別:陣列查詢就像一個大倉庫,一號房間沒有,下一個,找完所有房間就行
連結串列中查詢資料就像單線彙報的工作者,一個傳遞一個 最終完成
###2.4 其他連結串列
單向連結串列,只能從後往前遍歷 還有雙端連結串列 雙向連結串列,有序連結串列
雙端連結串列:單向的基礎上,新增一個成員變數指向連結串列的最後一個物件
雙向連結串列是可以從 first和last兩個方向進行遍歷
##連結串列的效率
連結串列的效率
在表頭插入和刪除速度都很快,花費 O(1)
平均起來,查詢和刪除 在指定連結點侯都需要O(n)次比較,雖然陣列也需要,但是連結串列更快一些 不需要移動資料項(只需要改變引用)
#3.總結
連結串列解決了陣列不能解決擴充套件的問題,但是連結串列自身依然存在一些問題(在連結串列的連結點後面查詢&刪除&插入效率不高),那麼有沒有融合了優點又改變了缺點的呢 那就是
二叉樹。下一篇介紹二叉樹。