一:雙向鍊錶定義
- 在單鏈表的每個節點中,在設定乙個指向前驅節點的指標域
- 所以在雙向鍊錶結點都有兩個指標域,乙個指向前驅位置,乙個指向後驅位置。
二:雙鏈和單鏈的區別
- 相同
- 由於雙向鍊錶是從單向鍊錶衍生出來的,所以在 計算鍊錶長度/查詢元素位置/查詢元素中,都只需要涉及乙個方向的指標就可以,在這方面,他們是相同的。
- 不同
- 由於多了乙個指標域,所以在 摻入/刪除 時候,都要修改兩個指標變數。
三:雙向鍊錶
<?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...