雙向鍊錶(雙鏈表)是鍊錶的一種。和單鏈表一樣,雙鏈表也是由節點組成,它的每個資料結點中都有兩個指標,分別指向直接後繼和直接前驅。所以,從雙向鍊錶中的任意乙個結點開始,都可以很方便地訪問它的前驅結點和後繼結點。一般我們都構造雙向迴圈鍊錶。
表頭為空,表頭的後繼節點為"節點10"(資料為10的節點);「節點10"的後繼節點是"節點20」(資料為10的節點),「節點20"的前繼節點是"節點10」;「節點20"的後繼節點是"節點30」,「節點30"的前繼節點是"節點20」;…;末尾節點的後繼節點是表頭。
刪除"節點30"
刪除之前:「節點20"的後繼節點為"節點30」,「節點30」 的前繼節點為"節點20"。「節點30"的後繼節點為"節點40」,「節點40」 的前繼節點為"節點30"。
刪除之後:「節點20"的後繼節點為"節點40」,「節點40」 的前繼節點為"節點20"。
在"節點10"與"節點20"之間新增"節點15"
新增之前:「節點10"的後繼節點為"節點20」,「節點20」 的前繼節點為"節點10"。
新增之後:「節點10"的後繼節點為"節點15」,「節點15」 的前繼節點為"節點10"。「節點15"的後繼節點為"節點20」,「節點20」 的前繼節點為"節點15"。
public class doublelink }
//constructor
public doublelink()
//return size
public int size()
//return true if linkedlist is empty
public boolean isempty()
//return index of specific node
private dnodegetnode(int index)
if(index <= mcount/2)
dnodeinode = getnode(index);
dnodetnode = new dnode(t, inode.prev, inode);
inode.prev.next=tnode;
inode.next=tnode;
mcount++;
return;
} //insert node at index 0
public void insertfirst(t t)
//insert node at last node
dnodenode = new dnode(t, mhead.prev, mhead);
mhead.prev.next = node;
mhead.prev = node;
mcount++;
} //delete index node
public void del(int index)
//delete head
public void deletefirst()
//delete last node
public void deletelast()
資料結構學習(三) 雙向鍊錶
class heronode2 override public string tostring public void add heronode2 heronode temp temp.next 退出while時候,temp就指向了鍊錶的最後,指向新的node temp.next heronode ...
資料結構四雙向鍊錶
雙向鍊錶也叫雙鏈表,是鍊錶的一種,它的每個資料結點中都有兩個指標,分別指向直接後繼和直接前驅。所以,從雙向鍊錶中的任意乙個結點開始,都可以很方便地訪問它的前驅結點和後繼結點。而之前的單鏈表為單向鍊錶,雙向鍊錶也就是在單鏈表的結點中增加乙個指向其前驅的pre指標。如圖 這裡介紹雙向鍊錶的常用操作 l ...
資料結構 003雙向鍊錶
雙鏈表 include using namespace std typedef int elemtype typedef struct lnode lnode,linklist 初始化 linklist init linklist 頭插法建立鍊錶 linklist head insert linkl...