1. 程式人生 > 其它 >陣列與連結串列

陣列與連結串列

陣列和連結串列是兩種資料結構,陣列非常簡單易用但他有兩個非常大的缺點,一個是陣列一旦建立無法擴充套件,另一個數組的查詢和刪除很慢。

連結串列改善了一些陣列的缺點,但是同樣的連結串列自身也存在一些自己的缺點

 

大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.總結

   連結串列解決了陣列不能解決擴充套件的問題,但是連結串列自身依然存在一些問題(在連結串列的連結點後面查詢&刪除&插入效率不高),那麼有沒有融合了優點又改變了缺點的呢    那就是

二叉樹。下一篇介紹二叉樹。