線性結構 雙向鍊錶

2022-07-03 01:21:11 字數 3034 閱讀 5558

雙向鍊錶

1. 單向鍊錶的特點

1. 只能從頭遍歷到尾,或者從尾遍歷到頭(一般是從頭到尾),即鍊錶數單向的

2. 單向鍊錶存在的問題

2. 而實際中,我們需要從某個節點嗲它的上乙個節點。

如文字編輯中,通過前後箭頭可以使得游標前後移動

3. 雙向鍊錶的特點

1. 既可以從頭遍歷到尾,也可以從尾遍歷到頭

4. 雙向鍊錶的缺點

1. 占用記憶體空間更大,因為每個節點儲存的資料變多了

2. 操作變得複雜,如每次在刪除,新增節點時,需要改變四個引用的位置,而單向鍊錶只需要改動兩個

5. 雙向鍊錶的結構

1. 鍊錶包含乙個header指向頭部,包含乙個tail指向尾部

2. 每個節點由三部分組成:

指向前乙個節點的指標(prev)  --> 預設指向null

儲存本節點資料的變數(item)

指向後乙個節點的指標(next)  --> 預設指向null

6. 雙向鍊錶的方法

2. insertitem(position, element)    向鍊錶中的指定位置插入元素

3. getitem(position)                獲取對應位置的元素

4. indexof(element)                 返回元素在列表中的索引,若沒有則返回-1

5. update(position, element)        修改指定位置的值

6. removeat(position)               從列表中移出指定位置的元素

7. remove(element)                  從列表中移出指定值的元素

8. isempty()                        判斷鍊錶是否為空

9. size()                           返回鍊錶的長度

10. forwardtostring()               正向遍歷鍊錶,以字串的形式返回鍊錶元素

11. backwardtostring()              反向遍歷鍊錶,以字串的形式返回鍊錶元素

7. 雙向鍊錶的**實現

function

doublelist()

//雙向鍊錶中的屬性

this.header = null

;

this.tail = null

this.length = 0;

//雙向鍊錶中的方法

//1. 向鍊錶尾部新增乙個新的項

(element)

else

//此時已經查詢到尾部

cur.next =newnode;

newnode.prev =cur;

}//鍊錶尾部指向最後乙個節點

this.tail =newnode;

this.length++;

}//2. 向鍊錶中的指定位置插入元素

doublelist.prototype.insertitem = function

(position, element)

else

if(position == 0)

else

else

}this.tail =newnode;

this.length++;}}

//3. 獲取對應位置的元素

doublelist.prototype.getitem = function

(position)

else

return

cur.item;}}

//4. 返回元素在列表中的索引,若沒有則返回-1

doublelist.prototype.indexof = function

(item)

cur =cur.next

}return

index;

}//5. 修改指定位置的值

doublelist.prototype.updata = function

(position, element)

else

cur.item =element;}}

//6. 從列表中移除指定位置的元素

doublelist.prototype.removeat = function

(position)

else

cur.next =cur.next.next;

cur.next.next.prev =cur;

this.length--;

if(position == this.length -1)}}

//7. 從列表中移出指定值的元素,返回值為刪除元素的個數

doublelist.prototype.remove = function

(element)

cur =cur.next;

}this.length = this.length -count;

if(k == this.length - 1)

return

count;

}//8. 判斷鍊錶是否為空

doublelist.prototype.isempty = function

()

//9. 返回鍊錶的長度

doublelist.prototype.size = function

()

//10. 正向遍歷鍊錶,以字串的形式返回鍊錶元素

doublelist.prototype.forwardtostring = function

()

return

res }

//11. 反向遍歷鍊錶,以字串的形式返回鍊錶元素

doublelist.prototype.backwardtostring = function

()

return

res }

}

view code

資料結構 線性結構 雙向鍊錶

雙向鍊錶 就是在單向鍊錶的基礎上加了乙個pre 指向該節點的前乙個節點 域,其他的沒有改變,在對鍊錶進行增刪相關操作時在單向鍊錶的基礎上多以乙個向前節點連線的動作即可。因為有了指向前乙個節點域,所以雙向在查詢資料上比單向的速度要快。1 2 雙向鍊錶3 4class doublelinkedlist ...

線性表 雙向鍊錶

雙向鍊錶是一種特殊的鍊錶。單鏈表和雙向鍊錶的區別 單鏈表 只能向乙個方向遍歷 雙向鍊錶 向兩邊都可以遍歷。雙向鍊錶的實現 為了找到節點和前驅,我們給節點增加乙個指向其前驅的指標,如下圖所示 既然單鏈表可以迴圈,那麼雙向鍊錶也就可以迴圈,如下圖所示即為雙向迴圈鍊錶 建立雙向鍊錶和建立單鏈表大同小異,雙...

線性表的鏈式儲存結構 迴圈鍊錶 雙向鍊錶

一 迴圈鍊錶 1 尾指標的後繼就是頭節點,每乙個指標都含有前驅指標和後繼指標。2 查詢終端節點和尾節點的時間複雜度是o 1 3 易錯點 1 帶頭節點的雙鏈表l為空表是應滿足 l next null 2 帶有頭節點的迴圈單鏈表l,成為空表時有表頭節點的指標域next和l的值相等 3 長度為n的迴圈單鏈...