資料結構學習筆記 鍊錶篇

2021-10-09 03:26:35 字數 4335 閱讀 1905

什麼是鍊錶

特點:資料元素的儲存對應的是不連續的儲存空間,每個儲存結點對應乙個需要儲存的資料元素。每個結點是由資料域和指標域組成。 元素之間的邏輯關係通過儲存節點之間的鏈結關係反映出來。

邏輯上相鄰的節點物理上不必相鄰。

缺點:1、比順序儲存結構的儲存密度小 (每個節點都由資料域和指標域組成,所以相同空間內假設全存滿的話順序比鏈式儲存更多)。

2、查詢結點時鏈式儲存要比順序儲存慢(每個節點位址不連續、無規律,導致按照索引查詢效率低下)。

優點:1、插入、刪除靈活 (不必移動節點,只要改變節點中的指標,但是需要先定位到元素上)。

2、有元素才會分配結點空間,不會有閒置的結點。

單向鍊錶

單向鍊錶的節點只有乙個資料域和乙個指標域,資料域用來儲存該節點需要儲存的資料,指標域指向該節點的下乙個節點

**實現

//單向鍊錶類

public

class

singlelinkedlist

public

node

(t val)

@override

public string tostring()

';}@override

public

boolean

equals

(object o)

}//建立頭結點 不存放任何資料

node head =

newnode()

;//增

//尾插法

public

void

addlast

(t val)

//新增到尾節點後

temp.next =

newnode

(val);}

//頭插法

public

void

addhead

(t val)

//刪除指定下標元素

public

boolean

delete

(int index)

//下標從0開始,將輔助節點temp移動到指定下標處的前乙個元素

node temp = head;

for(

int i =

0; i < index; i++

)//將temp的next域指向要刪除的節點的下乙個節點

temp.next = temp.next.next;

return

true;}

//獲取鍊錶中有效節點個數

public

intgetlength()

node temp = head.next;

int count =1;

while

((temp = temp.next)

!= null)

return count;

}//改

public t alter

(int index,t val)

//將temp移動到指定下標處,下標從0開始

node temp = head.next;

t oldval;

for(

int i =

0; i < index; i++

)//修改當前節點的資料域儲存的資料,並將原來的資料返回

oldval = temp.val;

temp.val = val;

return oldval;

}//查

public

intselect

(t val)

index++;}

return-1

;}//顯示鍊錶中的元素

public

void

show()

}}

缺點

單向鍊錶只能通過乙個方向來遍歷鍊錶,無法反向遍歷

刪除節點時需要依靠被刪除的節點的前乙個節點

雙向鍊錶

雙向鍊錶的節點由乙個資料域和兩個指標域組成,乙個指標域指向該節點的前乙個節點(pre),另乙個指標域指向該節點的下乙個節點(next)

**實現

//雙向鍊錶類

public

class

twinlinkedlist

public

node

(t val)

@override

public string tostring()

';}}

//頭結點

private node head;

//尾節點

private node tail;

//鍊錶中節點個數

private

int size =0;

public

twinlinkedlist()

//增public

void

add(t val)

//尾節點初始化

if(tail == null)

//將要新增的節點新增到尾節點的下乙個

tail.next =

newnode

(val)

;//要新增的節點的pre指向尾節點

tail.next.pre = tail;

//尾節點變成新新增的節點

tail = tail.next;

size++;}

//刪public

boolean

delete

(int index)

node temp = head;

for(

int i =

0; i < index; i++

) size--

;//將temp的前乙個節點的next指向temp的後乙個節點

temp.pre.next = temp.next;

if(temp.next == null)

//temp的後乙個節點的pre指向temp的前乙個節點

temp.next.pre = temp.pre;

return

true;}

//改public t alter

(int index,t val)

node temp = head;

t oldval = null;

for(

int i =

0; i < index; i++

) oldval = temp.val;

temp.val = val;

return oldval;

}//查

public

intselect

(t val)

node temp = head;

int index =0;

while

(temp != null)

index++

; temp = temp.next;

}return-1

;}//列印鍊錶中的節點

public

void

print()

}public

intgetsize()

}

環形鍊錶

頭結點和尾節點連線在一起的鍊錶,在單鏈表和雙鏈表中都可以實現

**實現

public

class

annularlinedlist

@override

public string tostring()

';}}

private node first;

//頭結點

private node temp;

//下乙個節點的新增位置

public

void

add(t val)

temp.next =

newnode

(val)

; temp.next.next = first;

temp = temp.next;

}}

資料結構學習筆記 鍊錶

表示式的計算 表示式的計算涉及到棧的操作 對於表示式 a b c d e f 演算法 用到兩個棧,分別是符號棧和運算元棧。輸入表示式時,為了表示表示式輸入完畢,在表示式的最後加上 號,也就是說輸入的表示式為 a b c d e f 首先設定各個符號的優先順序,和 的優先順序為0,也就是最低的 和 的...

資料結構學習筆記 鍊錶

2.建立鍊錶 3.單向和雙向迴圈鍊錶 4.總結 struct list node 首先了解鍊錶的組成部分 說明 頭節點 在單鏈表的第乙個結點之前附設乙個結點,它沒有直接前驅,稱之為頭結點,頭結點的資料域可以不儲存任何資訊,指標域指向第乙個節點 首節點 的位址。頭結點的作用是使所有鍊錶 包括空表 的頭...

資料結構學習 鍊錶

將從下面4部分進行介紹 首先介紹鍊錶是什麼,然後介紹為什麼定義鍊錶,接著是鍊錶的分類,最後簡單介紹一下鍊錶結點的插入與刪除方法。首先,在介紹鍊錶之前,我們先介紹一下什麼是順序儲存結構。我們知道資料在計算機中的儲存就像貨物在倉庫中的儲存一樣,不但占用一定的空間,還要有乙個標示儲存位置的位址。計算機通過...