資料結構之單鏈表(帶頭節點)

2021-10-08 20:12:49 字數 1700 閱讀 6483

今天來聊聊單鏈表。單鏈表是以節點存的鏈式結構,分為帶頭節點和不帶頭節點的單鏈表。單鏈表中的節點包括data域和next域,data域儲存元素的值,next域則儲存下乙個節點的位址。單鏈表中的各個節點在記憶體中不一定是連續儲存的,儲存形式如下圖所示:

從圖中可以看出,單鏈表中的各個節點並不是連續儲存的。帶頭結點的單鏈表結構圖如下圖所示:

聊完單鏈表的基本知識,下面以對明星節點的增刪改查操作為案例,實現對單鏈表的增刪改查操作。

先說明節點結構:

public class node 

@override

public string tostring() ';}}

在實現增加操作,增加操作分為直接在鍊錶尾部增加和根據id在指定位置增加,若要新增的no在鍊錶中已存在,則新增失敗。

在根據id在指定位置增加時,若將鍊錶遍歷完也沒有找到比要插入節點no值大的節點,則在末尾新增;若當前節點的下乙個節點no值大於要插入的節點no值,則跳出迴圈直接新增;若當前節點的下乙個節點no值等於要插入的節點no值,不能新增,直接退出。

public class singlelisted ';

}node head = new node(0,"");

//新增到末尾

public void add(node newnode)

temp = temp.next;

}temp.next = newnode;

}//按照編號順序新增(從小到大),若煉表中已有相同編號的節點,則不可新增

public void addbyorder(node newnode)

if (temp.next.no > newnode.no)else if (temp.next.no == newnode.no)

//往後走

temp = temp.next;

}if (flag)

newnode.next = temp.next;

temp.next = newnode;}}

實現修改和刪除節點操作。在修改和刪除之前,都要先根據要修改和刪除節點no值在鍊錶中找到與no值相等的節點,在進行修改刪除操作。

public void update(node newnode)

boolean flag = false;

while (true)

if (temp.next.no == newnode.no)

temp = temp.next;

}if (flag)else

}/**

* 刪除給定編號的英雄

* @param no

*/public void del(int no)

boolean flag = false;

while (true)

if (temp.next.no == no)

temp = temp.next;

}if (flag)else

}

對於帶頭節點的單鏈表的一些基本操作的實現就到這裡了,有不足之處歡迎指正!

資料結構 單鏈表(帶頭結點)

單鏈表是一種鏈式訪問的資料結構,用一組位址任意的儲存單元存放線性表中的資料元素。鍊錶中的資料是以結點來表示的,每個結點的構成 元素 資料元素的映象 指標 指示後繼元素儲存位置 元素就是儲存資料的儲存單元,指標就是連線每個結點的位址資料。簡單講就是邏輯相鄰,物理不相鄰 帶頭結點 list.h prag...

資料結構 單鏈表 帶頭結點和不帶頭結點

1 單鏈表 通過各結點的鏈結指標來表示結點間的邏輯關係,長度可擴充,遍歷或查詢 2 只能從指標的指示的首元結點開始,跟隨鏈結指標逐個結點進行訪問,進行刪除或插 4 5 6 單鏈表的結構定義 7 typedef int datatype 8 typedef struct node 9 linknode...

單鏈表(帶頭結點)

按照自己的想法和思路寫了一下帶頭結點的單鏈表,並進行了測試,畢竟自己能力有限,可能有的地方沒有測試到,還可能存在一些潛在的錯誤。標頭檔案 include using namespace std typedef struct node node,link typedef struct list lis...