#includeusing namespace std;
templatestruct dnode
// 預設構造
dnode(t t, dnode *prev, dnode *next)
};// 雙向鍊錶基礎操作
templateclass doublelink
;// doublelink 建構函式
templatedoublelink::doublelink() : count(0)
// doublelink 析構函式
templatedoublelink::~doublelink()
// 刪除表頭
delete phead;
phead = null;
}// 返回結點數目
templateint doublelink::size()
// 返回鍊錶是否為空
templateint doublelink::is_empty()
// 獲取第 index 位置的結點
templatednode* doublelink::get_node(int index)
// 正向查詢
if (index <= count / 2)
return pindex;
}// 反向查詢
int j = 0;
int rindex = count - index - 1;
dnode* prindex = phead->prev;
while (j++ < rindex)
return prindex;
}// 獲取第index位置的結點的值
templatet doublelink::get(int index)
// 獲取第1個結點的值
templatet doublelink::get_first()
// 獲取最後乙個結點的值
templatet doublelink::get_last()
// 將結點插入到第index位置之前
templateint doublelink::insert(int index, t t)
// 將結點插入第乙個結點處
templateint doublelink::insert_first(t t)
// 將結點追加到鍊錶的末尾
// 刪除index位置的結點
templateint doublelink::del(int index)
// 刪除第乙個結點
templateint doublelink::delete_first()
// 刪除最後乙個結點
templateint doublelink::delete_last()
// 雙向鍊錶操作int資料
/*void int_test()}*/
class person
person(string name, int age)
};// 自定義資料型別
void person_test()
}int main()
C 雙向鍊錶
部落格介紹了c語言,以及c 的單向鍊錶。那麼我們今天介紹的雙向鍊錶,顧名思義,就是資料本身具備了左邊和右邊的雙向指標。雙向煉表相比較單向鍊錶,主要有下面幾個特點 1 在資料結構中具有雙向指標 2 插入資料的時候需要考慮前後的方向的操作 3 同樣,刪除資料的是有也需要考慮前後方向的操作 那麼,乙個非迴...
C 雙向鍊錶
includeusing namespace std typedef int datatype class linknode friend class slist private datatype data linknode prev linknode next class slist void p...
C 雙向鍊錶
考慮順序表中總是可以很方便地找到表元素的前驅和後繼,但單鏈表只能找後繼。如要找前驅,必須從表頭開始搜尋。為了克服這一缺點,可採用雙向鍊錶 double linked list 雙向鍊錶經常採用帶頭結點的迴圈鍊錶方式,如下圖所示。檢視動畫演示 圖7.10 帶表頭結點的雙向迴圈鍊錶 假設 指標p指向雙向...