JAVA基礎——鏈表結構之單鏈表


鏈表:一種數據存儲結構.學鏈表首先要搞懂數組,按朋友的話說,數組和鏈表的關系就相當於QQ2008和QQ2009. 除非要通過索引頻繁訪問各個數據,不然大多數情況下都可以用鏈表代替數組. 鏈表部分主要要涉及:單鏈表,雙端鏈表,有序鏈表,雙向鏈表和有迭代器的鏈表(迭代器是用來隨機訪問鏈表元素的一種方法). 由於以前貪玩數據結構沒上課,現在后悔所以要努力補上.
鏈結點: 在鏈表中,每個數據項都被包含在"鏈結點"(Link)中.一個鏈結點是某個類的對象,這個類可以叫Link.而每個Link對象中又包含着一個對下一個鏈結點引用的字段(通常叫next).但是鏈表(LinkList)本身的對象中有一個字段(first)指向第一個鏈結點的引用.看圖會清晰些. 這張表體現在代碼里就兩個構造類: Link(鏈結點類) 
復制代碼
class Link {     public int iData;     public double dData;     public Link next; // 這個next就是鏈結點對象對下個鏈接點的引用.默認初始化為NULL     public Link(int id, double dd){         iData = id;         dData = dd;     } }
復制代碼
LinkList(鏈表類) 
復制代碼
class LinkList {     public Link first; // 首鏈結點first,初始化為NULL     public  LinkList () {         first = null;     } }
復制代碼
就這樣一個鏈結點指向下個鏈結點的引用構成了整個鏈表. 今天這個實例,顯示了一個單鏈表.主要的操作如下: 在鏈表頭插入一個數據項. 在鏈表頭刪除一個數據項. 遍歷鏈表顯示內容. 首先插入一個鏈接點的邏輯就是:將first的引用指向Link對象鏈結點的next引用,然后再將first指向這個鏈結點就構造了新的鏈表.如圖
代碼大框如下: 
public void insertFirst(int id, double dd) {     Link newLink = new Link(id, dd); // 構造新的鏈結點對象     newLink.next = first; // 將鏈結點對象的next指向first的引用     first = newLink;      // 然后將first指向newLink對象 }

 
刪除一個鏈結點的邏輯就是 :用一個臨時變量存儲first的引用(即要刪除的鏈結點)然后將first指向first.next(即他只想的鏈結點對象的next指向的那個鏈結點Link).這樣要刪除的那個鏈結點就沒有了指針對他的引用.Java垃圾回收就會把他收回.實現了並返回存儲的那個刪除節點.如圖 代碼大框如下: 
public Link deleteFirst() {     Link temp = first; // 暫存first引用的這個鏈結點(即要刪除的)     first = first.next;// 將first指向他所引用的Link鏈接點的next引用     return temp;       // 返回要刪除的鏈結點 }

這要弄清了,Java對象引用的關系理解起來就很容易了.下面就是實現的整個代碼: 

Code

打印的結果為:

復制代碼
List: (first ---> last){88,88.88}{66,66.88}{44,44.88}{22,22.88} {88,88.88}  Deleted {66,66.88}  Deleted {44,44.88}  Deleted {22,22.88}  Deleted List: (first ---> last)
復制代碼

 


 

繼續擴展下添加查找對應鍵值和按對應鍵值刪除鏈結點的find和delete方法.

find方法: 這個方法與上面的displayLink方法類似.將current定義為first,通過不斷的current.next.iData與鍵值作比較,如果相等便返回當前引用. 如果一直到最后Null也沒找到就返回Null delete方法: 這個方法需要兩個變量.current:當前鏈結點的引用 privious:前一鏈結點的引用.這個方法也是通過循環查找如果找到了 .就用前一引用的next指向當前的next的引用就可以了.見圖 最后代碼: 

Code

執行結果: 

List: (first ---> last){88,88.88}{66,66.88}{44,44.88}{22,22.88} the Find Item: {22,22.88}  the Del Item: {22,22.88} List: (first ---> last){88,88.88}{66,66.88}{44,44.88}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM