下面就是我們雙向鍊錶的基本原理。
這裡我們插入**案例:標頭檔案doublelink.h
#ifndef double_link_hxx
#define double_link_hxx
#include using namespace std;
//乙個節點
templatestruct dnode
dnode(t t, dnode *prev, dnode *next)
};//雙向鍊錶基本操作
templateclass doublelink
;templatedoublelink::doublelink() : count(0)
// 析構函式
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()
#endif
dlinktest.cpp
#include #include "doublelink.h"
using namespace std;
// 雙向鍊錶操作int資料
void int_test()
;//定義乙個陣列
cout << "\n開始測試 int資料" << endl;
// 建立雙向鍊錶
doublelink* pdlink = new doublelink();
pdlink->insert(0, 20); // 將 20 插入到第乙個位置
pdlink->insert_first(30); // 將 30 插入到第乙個位置
// 雙向鍊錶是否為空
cout << "is_empty()=" << pdlink->is_empty()
for (int i=0; iget(i) <
雙向鍊錶(C實現)
list.h ifndef list h define list h typedef struct node node typedef struct list list initlist int insertnode list l,void data,int size int deletenode ...
雙向鍊錶(c 實現)
雙向鍊錶與單鏈表有許多的相似之處,但是也有不同之處。雙向鍊錶與單鏈表主要的不同在於 雙向鍊錶可以從兩個方向進行遍歷,但是單鏈表只能從頭節點遍歷到尾節點,不能從尾節點遍歷到頭節點,對於鍊錶中一些插入和刪除等操作,雙向鍊錶較單鏈表更為簡單些。所以,雙向鍊錶有其存在的特殊意義。下面是通過c 來實現雙向鍊錶...
雙向鍊錶 C 實現
雙向鍊錶在類中的實現 include include includeusing namespace std typedef int datatype struct node node pnext node ppre int data class list list const list l else...