全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

C++ 实现双向链表的实例

双向链表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小时内与您取得联系。