1. 程式人生 > >JAVA數據杏彩源碼搭建出售結構之鏈表

JAVA數據杏彩源碼搭建出售結構之鏈表

引用 棧和隊列 通過 pre 這樣的 內存 ash 操作 速度

鏈表應該是繼數組之後應用最廣的通用存儲結構,鏈表的機制靈活,用途廣泛,適用於許多通用的數據庫,也可取代數組作為其他的存儲結構的基礎,如棧和隊列,除非需要頻繁地通過下標訪問數據,否則在很多使用數組的地方都可以使用鏈表來代替。

  接下來本篇博文會講解到單鏈表,雙端鏈表,有序鏈表,雙向鏈表,和有叠代器的鏈表。(叠代器是用來隨機訪問鏈表元素的一種方法)

  鏈表的實現一般需要用到兩個類,鏈表對象(包含對第一個鏈表節點的引用),鏈表節點(所有保存的數據,和對下一個鏈表節點的引用)。這種 方式可以稱作自引式,由於其中包含一個和自己相同類型的字段(這裏的字段是包含對下一個節點的引用,相當於一個內存地址,而不是具體的對象。若是簡單類型這裏就是實實在在的值,而不是內存地址)

  我們要使用鏈表實現棧,就必須要實現1.在鏈表頭插入一個數據項,2.在鏈表頭刪除一個數據項,3.遍歷鏈表顯示他的內容。

  雙端鏈表:與傳統的鏈表非常相似,但他有一個新的特性:即鏈表有對最後一個鏈節點的引用,就像對第一個鏈節點的引用一樣,這樣就可以高效地在鏈表尾部加入一個元素,從而不用遍歷整個鏈表。(註意和後面討論到的雙向鏈表進行區分)

  雙端鏈表的插入和刪除和普通鏈表類似,插入的時候需要註意鏈表為空的情況,雙端鏈表為空的時候需要將first和last都指向新的鏈節點,如果杏彩源碼搭建出售扣3266397597[dashengba.com]大聖源碼論壇鏈表只有一個鏈節點那麽從表頭刪除也是一種特殊情況,last必須被賦值為null值。但是雙端鏈表也不能很好地解決我們刪除鏈表最後一個鏈節點,因為我們沒有指向鏈表倒數第二個節點的引用,當然也可以遍歷鏈表找到倒數第二個鏈節點,但效率不高,為解決這樣的問題,接下來我們介紹“雙向鏈表”。

  雙向鏈表:傳統鏈表進行反向遍歷是很困難的,雙向鏈表在於每個鏈節點存在兩個指向其他鏈節點的引用,這樣就可以正向和反向遍歷整個鏈表

  雙向鏈表的缺點是每次插入和刪除需要處理四個鏈節點的引用而不是兩個,每個鏈節點多了一個鏈節點的引用,鏈節點所占的空間變大。雙向鏈表可以從任何一頭插入或刪除,可用來作為雙端隊列的基礎

  鏈表的效率:表頭插入和刪除的速度很快,只需改變兩個引用值花費O(1)的時間,平均起來查找刪除和在指定的鏈節點後插入都需要搜索鏈表中的一半的鏈節點。需要O(N)次比較,數組中執行這些操作也需要O(N)次比較,但鏈表速度仍然比數組快,因為在插入和刪除的時候不需要移動任何東西,效率是顯著的。這裏我們使用鏈表相對於數組有一個顯著的優點就是,鏈表的內存使用上是我們想用多少就用多少內存,不像數組在創建之初就固定了數組的大小不能改變。向量也是一種可擴展的數組,但是他擴展是指定長度的擴展,效率相對於鏈表還是低。

  有序鏈表:即鏈表是按照關鍵值有序排列的,有序鏈表插入和刪除一項最多需要O(N)次比較(平均N/2),可以在O(1)時間內找到或刪除最小值,如果一個應用頻繁地存取最小項,有序鏈表會是一個可靠的方案,例如優先級隊列就可以使用有序鏈表來實現。有序鏈表可以用於一種高效的排序機制,將一個無序數組的元素插入到有序鏈表中,然後從有序鏈表中刪除重新放入數組,這樣數組就排好序了。

  叠代器:叠代器提供給鏈表類似於數組下標可以快速找到對應的鏈節點,叠代器類包含了對數據結構中數據項的引用,並用來遍歷這些結構。鏈表的叠代器如下圖所示指向一個鏈節點

  叠代器的特性:我們一般對於鏈表的操作會用到當前節點前一個鏈節點的引用,所以有必要存儲一個previous字段來方便我們操作,叠代器有時候需要改變first的值,我們可以給叠代器傳入一個當前鏈表的引用給叠代器,此時就可以利用此引用拿到first,下面是一個簡單的叠代器類的實現

  在進行不同的操作之後叠代器的指向:叠代器進行刪除之後會將叠代器放在下一個節點(操作方便,可能會對附近數據進行操作,若不是雙向鏈表不能指向前一個鏈節點),若刪除的是最後一個鏈節點,就指向表頭。插入了新的鏈節點會將叠代器指向新的鏈節點。

  這裏我們需要註意的是叠代器中atEnd()方法,通常有兩種方式,當叠代器指向最後一個鏈節點的時候返回true,或者當叠代器指向最後一個鏈節點的下一個的時候返回true(此時不指向一個有效的鏈節點),第一種方式在遍歷鏈表得時候顯得很笨重,當到達最後一個鏈節點的時候還沒來得及做循環體內的事情,循環就終止了。第二種方式一旦到達鏈表結尾,由於單鏈表不能倒退,所以此時需要對最後一個鏈節點進行操作就太晚了,比如刪除。所以叠代器一般采用第一種方式,所以此時寫循環遍歷鏈表就要格外註意了

  以上就是關於鏈表的一些知識點。

JAVA數據杏彩源碼搭建出售結構之鏈表