首先鍊錶是以節點的方式儲存資料的,每個節點包含資料域(data),節點域(next),鍊錶的每個節點在計算機中儲存的位置是不連續的和隨機的,優點就是資料的插入和刪除比較好,而查詢資料效率不是太好(因為鍊錶無法像靜態資料一樣隨機讀取資料,必須按照順序找到對應的資料為止)。
單向鍊錶就像是火車,所有的節點串聯成一列,而且指標所指的方向一樣,也就是鍊錶中每個節點除了儲存原本的資料,還有儲存下乙個節點的儲存位址。如下圖所示:
節點類的**實現
class singlenodepublic singlenode(object object, singlenode next)
}
/**簡單的說就是有兩個字段存放指標,乙個字段存放資料,如下圖所示: 節點類的定義:* 單鏈表的實現
*/public class singlelinklist
/*** 在鍊錶的頭部和尾部新增元素
* 思路分析:當鍊表為空時,就相當於在鍊錶的頭部新增資料,所以把新新增的節點賦值給頭結點(尾節點),
* 當鍊表不為空時,就相當於於在鍊錶的尾部新增資料,這時候我們就是把尾部的指標指向新新增的節點(即last.next=node),然後把新新增的節點賦值到
* 最後節點 (即last=node)
*/public void add(object object) else
last = node;
size++;
}/**
* 在指定的節點增加元素
* 思路分析:首先我們需要判斷新增的位置是否滿足條件(index>0 && index 0 && index < size)
before.next = node;
node.next = temp;
size++;}}
/*** 展示鍊錶中的節點元素
*/public void show() }}
/*** 獲得指定節點的元素
* 思路分析:定義乙個指標,迴圈到指定位置,把元素取出即可
* @param index
* @return
*/public object get(int index)
return temp.object;}}
return null;
}/**
* 刪除指定節點的元素
* @param index
*/public void remove(int index)
beforetemp.next = temp.next;}}
}/**
* 修改指定節點的指定元素
** @param index
* @param object
*/public void update(int index, object object)
temp.object = object;}}
}/**
* 實現鍊錶的反向列印
* 思路分析:利用棧先進後出的特點,首先把元素放到棧中,然後再取出,即可。
*/public void reprint()
while (stack.size() > 0) }}
/*** 將單鏈表反轉
*/public void reversetlist()
current = before;
while (current != null)
}
class nodepublic node(node pre, object object, node next)
}
public class doublelistdemo else每天進步一丟丟last = node;
size++;
}public boolean iselmentindex(int index)
/*** 在指定節點新增元素
* @param index
* @param object
*/public void add(int index, object object)
node newnode = new node(null, object, null);
node up = temp.pre; //temp 節點前的節點(原來的鍊錶)
up.next = newnode;
newnode.pre = up;
temp.pre = newnode;
newnode.next = temp;
size++;}}
/*** 刪除指定節點的元素
* 實現思路:同單向鍊錶
* @param index
* @return
*/public void remove(int index)
node up = temp.pre;
node down = temp.next;
up.next = down;
down.pre = up;
size--;}}
/*** 獲得指定節點中的元素
** @param index
* @return
*/public object get(int index)
return temp.object;
}return null;
}/**
* 判斷節點的個數
** @return
*/public int size()
/*** 獲得鍊錶中全部的元素
*/public void show()
system.out.println();
}/**
* 修改指定節點的元素
** @param index
* @return
*/public void update(int index, object object)
temp.object = object;}}
/*** 判斷鍊錶是否為空
** @return
*/public boolean isempty()
}
完畢。
鍊錶 單向鍊錶
討論單鏈表之前,我們先來討論下面這個問題。順序表存在的一些問題 中間 頭部的插入刪除,時間複雜度為o n 增容需要申請新空間,拷貝資料,釋放舊空間。會有不小的消耗。增容一般是呈2倍的增長,勢必會有一定的空間浪費。例如當前容量為100,滿了以後增容到200,我們再繼續插入了5個資料,後面沒有資料插入了...
單向鍊錶和雙向鍊錶區別 雙向鍊錶
一開始確實被這個雙向鍊錶整暈了,node裡面不停套node,簡直無限套娃,讓人不知道該怎麼下手。後來看了資料結構與演算法分析這本書的 才算整明白。我把鍊錶分成了三個部分 第一部分是node.node是乙個由兩根指標,以及我們需要儲存的資料構成的結構體。這個node就是無限套娃的起源,也是鍊錶用於儲存...
單向鍊錶he雙向鍊錶
鍊錶 linked list 是一種常見的基礎資料結構,是一種線性表,但是並不會按線性的順序儲存資料,而是在每乙個節點裡存到下乙個節點的指標 pointer 在電腦科學中,鍊錶作為一種基礎的資料結構可以用來生成其它型別的資料結構。鍊錶通常由一連串節點組成,每個節點包含任意的例項資料 data fie...