第三章 線性表 鏈式儲存結構(雙向鍊錶)

2022-08-31 22:00:18 字數 2628 閱讀 3674

雙向鍊錶(double linked list)是在單鏈表的每個結點中,再設定乙個指向其前驅結點的指標域。結點都有兩個指標域,乙個指向直接後繼,另乙個指向直接前驅。

例項:

鍊錶——雙向鍊錶

現在分析新增的情況

已經有1號英雄和5號英雄,現在要新增3號英雄

此時cur指向了1號英雄,hero指向3號英雄

cur指向1號英雄,發現cur的下乙個是5號英雄,大於要新增的3號英雄

分析圖

過程(1)讓3號英雄指向5號英雄,即把這個①號線搭起來

$hero->next=$cur->next; 

//$cur指向1號英雄,$cur->next指向5號英雄

(2)然後再搭pre這根線,讓3號英雄的pre指向1號英雄,即把這個②號線搭起來

$hero->per=$cur;

(3)然後讓5號英雄的pre指向3號英雄,即把這個③號線搭起來

$cur->next->pre=$hero;

//$cur->next指向5號英雄,$cur->next->pre為5號英雄指向1號英雄,即圖中⑥號線

//此時⑥號線就斷掉了,原來的5號英雄的pre是指向1號英雄的,現在指向了3號英雄

(4)讓1號英雄指向3號英雄,即把這個④號線搭起來

$cur->next=$hero;

//此時⑤號線就斷掉了,原來的$cur->next是指向5號英雄的,現在指向了3號英雄

改進:不嚴密的地方,可以和前面的進行合併的

新增英雄,把新增時是空鍊錶和不是空鍊錶的情況,合併到一起了

現在考慮:要新增的人就在末尾

有乙個head和1號人物,要新增的是6號人物

此時cur指向1號人物,

當按照原先的**執行,既下面這段**,會有一些小問題的

$hero->next=$cur->next;

$hero->pre=$cur;

$cur->next->pre=$hero;

$cur->next=$hero;

執行(1)$hero->next=$cur->next; 

此時cur指向1號人物,1號人物此時是最後的乙個節點,$cur->next就是空了,那麼$hero->next=$cur->next; 此時這句話就沒有意義了,因為$hero->next本身就是空啊,你再賦給它空,沒有意義,乾脆這句話此時就不執行了。所以要加乙個乙個判斷條件,即$cur->next不等於空,執行$hero->next=$cur->next; 才有價值

if($cur->next!=null)

(2)$hero->pre=$cur; 

這句話還是很有價值的,如下圖所示,把①號線搭起來了

(3)$cur->next->pre=$hero;

此時cur指向1號人物,$cur->next就是空了,空的pre就沒意義了,所有也要和上面的(1)一樣,加判斷

if($cur->next!=null)

(4)$cur->next=$hero;

這句是有意義的,如下圖所示,把②號線搭起來了

如果前面的**修改成了如下的**:

if($cur->next!=null)

$hero->pre=$cur;

if($cur->next!=null)

$cur->next=$hero;

就和前面的乙個if判斷語句不謀而合了

即在doublelink.php中的這段**

if($cur->next==null)else

$cur->pre->next=$cur->next;

這樣執行的話,把上圖中的藍線就去掉了,這樣6號英雄就訪問不到了,6號英雄出列了,因為我們是從表頭開始找的,$cur-next就訪問不到6號英雄節點了,6號英雄指向別人是沒有用的,★關鍵★是沒有人指向它。

第三章 線性表 鏈式儲存結構(靜態鍊錶)

用陣列描述的鍊錶叫做靜態鍊錶 也叫游標實現法 陣列的元素由兩個資料域組成,data和cur,也就是說,陣列的每個下標都對應乙個data和乙個cur,資料域data,用來存放資料元素,游標cur相當於單鏈表中的next指標,存放該元素的後繼在陣列中的下標 我們對陣列的第乙個和最後乙個元素作為特殊元素處...

第三章 線性表 鏈式儲存結構(單鏈表)

線性表的鏈式儲存結構 是用一組任意的儲存單元儲存線性表的資料元素,這組儲存單元可以是連續的,也可以是不連續的。這些資料元素可以存在記憶體未被占用的任意位置。為了表示每個資料元素ai與其直接後繼資料元素ai 1之間的邏輯關係,對資料元素ai來說,除了儲存其本身的資訊之外,還需儲存乙個指示其後繼的資訊 ...

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

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