線性表 雙向迴圈鍊錶

2021-09-28 15:29:25 字數 2666 閱讀 8262

雙向鍊錶(double liked list):就是在單向鍊錶的每個結點中,新增乙個指向前驅結點的指標域。

class doublenode 

}

雙向鍊錶迴圈帶頭結點的空鍊錶,如圖:

非空的迴圈帶頭結點的雙向鍊錶,如圖

插入操作不複雜,不過順序很重要,不要寫反了。

假設儲存元素 e 的結點為 s,要實現將結點 s 插入 p 和 p->next 之間,需要幾個步驟?

s.prev = p;     /*將p賦值給s的前驅,即 步驟1*/

s.next = p->next; /*將p->next賦值給s的後驅,即 步驟2*/

p->next.prev = s; /*將s賦值給p->next的前驅,即 步驟3*/

p.next = s; /*將s賦值給p的後驅,即 步驟4*/

注意:由於第2步和第3步都用到了p->next。如果第4步先執行,這會使得p->next提前變成了s

順序是先搞定s的前驅和後驅,在搞定p->next的後驅,在搞定p的 後驅。

刪除就跟簡單了,若要刪除結點p,需要兩個步驟,如圖:

p->prior.next = p->next;    /*將p->next賦值給p->prior的後驅,即 步驟 1 */

p->next.prior = p->prior; /*將p->prior賦值給p->next的前驅,即 步驟 2 */

/**

* 雙向鍊錶(double linked list)可迴圈的

* 是在單鏈表的每個結點中,再設定乙個指向其前驅結點的指標域。

*/public class doublelinkedlist else

newnode.prev = l; //將前一元素賦值給新結點的元素的前驅

newnode.next = first; //將first賦值給新結點的後驅

l.next = newnode; //將新元素賦值為前一元素的後驅

first.prev = newnode; //first的前驅是新新增的結點

}last = newnode;

size ++;

return true;

}/**

* 在指定位置插入元素,

* @param data 待插入的元素

* @param index 要插入的位置

* @return

*/public boolean add(t data, int index)

rangecheck(index);

doublenode newnode = new doublenode(null, data, null);

if (index == 1) else

size++;

return true;

}/**

* 刪除指定位置的元素

* @param index

* @return

*/public t delete(int index) else if (index == size) else

size --;

return oldvalue;

}/**

* 返回指定位置的元素

* @param index

* @return

*/private doublenodenode(int index)

}else

}return result;

}public int getsize()

/*** 檢測index是否合法

* 是否不在0-鍊錶長度範圍內

* @param index

*/private void rangecheck(int index)

}@override

public string tostring()

temp = temp.next;

}str += "]";

return str;

}/**

* 結點類

*/class doublenode }}

總結:雙向鍊錶在結構上比單向鍊錶多乙個指標域,所以在插入和刪除操作上需要給外注意。每個結點都儲存了兩個指標域,使用空間來交換時間。

線性表(一) 鍊錶之雙向迴圈鍊錶

四 雙向迴圈鍊錶的實現 template class cycdullist cycdullist 獲取鍊錶大小 size t size 判斷鍊錶是否為空 bool empty 獲取頭節點 listnode get head 獲取任意位置節點 listnode get node const int i...

線性表 雙向鍊錶

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

線性表 迴圈鍊錶

迴圈鍊錶的定義 將單鏈表中最後乙個資料元素的next指標指向第乙個元素,即把鍊錶的兩頭連線,形成了乙個環狀鍊錶,稱為迴圈鍊錶 在迴圈鍊錶中可以定義乙個 當前 指標,稱為游標,通過游標來遍歷鍊錶中所有元素 迴圈鍊錶和動態鍊錶相比,唯一的不同就是迴圈鍊錶首尾相連,其他都完全一樣 可以用兩次列印迴圈鍊錶,...