資料結構2 簡單實現單鏈表

2021-08-21 04:47:04 字數 2737 閱讀 6686

package com.zejian.structures.linkedlist.mylinked;

/*** 單鏈表的進化版本

* @param */

public class singlelinkedlist2implements ilinkedlist

//構造方法

public singlelinkedlist2(nodehead)

/*** 傳入陣列,生成單鏈表

* @param arr

*/public singlelinkedlist2(t arr)

}}

/*** 傳入鍊錶生成新的鍊錶

* @param linkedlist2

*/public singlelinkedlist2(singlelinkedlist2linkedlist2)

} }

/*** 判斷鍊錶是否為空

* 需要判斷鍊錶是否為空的依據是頭結點head是否為null,當head=null時煉錶即為空鍊錶,因此我們只需判斷頭結點是

* @return

*/@override

public boolean isempty()

/*** 計算鍊錶的長度

* 遍歷鍊錶需要從頭結點headnode開始,為了不改變頭結點的儲存單元,

* 宣告變數p指向當前頭結點和區域性變數length,然後p從頭結點開始訪問,

* 沿著next位址鏈到達後繼結點,逐個訪問,直到最後乙個結點,每經過乙個結點length就加一,

* 最後length的大小就是鍊錶的大小

* @return

*/@override

public int length()

return length;

} /**

* 在單鏈表中獲取某個元素的值是一種比較費時間的操作,需要從頭結點開始遍歷直至傳入值index指向的位置,

* 其中需要注意的是index是從0開始計算,也就是說傳遞的index=3時,查詢的是鍊錶中第4個位置的值

* @param index

* @return

*/@override

public t get(int index)

/*** 從**和圖示看來確實只要獲取當前的尾部指向的結點rear並把新結點賦值給rear.next,最後更新rear結點的值即可,

* 完全不用遍歷操作,但是如果是根據index來插入的還,遍歷部分結點還是少不了的,

* 下面看看根據index插入的**實現,由於有了頭結點,頭部、中間、尾部插入無需區分操作位都視為一種情況處理。

* @param data

* @return

*/@override

public boolean add(t data)

/***

* @param index

* @return

*/@override

public t remove(int index)

}//刪除節點

p.next=move.next;

}return old;

}/**

* 根據data移除所有資料相同的結點

* @param data

* @return

*/@override

public boolean removeall(t data)

//更改指標方法

font.next=pre.next;

重新指向pre,這時pre=pre.next

pre=font.next;

}else

} }

return true;

}/**

* 刪除所有節點

*/@override

public void clear()

/*** 判斷是否包含某個值

* @param data

* @return

*/@override

public boolean contains(t data)

headnode=headnode.next;

} return false;

}/**

* 從末尾連線兩個鍊錶

* @param list

*/public void concat(singlelinkedlist2list) else

p.next = list.headnode.next;

//更新指標

this.rear = list.rear;}}

/***列印

*/public string tostring()

return str+")";

} public static void main(string args) ;

singlelinkedlist2list=new singlelinkedlist2<>(letters);

list.add("aaa");

list.removeall("aaa");

for (int i = 0; i system.out.println(list.contains("a"));

list.set(1,"vv");

system.out.println(list.tostring());//(vv, b, c, d, e, f)

} }

資料結構 單鏈表的簡單實現

單鏈表的實現 include include typedef struct lnodelnode,linklist 判空函式 bool empty linklist l 單鏈表輸出函式 bool linklist output linklist l while head printf n retur...

資料結構 2 單鏈表

單鏈表與順序鍊錶不同,順序鍊錶在宣告時在記憶體中開闢一塊連續的儲存空間進行鍊錶資料項的儲存。所以單鏈表的項只需要儲存其資料,根據資料所在的序號進行訪問直接由鍊錶類控制,因為屋裡儲存區域連續,所以能夠很方便實現這些資料的訪問,插入和刪除。單鏈表在記憶體中不適用連續的空間儲存,所以單鏈表的項實際儲存兩個...

資料結構 單鏈表實現

線性表的鏈式儲存結構的特點是用一組任意的儲存單元儲存線性表的資料元素 這組儲存單元可以是連續的,也可以是不連續的 因此,為了表示每個資料元素與其直接後繼資料元素之間的邏輯關係,對資料元素來說,除了儲存其本身的資訊之外,還需儲存乙個指示其直接後繼的資訊 即直接後繼的儲存位置 這兩部分資訊組成資料元素的...