鍊錶:
儲存資料元素的資訊的域稱為資料域(data域):存的就是該節點要存的元素
這兩個部分組成起來的資料稱之為節點(node)
(node=data+next)
單鏈表:只包含乙個指標域的節點組合起來的,叫做單鏈表,只知道下乙個節點位址
雙鏈表:對於乙個節點而言,需要兩個位址,要知道上乙個節點的位址和下乙個節點的位址
通俗的話來講就是:
你知道你物件在**,你物件不知道你在**,這就叫做做單鏈表
你知道你物件在**,你物件也知道你在**,這就叫做雙鏈表
頭結點:該鍊錶的第乙個節點
頭結點分為:真實頭結點、虛擬頭結點
真實頭結點:其第乙個節點用於儲存資料
虛擬頭結點:其第乙個節點不允許儲存資料
如果頭結點的下一跳是空,則為虛擬頭結點
鍊錶中插入元素有兩種:頭插法 尾插法
指標域不可能直接指向乙個資料,需要把資料進行封裝,封裝到乙個節點裡面
頭插法:先把頭結點的下一跳給 新來元素的下一跳,再把當前元素的位址給頭節點的下一跳
現在雖然頭插法結束了,但是尾指標沒動,所以尾指標應該指向a
頭插法的特殊情況:
當鍊表為空時,來乙個元素用頭插法完成後 要移動尾指標,
所以說第乙個頭插法進去的元素指向的尾指標該指向的元素為節點
尾插法:
圖08 先把新元素的位址給尾的下一跳,也就是說圖09 之後再移動尾指標
如果再來乙個元素,即就是把新元素給上乙個元素的尾節點的下一跳,之後尾節點再後移
頭插尾插同時用:
刪除元素
注意:當刪頭的時候,若是最後乙個元素,一定要把尾指標找回來
當刪尾的時候,時間複雜度必須是o(n),因為必須找到前乙個的節點
**:
public
class
linkedlist
implements
list
public
node
(e data,node next)
@override
//tostring是列印節點資訊的
public string tostring()
}private node head;
//指向頭結點的頭指標
private node rear;
//指向尾節點的尾指標
private
int size;
//記錄元素個數
public
linkedlist()
public
linkedlist
(e arr)
public
intgetsize()
public
boolean
isempty()
public
void
add(
int index, e e)
node n =
newnode
(e,null);if
(index==0)
}else
if(index==size)
else
n.next=p.next;
p.next=n;
} size++;}
public
void
addfirst
(e e)
public
void
addlast
(e e)
public e get
(int index)
if(index==0)
else
if(index==size-1)
else
return p.data;}}
public e getfirst()
public e getlast()
public
void
set(
int index, e e)
if(index==0)
else
if(index==size-1)
else
p.data=e;}}
public
boolean
contains
(e e)
public
intfind
(e e)
node p=head;
while
(p.next!=null)
}return-1
;}public e remove
(int index)
e res=null;
if(index==0)
}else
if(index==size-1)
p.next=null;
rear=p;
}else
node del=p.next;
res=del.data;
p.next=del.next;
del.next=null;
del=null;
} size--
;return res;
}public e removefirst()
public e removelast()
public
void
removeelement
(e e)
remove
(index);}
public
void
clear()
@override
public string tostring()
else
else}}
return sb.
tostring();}}
動態資料結構 鍊錶
include include 引用malloc 函式 結點結構體 struct node 不要忘了分號 頭尾指標定義 struct node phead null 全域性變數 struct node pend null 全域性變數 尾插法 void addlisttail int a 頭插法 vo...
鍊錶 動態資料結構
1 什麼是鍊錶 動態陣列 棧和佇列 底層依託靜態陣列 靠resize解決固定容量問題 鍊錶 class node 2 鍊錶操作 新增元素 1 在煉表頭新增元素 node.next head head node public void addfirst e e 2 在鍊錶中間新增元素 find pre...
動態資料結構 動態建立鍊錶
include include struct weapon struct weapon create 需要乙個建立鍊錶的函式,函式的返回值型別是struct weapon 型別 p2 next null return head int main 總結 p1用來儲存當前的節點,建立完後掛在前面節點後面...