今天來聊聊單鏈表。單鏈表是以節點存的鏈式結構,分為帶頭節點和不帶頭節點的單鏈表。單鏈表中的節點包括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...