填補那些模稜兩可的後知後覺
public class linkedlist
public node(e e)
public node()
@override
public string tostring()
}private node dummyhead;//虛擬頭節點
private int size;//元素個數
public linkedlist()
//獲取鍊錶中的元素個數
public int getsize()
//判斷鍊錶是否為空
public boolean isempty()
/*** 在指定索引處新增元素
* @param index
* @param e
*/public void add(int index,e e)
//利用虛擬頭節點,將新增索引處的前方元素全部前移一位
node prve = dummyhead;
for (int i = 0; i < index; i++)
prve.next = new node(e,prve.next);
size++;
}/**
* 新增頭節點
*/public void addfirst(e e)
/*** 在結尾處增加元素
* @param e
*/public void addlast(e e)
public e get(int index)
node cur = dummyhead.next;
for (int i = 0; i < size; i++)
return cur.e;
}//獲取鍊錶的第乙個元素
public e getfirst()
//獲取鍊錶的最後乙個元素
public e getlast()
//修改鍊錶中指定位置的元素
public void set(int index ,e e)
node cur = dummyhead.next;
for (int i = 0; i < size; i++)
cur.e = e;
}//查詢鍊錶中是否包含某個元素e
public boolean contains(e e)
cur = cur.next;
}return false;
}//刪除指定位置的元素
public void remove(int index)
//首先定位此元素,與修改或查詢一致,將改元素置空,然後將改元素原來的前後元素進行指向
node prev = dummyhead;
for (int i = 0; i < index; i++)
//查詢到了元素
node retnode = prev.next;
//將前後元素進行關聯
prev.next = retnode.next;
//直接指向空
retnode.next = null;
size --;
}//刪除鍊錶中的第乙個元素
public void removefirst()
// 從鍊錶中刪除最後乙個元素, 返回刪除的元素
public void removelast()
@override
public string tostring()
return res.tostring();
}}
因為第乙個元素(真頭節點)是沒有前序節點的。當我們在做操作時都需要對頭節點進行單獨的判斷,這樣一來的話,真頭節點的邏輯就有空。所以為了方便,我們設定乙個虛擬的頭節點,來遮蔽真頭節點的特殊性。
我們從鍊錶的操作中可以很容易的看出,對於增刪改查這幾個操作的複雜度都是o(n)的,但是如果我們只是對鍊表頭進行增/刪/查的操作的話,那麼它的複雜度就是o(1)的,這裡也可以看出來我們的鍊錶適合幹的事情了..
資料結構2 鍊錶
首先來說乙個問題,線性表和鍊錶的區別。線性表是n個資料元素的有限序列,複雜的線性表中,資料元素可以有若干個資料項構成乙個記錄。線性表可以有兩種表示方式,順序表示和鏈式表示。線性表的順序表示是用一組連續的記憶體儲存線性表的資料元素。而線性表的鏈式表示是用隨機的儲存單元來儲存線性表的元素,這種線性表就是...
資料結構2迴圈鍊錶
尾結點指向頭結點的單鏈表。解決了單鏈表無法查詢某一結點的問題。結點定義方式 define maxsize 20 定義陣列的最大長度 typedef struct clinklist mode 類似單鏈表。迴圈鍊錶的初始化 初始化迴圈鍊錶 void ds init mode pnode pnode 指...
資料結構之鍊錶2
繼上文 資料結構之鍊錶1之後,本文將繼續講解鍊錶。迴圈單鏈表是另一種形式的單鏈表。它的特點是表中的最後乙個結點的指標域指向頭結點,整個鍊錶形成乙個環。因此,從迴圈單鏈表中任一結點出發均可找到表中其他結點,如下圖。類似的,還可以有多重鏈的迴圈鍊錶。迴圈單鏈表的底層實現 迴圈單鏈表的操作與單鏈表的實現基...