循环链表 ╰+哭是因爲堅強的太久メ 2022-08-13 13:52 237阅读 0赞 循环链表和单链表没有本质上的差别。唯一不同的链表的最后不再是空的了,而是指向了first头指针。只有这样我们才会实现链表的循环功能,那么问题来了,我们在下面的函数功能中我们只是需要把里面用的头指针的重用名换到first->next中,而且其中的计数器count也从1开始计数,这样就避免了在while的循环中第一步实行不下去。废话不多说。详细看wo的代码吧。 \#ifndef CirLinkList\_H \#define CirLinkList\_H \#include<iostream> using namespace std; template<typename T> struct Node\{//结点 T data; Node<T> \* next; \}; template<typename T> class CirLinkList \{//无头结点的循环单链表 template<typename T> friend ostream & operator<<(ostream &,CirLinkList<T> &); public: CirLinkList(); //创建空循环单链表(即:first指向空指针)。 CirLinkList(T a\[\],int n); //建立含n个元素的循环单链表。 ~CirLinkList(); //析构函数,清除所有结点。 int Length(); //求表长度。 T Get(int i); //取表中第i个元素。10分 void Insert(int i,T & x);//在第i个结点之后,插入新元素。 T Delete(int i); //删除第i个元素。 bool isEmpty(); //判断表是否为空。 void DelTheSame(); //删除表中相同元素,仅保留一个。 private: Node<T> \* first; \}; template<typename T> ostream & operator<<(ostream & os,CirLinkList<T> & l)\{ Node<T> \* p=l.first->next; if(p!=l.first)\{ do\{ os<<p->data<<","; p=p->next; \}while(p!=l.first); \} else os<<endl; return os; \} template<typename T> CirLinkList<T>::CirLinkList() \{ Node<T> \*first; first=new Node<T>; first->next=first;//初始化循环单链表 \} template<typename T> CirLinkList<T>::CirLinkList(T a\[\],int n) \{ Node<T> \*r,\*s; first=new Node<T>; r=first; for(int i=0;i<n;i++) \{ s=new Node<T>; s->data=a\[i\]; r->next=s; r=s; \} r->next=first;//这里的first一直没变 \} template<typename T> CirLinkList<T>::~CirLinkList() \{ Node<T> \*q=NULL; while(first!=NULL) \{ q=first; first=first->next; delete q; //可能有问题? \} \} template<typename T> int CirLinkList<T>::Length() \{ Node<T> \*p=first->next; int count=0; while(p!=first) \{ p=p->next; count++; \} return count; \} template<typename T> T CirLinkList<T>::Get(int i) \{ Node<T> \*p=first->next; int count=1; while(p!=first&&count<i) \{ p=p->next; count++; \} if(p==first)throw"位置"; else return p->data; \} template<typename T> void CirLinkList<T>::Insert(int i,T & x) \{ Node<T> \*p=first->next; int count=1; while(p!=first&&count<i) \{ p=p->next; count++; \} if(p==first)throw"位置"; else \{ Node<T> \*s; s=new Node<T>; s->data=x; s->next=p->next; p->next=s; \} \} template<typename T> T CirLinkList<T>::Delete(int i) \{ Node<T> \*p=first->next; T x;int count=1; while(p!=first&&count<i-1) \{ p=p->next; count++; \} if(p==first||p->next==first)throw"位置"; else \{ Node<T> \*q; q=p->next; x=q->data; p->next=q->next; delete q; return x; \} \} template<typename T> bool CirLinkList<T>::isEmpty() \{ Node<T> \*q; if(first=first->next) return 0; \} template<typename T> void CirLinkList<T>::DelTheSame() \{ Node<T> \*q=first->next; while(q!=first) \{ Node<T> \*s=q->next; Node<T> \*r; r=s; if(q==r) \{ delete s; r=r->next; \} \} \} \#endif \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\* \#include<iostream> \#include"CirLinkList.h" using namespace std; int main()\{ int ary\[\]=\{2,4,6,8,12,32,43,6,9,2,7\},x=11; CirLinkList<int> myLink(ary,11); cout<<"链表内容:"<<myLink<<endl; cout<<"链表长度:"<<myLink.Length()<<endl; cout<<"第11号元素:"<<myLink.Get(11)<<endl; myLink.Insert(3,x); cout<<"在3号元素后插入11后,链表内容:"<<myLink<<endl; cout<<"被删除的5号元素内容:"<<myLink.Delete(5)<<endl; cout<<"链表当前内容:"<<myLink<<endl; myLink.DelTheSame(); cout<<"删除相同元素后,链表内容:"<<myLink<<endl; if(myLink.isEmpty()) cout<<"空:"; return 0; \}
相关 【链表】单链表、双向循环链表 文章目录 前言 一:链表(LinkedList) 1.1 链表分类 1.2 介绍 1.3 链表的概念及结构 二: 骑猪看日落/ 2024年03月24日 18:19/ 0 赞/ 217 阅读
相关 循环链表 前文回顾 在 [单链表][Link 1] 中,我们重点介绍了单链表,涉及到单链表的结构以及单链表元素的读取、插入、删除。 这篇文章将对循环链表进行简单的介绍。 举例 今天药忘吃喽~/ 2023年10月05日 20:33/ 0 赞/ 2 阅读
相关 循环链表 循环链表和单链表没有本质上的差别。唯一不同的链表的最后不再是空的了,而是指向了first头指针。只有这样我们才会实现链表的循环功能,那么问题来了,我们在下面的函数功能中 ╰+哭是因爲堅強的太久メ/ 2022年08月13日 13:52/ 0 赞/ 238 阅读
相关 循环链表 一、解析 将单链表中终端结点的指针端由空指针改为指向头结点,就使整个链表形成一个环,这种头尾相接的单链表成为单循环链表,简称循环链表(circular linked list 男娘i/ 2022年06月18日 09:15/ 0 赞/ 290 阅读
相关 循环链表 循环链表 循环链表的原理:最后一个节点的next指向头节点,而不是NULL ![在这里插入图片描述][20181114202301997.png] - 迈不过友情╰/ 2022年04月17日 02:42/ 0 赞/ 264 阅读
相关 循环链表 好久没有接触数据结构和算法了,但是这些在面试中还是需要的所以打算重新复习下 今天打算用js来实现循环链表,看下别人怎么实现,发现很少使用js实现的,而且实现有点问题在对head 忘是亡心i/ 2022年01月20日 05:15/ 0 赞/ 421 阅读
相关 【数据结构】(循环链表)链接循环单链表 > 算法思想:这个就很简单了就是找尾指针的过程进行解链,和链接就行 void Link_A_B(LinkList &A,LinkList &B){ 落日映苍穹つ/ 2021年10月30日 00:20/ 0 赞/ 587 阅读
相关 循环链表/双向链表 Java实现循环链表 / @auther: 巨未 @DATE: 2019/1/4 0004 20:12 @Descriptio 深藏阁楼爱情的钟/ 2021年09月23日 07:02/ 0 赞/ 531 阅读
相关 循环链表 循环链表的定义和结构 在单链表中,使其最后一个结点的指针又指回到第一个结点,这样的线性链表叫做循环链表。 ![Center][] 判断表尾的条件:p→next==L 判 Bertha 。/ 2021年09月10日 23:06/ 0 赞/ 452 阅读
还没有评论,来说两句吧...