資料結構 動態鍊錶

2021-09-27 03:07:27 字數 3630 閱讀 3093

鍊錶:

儲存資料元素的資訊的域稱為資料域(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用來儲存當前的節點,建立完後掛在前面節點後面...