Java資料結構與演算法之單鏈表及簡單操作

2021-07-09 22:10:30 字數 3306 閱讀 5749

單鏈表:鍊錶是一系列儲存資料元素的單元通過指標串連線形成的。單鏈表的儲存單元有兩個域,乙個是資料域,乙個是指標域,這個包含資料域和指標域的儲存單元叫做節點。

資料域[data]:結點的資料域 data 可以使用乙個 object 型別的物件來實現,用於儲存任 何型別的資料元素,並通過物件的引用指向該元素;

(在**中為顯示方便,資料域用int資料型別)

指標域[next]:儲存該節點的直接後繼節點,指標域 next 可以通過節點物件的引 用來實現。

1.定義節點的介面node

package inter;

public

inte***ce node

2.定義單鏈表的節點類

package list;

import inter.node;

public

class

slnode

implements

node

public

slnode(int element, slnode next)

public

void

setnext(slnode next)

public slnode getnext()

public

intgetobject()

public

void

setobject(int obj)

public

void

show() }``

3.定義單鏈表及相關操作的分析

單鏈錶用數列表示(a0,a1,a2,...,a[i-1],a[i],a[i+1],an),a0為首節點(head),an為尾節點

(1)在單鏈表首部插入:每次插入節點,都在首部插入,即待插節點總是在a0後面

public void addinhead(int e)
(2)在單鏈表尾部插入:每次插入節點,都在首部插入,即待插節點總是在an後面,變為尾節點。單鏈表尾部節點的標誌是an的下乙個節點為null
// 在單鏈表的尾部新增資料

public void addintail(int e)

currentnode.setnext(sl);

sl.setnext(null);

system.out.println(sl.getobject() + "||");

}

(3)在單鏈表任意位置i插入data

e:即將資料域為e的新節點p插到a

[i]位置。遍歷單鏈表,直到單鏈表中的節點 位置到index,將a

[i]的直接後繼元素直接變為p的直接後繼,a

[i]的直接後繼為p

// 在單鏈表index處新增e

public void add(int index, int e)

sl.setnext(currentnode);

sl.setobject(e);

previousnode.setnext(sl);

system.out.println(sl.getobject() + "||" + previousnode.getnext());

pos = 0;

}

4.其他刪除,查詢,清除單鏈表
package list;

public

class

singlelink

// 查詢某節點index中的資料域,若存在則返回資料域的值,不存在則返回null

public slnode getobjectbyindex(int index)

if (j > index || currentsn == null)

system.out.println(currentsn.getobject());

return currentsn.getnext();

}// 查詢單鏈表中是否存在某節點的資料域為e,若存在則返回true,不存在則返回false

public

boolean

contains(int o) else

}return is_exits;

}// 在單鏈表index處新增e

public

void

add(int index, int e)

sl.setnext(currentnode);

sl.setobject(e);

previousnode.setnext(sl);

system.out.println(sl.getobject() + "||" + previousnode.getnext());

pos = 0;

}// 在單鏈表的頭部新增資料

public

void

addinhead(int e)

// 在單鏈表的尾部新增資料

public

void

addintail(int e)

currentnode.setnext(sl);

sl.setnext(null);

system.out.println(sl.getobject() + "||");

}// 顯示單鏈表中的所有節點的資料域,不包括首節點

public

void

showalldata()

}// 顯示單鏈表中所有節點的個數,不包括首節點

public

intsize()

return count;

}/** * function:刪除單鏈表位置為index處的節點

* *@param index為節點位置

* * */

public

void

deletenode(int index) else

previousnode.setnext(currentnode.getnext());

system.out.println(currentnode.getobject() + "已被刪除");}}

//清除單鏈表中的所有資料

public

void

clearlink()

}}

5.測試類

package list;

public class test

}

資料結構與演算法之單鏈表

include include define maxsize 100 typedef int elemtype typedef struct lnode linknode void createlistf linknode l,elemtype a,int n 頭插法建立單鏈表 void initl...

資料結構與演算法之單鏈表

鍊錶的實現 實現單鏈表的 構建 資料新增 資料刪除 返回元素所在位置 資料查詢 返回元素所在的位置 的演算法設計 鍊錶的實現 實現單鏈表的 構建 資料新增 資料刪除 返回元素所在位置 資料查詢 返回元素所在的位置 的演算法設計 include include using namespace std ...

java資料結構之單鏈表

在單鏈表中對表頭進行插入或者刪除時,時間複雜度為o 1 單鏈表查詢指定節點時因為要進行迴圈查詢,平均需要查詢n 2次,所以時間複雜度為o n 儲存密度 資料占用的儲存量 整個結點占用的儲存量。根據這個公式可以得出單鏈表的儲存密度為大於1,在空間利用率上面比順序表要差 所以可以得出以下結論 單鏈表一般...