双向链表C++ 的实现

本文是通过C++ 的知识实现数据结构中的双向链表,这里不多说 了,代码注释很清楚,
实现代码:
//double LinkList implement with C++ template
#include<iostream>
using namespace std;
/*template<typename Type>
class DBListADT
{
public:
virtual void Append(const Type &)=0;
virtual void Insert(const Type &)=0;
virtual void Remove(const Type &)=0;
};
template<typename T>
class DLinkListNode:public DBListADT<typename T>//此处必须为实现的类型,当然以派生类的模板类型也可以,但是不能是Type
{
public:
void Append(const T &);//这边也需要是当前类的类型,不能为Type
void Insert(const T &);
void Remove(const T &);
};*/
template<typename T>class DLinkList;
template<typename Type>
class DNode
{
friend class DLinkList<Type>;//指定前需声明
public:
DNode(){next=NULL;prior=NULL;}
~DNode(){}
private:
DNode *next;
DNode *prior;
Type data;
};
template<typename T>
class DLinkList
{
public:
DLinkList()
{
// head=new DNode<T>[sizeof(DNode<T>)];
head=new DNode<T>;
}
~DLinkList()
{
if(head->next==NULL)
delete head;
else
{
DNode<T> *p=head->next;
DNode<T>*s=NULL;
while(p)
{
s=p->next ;
delete p;
p=s;
}
}
}
void DeleteElement(size_t position)
{
DNode<T> *p=head->next;
size_t index=1;
for(;index<position;index++)
p=p->next ;
if(p==NULL)
return ;
p->prior ->next =p->next ;
p->next ->prior =p->prior ;
delete p;
}
void InsertElement(T data,size_t position);
void CreateDLinkList(T a[],int n);
void PrintDLinkList();
private:
DNode<T> *head;
};
template<typename T> void DLinkList<T>:: InsertElement (T data,size_t position)
{
DNode<T> *p=head->next;
size_t index=1;
for(;index<position;index++)
p=p->next;
if(p==NULL)
return;
//DNode<T> *s=new DNode<T>[sizeof(DNode<T>)];
DNode<T> *s=new DNode<T>;
s->data=data;
s->next=p;
s->prior=p->prior;
p->prior->next=s;
p->prior=s;
}
template<typename T> void DLinkList<T>::CreateDLinkList(T a[],int n)
{
DNode<T>*p=head;
DNode<T>*s=NULL;
int i=0;
for(;i<n;i++)
{
// s=new DNode<T>[sizeof(DNode)];
s=new DNode<T>;
s->data=a[i];
p->next=s;
s->prior=p;
p=s;
}
s->next=NULL;
}
template<typename T>void DLinkList<T>::PrintDLinkList ()
{
DNode<T> *p=head->next;
while(p)
{
cout<<p->data<<endl;
p=p->next;
}
}
int main()
{
int a[10]={1,2,3,4,5,6,7,8,9,10};
DLinkList<int>Dlist;
Dlist.CreateDLinkList(a,10);
Dlist.DeleteElement (3);
Dlist.InsertElement(3,3);
Dlist.PrintDLinkList();
return 0;
}
//double LinkList implement with C++ Class
//************************************************************
/*#include<iostream>
using namespace std;
class Node
{
friend class List;
public:
//Node(int a):next(NULL),prior(NULL),data(a){}
Node(){}
private:
Node *next;
Node *prior;
int data;
};
class List
{
public:
List()
{
cout<<"create head DBLinkList"<<endl;
head=new Node[sizeof(Node)];
};
~List()
{
if(head->next==NULL)
{
delete head;
}
else
{
Node *p=head->next;
Node *s;
delete head;
while(p)
{
s=p->next ;
delete p;
p=s;
}
}
cout<<"destructor called to clear DBLinkList"<<endl;
}
void CreateDoubleLink(int a[],int n);
void DeleteElemData(int position);
void InsertElement(int data,int position);
void PrintDList();
private:
Node *head;
};
void List::CreateDoubleLink (int a[],int n)
{
head->next =NULL;
Node *s,*p=head;
int i=0;
for(;i<n;i++)
{
s=new Node[sizeof(Node)];
s->data =a[i];
p->next =s;
s->prior =p;
p=s;
}
s->next =NULL;
}
void List::PrintDList()
{
Node *p=head->next ;
while(p)
{
cout<<p->data <<endl;
p=p->next ;
}
}
void List::DeleteElemData(int position)
{//可以通过重载delete运算符来达到这个效果,则直接用delete就OK了
Node *p=head->next ;
//while(p!=NULL&&p->data !=data)
// p=p->next ;
int i=1;
for(;i<position;i++)
p=p->next ;
if(p==NULL)
return ;
p->prior ->next =p->next ;
p->next ->prior =p->prior ;
delete p;
}
void List::InsertElement (int data,int position)
{//可以重载new运算符来达到这个效果,则直接用new就OK了
Node *p=head->next ;
int i=1;
for(;i<position;i++)
p=p->next ;
Node *s=new Node[sizeof(Node)];
s->data =data;
s->prior =p->prior ;
s->next =p;
p->prior ->next =s;
p->prior =s;
}
int main()
{
List Dlist;
int a[10]={1,2,3,4,5,6,7,8,9,10};
Dlist.CreateDoubleLink (a,10);
Dlist.DeleteElemData(3);
Dlist.InsertElement (3,3);
Dlist.PrintDList ();
return 0;
}*/
//*************************************************************************************
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
# C++
# 实现双向链表
# 数据结构双向链表
# C++数据结构之双向链表
# C++代码实现双向链表
# C++实现双向链表代码分析
# C++双向链表实现简单通讯录
# C++实现双向链表(List)
# C++实现双向链表
# 关于双向链表的增删改查和排序的C++实现
# C++双向链表的增删查改操作方法讲解
# 运算符
# 链表
# 数据结构
# 可以通过
# 希望能
# 很清楚
# 谢谢大家
# 能为
# 多说
# 也需
# 派生类
# Type
# DBListADT
# public
# typename
# namespace
# gt
# std
# amp
# Insert
相关文章:
三星网站视频制作教程下载,三星w23网页如何全屏?
娃派WAP自助建站:免费模板+移动优化,快速打造专业网站
如何通过FTP空间快速搭建安全高效网站?
如何快速建站并高效导出源代码?
如何通过万网虚拟主机快速搭建网站?
如何制作新型网站程序文件,新型止水鱼鳞网要拆除吗?
上海制作企业网站有哪些,上海有哪些网站可以让企业免费发布招聘信息?
广州网站建站公司选择指南:建站流程与SEO优化关键词解析
ppt在线制作免费网站推荐,有什么下载免费的ppt模板网站?
独立制作一个网站多少钱,建立网站需要花多少钱?
企业微网站怎么做,公司网站和公众号有什么区别?
mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?
企业宣传片制作网站有哪些,传媒公司怎么找企业宣传片项目?
武汉网站制作费用多少,在武汉武昌,建面100平方左右的房子,想装暖气片,费用大概是多少啊?
相亲简历制作网站推荐大全,新相亲大会主持人小萍萍资料?
广州网站制作的公司,现在专门做网站的公司有没有哪几家是比较好的,性价比高,模板也多的?
实现虚拟支付需哪些建站技术支撑?
建站之星在线客服如何快速接入解答?
如何快速完成中国万网建站详细流程?
如何在Mac上搭建Golang开发环境_使用Homebrew安装和管理Go版本
建站之星手机一键生成:多端自适应+小程序开发快速建站指南
建站主机SSH密钥生成步骤及常见问题解答?
儿童网站界面设计图片,中国少年儿童教育网站-怎么去注册?
湖州网站制作公司有哪些,浙江中蓝新能源公司官网?
装修招标网站设计制作流程,装修招标流程?
建站org新手必看:2024最新搭建流程与模板选择技巧
专业网站制作企业网站,如何制作一个企业网站,建设网站的基本步骤有哪些?
建站之星CMS建站配置指南:模板选择与SEO优化技巧
微网站制作教程,我微信里的网站怎么才能复制到浏览器里?
深圳 网站制作,深圳招聘网站哪个比较好一点啊?
专业制作网站的公司哪家好,建立一个公司网站的费用.有哪些部分,分别要多少钱?
建站主机选哪家性价比最高?
建站之星如何修改网站生成路径?
网站制作软件免费下载安装,有哪些免费下载的软件网站?
C++中的Pimpl idiom是什么,有什么好处?(隐藏实现)
西安大型网站制作公司,西安招聘网站最好的是哪个?
高防网站服务器:DDoS防御与BGP线路的AI智能防护方案
成都网站制作价格表,现在成都广电的单独网络宽带有多少的,资费是什么情况呢?
移动端手机网站制作软件,掌上时代,移动端网站的谷歌SEO该如何做?
外贸公司网站制作哪家好,maersk船公司官网?
简单实现Android文件上传
香港代理服务器配置指南:高匿IP选择、跨境加速与SEO优化技巧
如何快速上传建站程序避免常见错误?
如何处理“XML格式不正确”错误 常见XML well-formed问题解决方法
潍坊网站制作公司有哪些,潍坊哪家招聘网站好?
北京营销型网站制作公司,可以用python做一个营销推广网站吗?
制作营销网站公司,淘特是干什么用的?
如何在Windows虚拟主机上快速搭建网站?
小米网站链接制作教程,请问miui新增网页链接调用服务有什么用啊?
云南网站制作公司有哪些,云南最好的招聘网站是哪个?
*请认真填写需求信息,我们会在24小时内与您取得联系。