




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
华中农业大学理学院章英zy@
数据结构与算法
1/29第四讲循环链表本讲知识点:(1)了解循环链表的创建方法(2)掌握双向链表的删除、插入操作
(3)了解链表的相关应用重点:双向链表的操作难点:链表的应用2/29重温约瑟夫环问题,是否可以用链表实现?提出问题la.head3/29数据成员需要变化吗?单链表和循环链表的区别SimpleLinkList<int>la;la.head^la.headSimpleCircLinkList<int>la;4/29一、循环链表之初始化template<classElemType>voidSimpleLinkList<ElemType>::Init()//操作结果:初始化循环链表{ head=newNode<ElemType>;
head->next=head;}5/29约瑟夫环已经形成,如何报数离队?分析问题假设:n=6m=4123456la.head6/29分析问题第一轮 第二轮 4离队2离队12356la.head1356la.head7/29分析问题第三轮 第四轮 1离队3离队356la.head56la.head8/29解决问题 //…… for(inti=1;i<n;i++)
{ for(intj=1;j<=m;j++) //从1报数到m { position++; if(position>la.Length()) position=1; }
la.Delete(position--,out);
cout<<out<<""; } la.GetElem(1,winer);
cout<<winer<<endl;参见文件夹S2_5里的文件alg.h9/29判断指针是否指向最后一个结点的方法?思考:单链表:循环链表:
tmpPtr->next==NULL;
tmpPtr->next==head;10/29二、双向链表
定义:单链表的每个结点再增加一个指向其前趋的指针域back,这样形成的链表有两条不同方向的链,称之为双(向)链表。
结点:DblNode
类:SimpleDblLinkList11/29双向链表结点结构struct
DblNode
{
ElemTypedata;
DblNode<ElemType>*back;
DblNode<ElemType>*next;//……};前驱方向后继方向backdatanext12/29p==p->back->next==p->next->back双向链表举例p13/29双向链表结点的插入 597pq
①③④②newPtr->back=nextPtr->backnewPtr->next=nexPtr一条语句即:newPtr=newDblNode<ElemType>(e,tmpPtr,nextPtr);nextPtr->back->next=newPtr
nextPtr->back=newPtrnextPtrtmpPtrnewPtr14/29双向链表结点的删除597tmpPtr->back->next=tmpPtr->nexttmpPtr->next->back=tmpPtr->backtmpPtr××15/29归纳:双向链表和单向链表相比,其优势何在?双向链表可以实现前驱遍历。学会链表,为后续课程打下基础。线段树、平衡树等,在区间统计上有很大的优势。但是对大数据量的修改维护、删除操作,他们也力不从心。要快速的定位元素,最快速的实现方法是数组;要快速的移动大量连续的元素,最快速的实现方法是链表。二者可以统一协调起来,即:块状链表。16/29课堂实战1、假设一个单循环链表,其结点含有三个域back、data、next。其中data为数据域;back为指针域,它的值为空指针(NULL);next为指针域,它指向后继结点。请设计算法,将此表改成双向循环链表。【西安电子科技大学1999软考五(10分)】17/29∧a∧b∧z∧……分析问题la.head
a
b
z
……la.head18/29voidStoDouble(SimpleCircLinkList<ElemType>&la){Node*p=la.head;do{p->next->back=p;p=p->next;}while(p!=la.head);}解决问题之方法119/29voidStoDouble(SimpleCircLinkList<ElemType>&la){while(la.head->next->back==NULL){
la.head->next->back=la.head;
la.head=la.head->next;}}解决问题之方法220/29课堂实战2、一元稀疏多项式以单循环链表按降幂排列,结点有三个域,系数域coef、指数域exp和指针域next;现对链表求一阶导数,链表ha的头指针为head,头结点的exp域为-1。【南京理工
2000考研(10分)】21/29ha.headqpa-1……41517-30(1)pa所指结点的指数要减1(2)pa所指结点的系数=系数*指数(3)若pa所指结点的指数为0,则要删除该结点分析问题22/29voidderivative(SimpleCircLinkList&ha){Node*q,*pa;q=ha.head;pa=ha.head->next;while((1)){if((2)){(3);deletepa;pa=(4);}else{pa->coef
(5);pa->exp(6);q=(7);pa=(8);}}}程序填空23/29voidderivative(SimpleCircLinkList&ha){Node*q,*pa;q=ha.head;pa=ha.head->next;while(pa!=ha)//pa->exp!=-1{if(pa->exp==0){q->next=pa->next;deletepa;
pa=q->next;}else{pa->coef
*=pa->exp
;pa->exp
--
;q=pa;pa=
pa->next
;}}}参考答案24/29课堂实战3、一线性表存储在带头结点的双向循环链表中,L为头指针。如下算法:(1)说明该算法的功能。(2)在空缺处填写相应的语句。
【北京理工大学(8分)】25/29voidunknown(BNODETP&L){…p=L->next;q=p->next;r=q->next;
while(q!=L){while(p!=L)&&(p->data>q->data)p=p->back;
q->back->next=r;(1);
q->next=p->next;q->back=p;
(2);(3);
q=r;p=q->back;
(4);
}}程序填空26/29voidunknown(BNODETP&L){…p=L->next;q=p->next;r=q->next;
while(q!=L){while(p!=L)&&(p->data>q->data)p=p->back;
q->back->next=r;r->back=q->back
;
q->next=p->next;q->back=p;
p->next->back=q
;p->next=q
;
q=r;p=q->back;
r=r->next;//r=q->next
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 家用纺织品的产品差异化与竞争优势考核试卷
- 智能车载设备的故障预测考核试卷
- 工艺美术品的商业模式创新考核试卷
- 专业技术培训引领行业变革考核试卷
- 家居装饰装修中的施工质量控制考核试卷
- 城市轨道交通的旅客负担与收入分析考核试卷
- 技术标准制定考核试卷
- 工业控制计算机在电力系统的应用考核试卷
- 学校租赁土地合同范本
- 公司并购签约合同范本
- 2025年上海市商品交易市场进场经营合同(2篇)
- 2025年全国幼儿园教师资格证考试教育理论知识押题试题库及答案(共九套)
- 2024年郑州电力高等专科学校高职单招职业适应性测试历年参考题库含答案解析
- 产品试产流程
- 舞台机械基础知识培训
- 人教版数学八年级下册 第16章 二次根式 单元测试(含答案)
- 中学班主任培训内容
- DB2301-T 108-2022 地下管线探测技术规程
- DB51T 1511-2022建设项目对自然保护区自然资源、自然生态
- DCMM练习题练习试题
- 2024年湘教版初中地理一轮复习专题三 天气与气候
评论
0/150
提交评论