雙向鍊錶(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指標指向第乙個元素,即把鍊錶的兩頭連線,形成了乙個環狀鍊錶,稱為迴圈鍊錶 在迴圈鍊錶中可以定義乙個 當前 指標,稱為游標,通過游標來遍歷鍊錶中所有元素 迴圈鍊錶和動態鍊錶相比,唯一的不同就是迴圈鍊錶首尾相連,其他都完全一樣 可以用兩次列印迴圈鍊錶,...