雙向鍊錶又稱為雙鏈表,使用雙向鍊錶的目的是為了解決在鍊錶中訪問直接前驅和後繼的問題。其設定前驅後繼指標的目的,就是為了節省其時間開銷,也就是用空間換時間。
在雙向鍊錶的每個節點中應有兩個鏈結指標作為它的資料成員:pred指向其前驅節點,next指向其後繼節點。再加上資料域,因此每個雙向鍊錶至少包括三個域。
實現**如下
#includeusing namespace std;/* * 雙向迴圈煉表頭檔案,
* 其宣告中封裝有指向鍊錶附加頭節點的頭x指標first
*/templatestruct dbnode
dbnode(dbnode*a = null, dbnode*b = null):pred(a), next(b){}
};templateclass dblist
void makeempty();
int length()const;
bool isempty()
dbnode*gethead()const
dbnode*locate(int i, int d);
dbnode*search(const t& x);
bool insert(int i, const t& x, int d);
bool remove(int i, t& x, int d);
void print(int d);
};templateint dblist::length()const
return i;
}templatebool dblist::remove(int i, t& x, int d)
templatedbnode* dblist::search(const t& x)
while(tmp!=this->first);
return null;
}template//定位元素,d=0時從頭節點向前(pred)查第i個元素,d!=0時,從頭節點向後(next)找第i個元素
dbnode* dblist::locate(int i, int d)
if(tmp->next==this->first&&t!=i)
return null;
else
return tmp;
} else //向前找
if(tmp->pred==this->first&&t!=i)
return null;
else
return tmp; }}
templatebool dblist::insert(int i, const t& x, int d)
else //p節點前插入
return true;
}templatevoid dblist::makeempty()
}templatevoid dblist::print(int d)
coutover."first;
cout<
while(tmp->pred != this->first)
coutover."<:dblist value>
#include"header.h"完成效果int main()
dl.print(1);
int l = 999, k = 0;
dl.insert(0, l, 0);
//int k = 0;
dl.print(1);
dl.remove(0, k, 0);
dl.print(1);
k = 5;
dl.search(k);
dl.print(0);
return 0;
}
雙向迴圈鍊錶模板
include include include include iostream using namespace std define maxnum 0x7fffffff define maxscore 100000 typedef struct lnode lnode,linklist 2 測鍊錶...
C 實現的雙向迴圈鍊錶類
部落格第一天 雙向鍊錶類 ccircularnode.h class ccircularnode ccircularnode ccircularnode getnextnode ccircularnode getlastnode static void initialize ccircularnod...
雙向迴圈鍊錶類C 實現。2020 11 1
記錄乙個小白的轉型之路,一轉眼又是新的一天過去了,博主今天想快速結束資料結構與演算法的線性表這一章,主要是想用c 把他們乙個個的實現起來,所以想直接將迴圈鍊錶和雙向鍊錶一起結合起來實現c 中的list容器的基本實現,emmm,這對於乙個小白還是挺煩的,倒不是說難,演算法到時很簡單,不過到了去實現的時...