介绍
这篇文章主要为大家展示了c++如何实现双向循环链表,内容简而易懂,希望大家可以学习一下,学习完之后肯定会有收获的,下面让小编带大家一起来看看吧。
<强>一、概念强>
1。在双链表中的每个结点应有两个链接指针:
, lLink→指向前驱结点,(前驱指针或者左链指针)
rLink→指向后继结点(后驱指针或者右链指针)
2。双链表常采用带附加头结点的循环链表方式:
第一:头指针,不存放数据,或者存放特殊要求的数据。它的lLink指向双链表的尾结点(最后一个结点),
它的rLink指向双链表的首结点(第一个有效结点)。链表的首结点的左链指针lLink和尾结点的右链指针
rLink都指向附加头结点。
<强>二,实现程序强>
1. dbllist。h
的ifndef DblList_h #定义DblList_h # include & lt; iostream> 使用名称空间性病; 模板& lt;类T> struct DblNode{//链表结点定义 T数据; DblNode* lLink, * rLink;//链表前驱(左链)和后继(右链)指针 DblNode (DblNode *左=NULL, DblNode *正确的=NULL): lLink(左),rLink(右){}//构造函数 DblNode (T值,DblNode *左=NULL, DblNode *正确的=NULL):数据(值),lLink(左),rLink(右){}//构造函数 }; 模板& lt;类T> 类DblList{//双链表(双向循环链表) 公众: DblList ();//构造函数:建立附加头结点 ~ DblList ();//析构函数:释放所有存储 空白createDblList ();//创建双向链表 int长度()常量;//计算双链表的长度 bool isEmpty ();//判双链表空否 DblNode * getHead()常量;//取附加头结点 空白setHead (DblNode * ptr);//设置附加头结点地址 DblNode *搜索(const T x);//在链表中沿后继方向寻找等于给定值x的结点 DblNode d *定位(int, int);//在链表中定位第i个结点,d=0按前驱方向,否则按后继方向 bool插入(int i (const T x, int d);//在我第个结点后插入x, d=0按前驱方向,否则按后继方向 bool删除(int i T, x, int d);//删除第i个结点,x带回删除其值,d=0按前驱方向,否则按后继方向 无效的输出();//输出双链表中的数据 私人: DblNode *第一;//附加头结点 }; 模板& lt;类T> DblList (); 如果(NULL==第一){ cerr & lt; & lt;“动态分配内存空间失败!“& lt; & lt;endl; 退出(1); } 第一个→rLink=第一→lLink=第一;//指向自身 } 模板& lt;类T> DblList *当前=第一→rLink; 而(当前!=){ 当前→rLink→lLink=当前→lLink;//从lLink链中摘下 当前→lLink→rLink=当前→rLink;//从rLink链中摘下 删除当前;//释放空间 当前=第一→rLink; } 删除第一; 第一次=零; } 模板& lt;类T> 空白DblList *当前=第一; cout & lt; & lt;“请输入要输入的个数n:“; ,cin祝辞的在n; cout & lt; & lt;“请输入要输入的数:“& lt; & lt;endl; for (int i=0;我& lt;n;我+ +){ ,cin祝辞的在薇尔; DblNode * newNode=new DblNode (val); 如果(NULL==newNode) { cerr & lt; & lt;“动态分配内存空间失败!“& lt; & lt;endl; 退出(1); }//尾插入 首先,(当前→rLink !=) 当前=当前→rLink;//往后继方向移动 newNode→rLink=当前→rLink; 当前→rLink=newNode; newNode→rLink→lLink=newNode; newNode→lLink=当前; 当前=当前→rLink;//当前往后移 } } 模板& lt;类T> int DblList *当前=第一→rLink; int数=0; 而(当前!=){ 当前=当前→rLink; 数+ +; } 返回计数; } 模板& lt;类T> bool DblList DblNode * DblList 空白DblList * ptr) {//设置附加头结点地址 第一次=ptr; } 模板& lt;类T> DblNode * DblList c++如何实现双向循环链表