c++实现双向链表 :

 #ifndef DOUBLE_LINK_HXX
#define DOUBLE_LINK_HXX #include <iostream>
using namespace std; template<class T>
struct DNode
{
public:
T value;
DNode *prev;
DNode *next;
public:
DNode() { }
DNode(T t, DNode *prev, DNode *next) {
this->value = t;
this->prev = prev;
this->next = next;
}
}; template<class T>
class DoubleLink
{
public:
DoubleLink();
~DoubleLink(); int size();
int is_empty(); T get(int index);
T get_first();
T get_last(); int insert(int index, T t);
int insert_first(T t);
int append_last(T t); int del(int index);
int delete_first();
int delete_last(); private:
int count;
DNode<T> *phead;
private:
DNode<T> *get_node(int index);
}; template<class T>
DoubleLink<T>::DoubleLink() : count()
{
// 创建“表头”。注意:表头没有存储数据!
phead = new DNode<T>();
phead->prev = phead->next = phead;
// 设置链表计数为0
//count = 0;
} // 析构函数
template<class T>
DoubleLink<T>::~DoubleLink()
{
// 删除所有的节点
DNode<T>* ptmp;
DNode<T>* pnode = phead->next;
while (pnode != phead)
{
ptmp = pnode;
pnode=pnode->next;
delete ptmp;
} // 删除"表头"
delete phead;
phead = NULL;
} // 返回节点数目
template<class T>
int DoubleLink<T>::size()
{
return count;
} // 返回链表是否为空
template<class T>
int DoubleLink<T>::is_empty()
{
return count==;
} // 获取第index位置的节点
template<class T>
DNode<T>* DoubleLink<T>::get_node(int index)
{
// 判断参数有效性
if (index< || index>=count)
{
cout << "get node failed! the index in out of bound!" << endl;
return NULL;
} // 正向查找
if (index <= count/)
{
int i=;
DNode<T>* pindex = phead->next;
while (i++ < index) {
pindex = pindex->next;
} return pindex;
} // 反向查找
int j=;
int rindex = count - index -;
DNode<T>* prindex = phead->prev;
while (j++ < rindex) {
prindex = prindex->prev;
} return prindex;
} // 获取第index位置的节点的值
template<class T>
T DoubleLink<T>::get(int index)
{
return get_node(index)->value;
} // 获取第1个节点的值
template<class T>
T DoubleLink<T>::get_first()
{
return get_node()->value;
} // 获取最后一个节点的值
template<class T>
T DoubleLink<T>::get_last()
{
return get_node(count-)->value;
} // 将节点插入到第index位置之前
template<class T>
int DoubleLink<T>::insert(int index, T t)
{
if (index == )
return insert_first(t); DNode<T>* pindex = get_node(index);
DNode<T>* pnode = new DNode<T>(t, pindex->prev, pindex);
pindex->prev->next = pnode;
pindex->prev = pnode;
count++; return ;
} // 将节点插入第一个节点处。
template<class T>
int DoubleLink<T>::insert_first(T t)
{
DNode<T>* pnode = new DNode<T>(t, phead, phead->next);
phead->next->prev = pnode;
phead->next = pnode;
count++; return ;
} // 将节点追加到链表的末尾
template<class T>
int DoubleLink<T>::append_last(T t)
{
DNode<T>* pnode = new DNode<T>(t, phead->prev, phead);
phead->prev->next = pnode;
phead->prev = pnode;
count++; return ;
} // 删除index位置的节点
template<class T>
int DoubleLink<T>::del(int index)
{
DNode<T>* pindex = get_node(index);
pindex->next->prev = pindex->prev;
pindex->prev->next = pindex->next;
delete pindex;
count--; return ;
} // 删除第一个节点
template<class T>
int DoubleLink<T>::delete_first()
{
return del();
} // 删除最后一个节点
template<class T>
int DoubleLink<T>::delete_last()
{
return del(count-);
} #endif

本文来自http://www.cnblogs.com/skywang12345/p/3561803.html

最新文章

  1. Python基础-三次用户验证登录购买商品程序
  2. 自己实现atoi的功能
  3. myeclipse 2016 激活,myeclipse 2016 激活
  4. 测试WWW方案(反向代理,负载均衡,HTTP加速缓存)
  5. BZOJ 3359: [Usaco2004 Jan]矩形( dp )
  6. java 图形界面 Socket编程
  7. linux命令学习-3-sysctl
  8. Android APP 内部捐赠实现(支付宝&amp;微信)
  9. XBMC源代码简析 5:视频播放器(dvdplayer)-解复用器(以ffmpeg为例)
  10. 180815 Python自学成才001
  11. [物理学与PDEs]第5章第2节 变形的描述, 应变张量 2.1 变形梯度张量
  12. SSIS Hekaton In-Memory OLTP 【翻译一篇外国文章】
  13. Asp.net(C#)年月日时分秒毫秒
  14. 【技巧】easyUI datagrid在隐藏时加载,显示时无法加载出界面
  15. 解决win系统无法安装.NET Framework 4.0 4.6 原因是HRESULT0xc8000222
  16. 【转】AlphaGO Zero 原理
  17. html5 canvas 径向渐变2
  18. Ajax 中正常使用jquery-easyui (转)
  19. 重新设置Linux文件共享密码..
  20. 有了malloc/free 为什么还要new/delete ?

热门文章

  1. cout&lt;&lt;endl 本质探索
  2. c++日志练习
  3. DB2 like两个表的字段或like一个变量
  4. Perl的调试模式熟悉和应用
  5. Metro Revealed: Building Windows 8 apps with XAML and C# 阅读笔记
  6. freeRadius与NetGear WNAP210的简使用
  7. python 求第k个最大数
  8. AE IRasterCursor 获取栅格图层像素值
  9. SceneControl+AE+鼠标滚轮缩放
  10. ZOJ2478 Encoding 2017-04-18 23:02 43人阅读 评论(0) 收藏