《資料結構 線性表》鏈式儲存 雙向鍊錶

2022-05-02 08:54:11 字數 1782 閱讀 6585

一:雙向鍊錶定義

- 在單鏈表的每個節點中,在設定乙個指向前驅節點的指標域

- 所以在雙向鍊錶結點都有兩個指標域,乙個指向前驅位置,乙個指向後驅位置。

二:雙鏈和單鏈的區別

- 相同

- 由於雙向鍊錶是從單向鍊錶衍生出來的,所以在 計算鍊錶長度/查詢元素位置/查詢元素中,都只需要涉及乙個方向的指標就可以,在這方面,他們是相同的。

- 不同

- 由於多了乙個指標域,所以在 摻入/刪除 時候,都要修改兩個指標變數。

三:雙向鍊錶

<?php/**

* 線性表,雙向鍊錶

* 特點:

* 1:所以在雙向鍊錶結點都有兩個指標域,乙個指向前驅位置,乙個指向後驅位置。

* 2:雙向鍊錶也叫雙面鍊錶。

* 乙個指向前乙個結點,當此節點為第乙個節點時,指向空值;

* 乙個指向下乙個節點,當此節點為最後乙個節點時,指向空值。 */

class

doublelinklist

public

function initlink()

/*** 檢查鍊錶是否為空

* 檢查頭結點的後驅是否為空就可以

*/public

function isempty()

return

true;

}/**

* 獲取鍊錶長度

* 和單鏈表相同

*/public

function getlength()

return

$count;

}/**

* 指定位置新增元素

* 和單鏈表相比,需要更換下不但要更換後驅指標,前驅指標也需要更換

*/public

function insert($i, $data)

if(!$node)

$newnode = new

node();

$newnode->setdata($data); //

設定新結點值

$newnode->setnext($node->getnext()); //

設定新節點後驅

$newnode->setbefore($node); //

設定新節點前驅

$node->setnext($newnode); //

設定下乙個結點

return

true

; }}/*

* * 節點實現 */

class

node

public

function getnext()

public

function getbefore()

public

function setdata($data)

public

function setnext($next)

public

function setbefore($befor)

}$list = new

doublelinklist();

$list->insert(1,2

);$list->insert(1,3

);$list->insert(1,4

);$list->insert(2,3

);print_r($list);

資料結構 線性表鏈式儲存結構 雙向鍊錶

巨集定義 define failed 0 define success 1 typedef struct dnode dlinknode 建立鍊錶 頭插法 dlinknode createdlinklistf int a,int n return l 尾插法 dlinknode createdlin...

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

雙向鍊錶結點結構 既然單鏈表可以有迴圈鍊錶,那麼雙向鍊錶當然也可以有。由於這是雙向鍊錶,那麼對於鍊錶中的某乙個結點p,它的後繼結點的前驅結點是它本身。實現 s next p s prior p prior p prior next s p prior s 關鍵在於交換的過程中不要出現矛盾,例如第四步...

資料結構 線性表鏈式儲存結構 單向鍊錶

首結點的插入和刪除操作與其他結點一致,無需特別處理 無論鍊錶是否為空都有乙個頭結點,統一了空表和非空表的處理,即判斷l next是否為空即可 typedef x linktype x是鍊錶的型別 例如單向鍊錶結構,雙向鍊錶結構等 重新定義乙個通用的型別 linktype 這樣就可以通過linktyp...