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

发布时间 - 2026-01-11 02:19:27    点击率:

双向链表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 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 邀请函制作网站有哪些,有没有做年会邀请函的网站啊?在线制作,模板很多的那种?  Laravel如何处理和验证JSON类型的数据库字段  Laravel如何使用Passport实现OAuth2?(完整配置步骤)  Laravel控制器是什么_Laravel MVC架构中Controller的作用与实践  如何快速搭建虚拟主机网站?新手必看指南  如何在 Telegram Web View(iOS)中防止键盘遮挡底部输入框  标准网站视频模板制作软件,现在有哪个网站的视频编辑素材最齐全的,背景音乐、音效等?  Laravel如何实现API速率限制?(Rate Limiting教程)  个人摄影网站制作流程,摄影爱好者都去什么网站?  JavaScript如何实现类型判断_typeof和instanceof有什么区别  制作旅游网站html,怎样注册旅游网站?  如何快速搭建自助建站会员专属系统?  三星、SK海力士获美批准:可向中国出口芯片制造设备  QQ浏览器网页版登录入口 个人中心在线进入  Laravel如何自定义分页视图?(Pagination示例)  EditPlus中的正则表达式 实战(4)  如何在云主机上快速搭建多站点网站?  专业商城网站制作公司有哪些,pi商城官网是哪个?  Laravel Eloquent性能优化技巧_Laravel N+1查询问题解决  HTML透明颜色代码怎么让下拉菜单透明_下拉菜单透明背景指南【技巧】  MySQL查询结果复制到新表的方法(更新、插入)  php读取心率传感器数据怎么弄_php获取max30100的心率值【指南】  Win11任务栏卡死怎么办 Windows11任务栏无反应解决方法【教程】  Laravel怎么实现微信登录_Laravel Socialite第三方登录集成  Laravel怎么连接多个数据库_Laravel多数据库连接配置  如何快速打造个性化非模板自助建站?  如何将凡科建站内容保存为本地文件?  厦门模型网站设计制作公司,厦门航空飞机模型掉色怎么办?  Laravel如何升级到最新版本?(升级指南和步骤)  Win11怎么关闭透明效果_Windows11辅助功能视觉效果设置  Laravel如何与Docker(Sail)协同开发?(环境搭建教程)  Laravel如何记录自定义日志?(Log频道配置)  宙斯浏览器文件分类查看教程 快速筛选视频文档与图片方法  在Oracle关闭情况下如何修改spfile的参数  Laravel如何创建和注册中间件_Laravel中间件编写与应用流程  HTML 中动态设置元素 name 属性的正确语法详解  详解阿里云nginx服务器多站点的配置  Laravel的Blade指令怎么自定义_创建你自己的Laravel Blade Directives  千库网官网入口推荐 千库网设计创意平台入口  html5的keygen标签为什么废弃_替代方案说明【解答】  详解jQuery停止动画——stop()方法的使用  Laravel DB事务怎么使用_Laravel数据库事务回滚操作  简历没回改:利用AI润色让你的文字更专业  如何在 React 中条件性地遍历数组并渲染元素  如何挑选最适合建站的高性能VPS主机?  Laravel项目怎么部署到Linux_Laravel Nginx配置详解  如何在Windows服务器上快速搭建网站?  Laravel如何实现邮件验证激活账户_Laravel内置MustVerifyEmail接口配置【步骤】  香港服务器租用费用高吗?如何避免常见误区?  Laravel Fortify是什么,和Jetstream有什么关系