鍊錶(單向鍊錶,雙向鍊錶)

2022-07-08 14:30:28 字數 3414 閱讀 3848

首先鍊錶是以節點的方式儲存資料的,每個節點包含資料域(data),節點域(next),鍊錶的每個節點在計算機中儲存的位置是不連續的和隨機的,優點就是資料的插入和刪除比較好,而查詢資料效率不是太好(因為鍊錶無法像靜態資料一樣隨機讀取資料,必須按照順序找到對應的資料為止)。

單向鍊錶就像是火車,所有的節點串聯成一列,而且指標所指的方向一樣,也就是鍊錶中每個節點除了儲存原本的資料,還有儲存下乙個節點的儲存位址。如下圖所示:

節點類的**實現

class singlenode 

public 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 node 

public 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...