資料結構專題 線性表之雙鏈表及其Java實現

2021-08-10 03:06:47 字數 2065 閱讀 8458

這種鍊錶的缺點顯而易見,因為只能夠單向遍歷,即使我們想要訪問最後乙個元素也不得不從第乙個元素開始遍歷到最後乙個元素。

為了解決這個問題,雙鏈表應運而生。和單鏈表十分相似,唯一的區別在於每個節點當中包含兩個指標域,分別指向著這個節點的前驅節點和後繼節點。

因此,對於每乙個資料元素ai來說,除了儲存其本身的資料資訊之外,還需要儲存乙個指示其直接後繼元素的記憶體位置和乙個其直接前驅元素的記憶體位置。我們把儲存資料元素資訊的域稱為資料域,把儲存直接後繼元素位置的域稱為後繼指標域,把儲存直接前驅元素位置的域稱為前驅指標域。這三部分資訊組成資料元素ai的儲存映像,稱為節點(node)。n個節點連線成乙個鍊錶(a1,a2, … ,an),因為這個鍊錶的每個節點中包含兩個指標域(指向它的直接後繼元素和前驅元素),所以這種鍊錶被稱為雙鏈表。

與單鏈表相比,如果我們需要訪問較為靠後的元素資料,只需要從尾節點向前遍歷即可。

//雙鏈表中的首標記節點,此節點不存放元素,前驅結點指向null,後繼節點指向鍊錶中的第乙個元素節點

private node firstflagnode;

//雙鏈表中的尾標記節點,此節點不存放元素,後繼結點指向null,前驅節點指向鍊錶中的最後乙個元素節點

private node lastflagnode;

//雙鏈表中元素的數量

private

int size;

public

mydoublylinkedlist()

//內部類node,用來表示雙鏈表中每乙個資料元素

class node

}

@override

public

intsize()

@override

public

boolean

isempty()

@override

public

boolean

add(e e)

@override

public

void

add(int index, e element)

//私有方法獲取當前index位置的前乙個節點

private node getprevnodebyindex(int index)

}return n;

}

@override

public

boolean

remove(object o)

}return

false;

}else

}return

false;}}

@override

public e remove(int index)

private

void

checkindexvalidation(int index)

@override

public

void

clear()

firstflagnode.nextnode = lastflagnode;

lastflagnode.prevnode = firstflagnode;

this.size = 0;

}@override

public e get(int index)

@override

public e set(int index, e element)

@override

public

boolean

contains(object o)

}return

false;

}else

}return

false;

}}

雙鏈表相比單鏈表來說耗費了更多的空間去儲存前驅節點的位置,以此來獲得某些操作更好的時間效能。這種以少量空間換取更優的效能做法,在很多地方也都可以見到。

資料結構 線性表 雙鏈表

資料結構 線性表的鏈式表示 雙鏈表 線性表元素序號從1算起 date 2017 4 13 include include define initsize 100 define elemtype char typedef struct lnodelnode,linklist linklist crea...

資料結構專題 線性表之單鏈表

對比了好幾本書,比較少涉及單鏈表的賦值,為了親自跑出其他功能,花了不少時間,畢竟是打基礎嘛,相信以後會越來熟練 你為什麼那麼熟練,明明是我先 話不多說,下面是 及實驗結果。include include define elementtype int define maxsize 1000 defin...

資料結構專題 線性表之單鏈表及其Java實現

儘管我們在遇到頻繁訪問列表中元素時,arraylist是乙個很好的選擇 但當我們需要頻繁新增 刪除列表中元素,尤其是在表的前端進行增刪操作時,arraylist就不是乙個特別好的選擇了。為了解決新增 刪除元素時需要大量其它元素移動的問題,我們今天一起來接觸在記憶體中鏈式儲存的線性表 也稱為鍊錶 鏈式...