双向链表的总结报告_第1页
双向链表的总结报告_第2页
双向链表的总结报告_第3页
双向链表的总结报告_第4页
双向链表的总结报告_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

双向链表的总结报告首先是对结点的定义问题。响后面链表的实现的书写。请参见链表的实现文件中相关的注释。Error_code中的成员range_error可能与系统的参数有冲突。经查阅得知确实有冲突,现将系统内的range_error列出如下:range_errorClassTheclassservesasthebaseclassforallexceptionsthrowntoreportarangeerror.classrange_error:publicruntime_error{public:explicitrange_error(conststring&message);};Thevaluereturnedbywhatisacopyofmessage.data.range_error的地方都加上属于符,这样明确的说明range_error是属于哪一个名字空间了,在本程序中就是Error_code::range_error在用双向链表来实现数据构造的时候时,在涉及到要插入元素的时候以及要删除元素的时候,要特别的留意,由于在这些操作中要考虑很多的临界状况。现分析这个程序中的删除操作和插入操作,分析如下:1.删除操作:置也是非法的。示实际的操作。这种状况是很简洁来处理的。代码如程序所示。得到,固然也可以去自己考虑,但是这是很难考虑全面的。current->back->next=current->next;这里消灭了current->back->next这个表达式,在由函数set_position所得到的current是不会为NULLcurrent->nextNULL的左边是非法的。这样一种状况产生,需另外争论。这样消灭了程序的第四个if语句。在一般状况中有表达式:current->next->back=current->back;这里消灭了current->next->back这个表达式,在有函数set_position所得到的current是不会为NULLcurrent->nextNULL的左边是非法的。这样一种状况产生,需另外争论。这样消灭了程序的第五个if语句。但是上面所考虑的都是上述的两种特别状况分别产生所要做的特别处理即要特别对待。个。现将上述所分析的三种状况按其消灭的先后挨次记a,b,c。很明显特别状况a和b是相互独立的,因此先考虑谁都无所谓。然后来考虑特别状况c,有上述的分析可知,特别状况c是综合分析特别状况a和b而产生的,即c是b和a的交集,它发生的概率比起ab而言要小,且ab中任何一个发生不能推出c就发生,所以不能通过ab来掩盖c。假设先考虑ab的话,当特别状况c发生是,特别状况abc优先考虑的话,任何一种特别状况的发生,特别的处理只进展一次,这样就没有特别状况特别处理屡次的错误的情形消灭。之前考虑。2.插入操作:除位置也是非法的。示插入操作是如何进展的。这种状况是很简洁处理的,代码如程序所示。得到,固然也可以去自己考虑,但是这是很难考虑全面的。在一般的状况中消灭语句:set_position(position-1),假设position的取值正好是0的话,那么set_position函数的参数值就是-1了,这明显是非法的。所以一种特别状况产生,这样消灭了其次个if语句。current->next->back=new_Node;这里消灭了表达式current->next->back。在由函数set_position所得到的current是不会为NULL的。current->next为NULL的话,那么等式的左边是非法的。这样一种状况产生,需另外争论。这样在一般状况的上面的if语句产生。position为0的状况的一般处理的时候,会消灭语句empty的推断语句,其实ifempty是在第一个if原链表为空是太特别的状况,在写代码不得不引起程序员的留意。E对成员函数traverse的说明:在函数的一开头就要将当前的current和current_position保存下来,由于在下面的状况下要修改他们的值,从而导致原他们的值的丧失。我个人认为,程序中的算法不愿定是最好的。可以在保存了current和current_position后,直接使用函数set_position(0)定位到第一个位置,然后从头依次遍retrieve,由于在函数retrieve中,current的值始终在变,很可能会增加了内存的消耗。F.一般地,对于链式存储构造的数据构造,其析构函数与函数clear是根本上一样的,要是真正的要区分他们的差异,那就是在函数clear参数恢复到为空链表的状况。所以在书写链式构造的析构函数是可以直接调用函数clear〔假设有函数clearclear中就不能调用析构函数clear,然后书写析构函数。重点放在函数clear上。G.在链式存储构造的数据构造中一般要有拷贝构造函数和操作符=的重载。这两个函数是时候,对象刚刚产生,此时正是为空链表。而后者需要先释放原来的全部结点,缘由是假设不释放他们的话,那么在执行了此操作符=的重载函数后,原有的全部结点将变成垃圾,再也找不到了。而释放全部的结点正好可以使用函数clear来处理。所以实际上操作符=的重载函数实际上是有函数clear和拷贝构造函数构成的。假设在某个链式构造的构造中存在一个成员函〔这个成员函数一般是私有成员函数它返回链表的头指针,那么操作符=的重载函数就格外简洁了,如下:A(b);Clear;Head=a.head;只要上述的三行代码就够了。对书写双向链表的总的感想他们最终是不会遗漏的。发应用程序的过程实际上是分两个阶段的:第一阶段是单纯的开发,而其次个阶段是测试。可以说其次阶段更重要一些。此时就要留意测试的技巧了。在此程序的开发的过程中所总结的测试的阅历是:在测试时,首先是测试一般的状况,此时假设一般的状况下程序都不能正确的运行的话,那么此程序就写的有点烂了。的想想这个问题。留意每一种特别状况都要测试,确定不能遗漏。在每一种状况〔一般和特别〕的测试的后面马上书写输出语句,以检查是否是正确的。这个输出语句的书写也是有讲究的,最好是各个情形都要输出来,这样才彻底。式。比照输出结果,分析是哪个函数出错了。但是一般这是很难的,此时可以通过VS自带的调试工具来检查之。时可以集中精力来分析之。交谈中请勿轻信汇款、中奖信息、生疏,勿使用外挂软件。陈雪梅(823336642) 21:21:53#include<iostream>usingnamespacestd;structDulNode{intdata;DulNode*prior;DulNode*next;};classDulLinkList{private:DulNode*head;intn;public:voidinputNodeNumber;voidcreateList;intlistLength;boollistInsert(inti,inte);boollistDelete(inti);voiddisplay;};voidDulLinkList::inputNodeNumber{cout<<“请输入你要创立的双链表的节点数:“;do{cin>>n;if(n<=0)cout<<“不能创立“<<n<<“个结点的双链表,请重输入:“;}while(n<=0);}voidDulLinkList::createList{intm;DulNode*L,*p,*s;L=newDulNode;L->data=n;L->prior=NULL;L->next=NULL;p=L;for(inti=1;i<=n;i++){cout<<“请输入第“<<i<<“个结点的值:“;cin>>m;s=newDulNode;s->data=m;s->next=NULL;s->prior=p;p->next=s;p=s;}head=L;}intDulLinkList::listLength{returnn;}boolDulLinkList::listInsert(inti,inte){intj=0;DulNode*p,*s;p=head;while(p!=NULL&&j<i-1){p=p->next;j++;}if(p==NULL||j>i-1){cout<<“插入位置错误“;returnfalse;}s=newDulNode;s->data=e;s->next=p->next;s->prior=p;p->next=s;s->next->prior=s;head->data++;n++;returntrue;}boolDulLinkList::listDelete(inti){intj=0;DulNode*p,*temp;p=head;while(p!=NULL&&j<i-1){p=p->next;j++;}if(p==NULL||j>i-1){cout<<“删除位置错误“;returnfalse;}temp=p->next;p->next=p->next->next;p->next->prior=p;deletetemp;head->data--;n--;returntrue;}voidDulLinkList::display{DulNode*p;p=head->next;cout<<“\n开头输出链表\n“;cout<<“链表共有“<<n<<“个结点,下面是各个结点的值:\n“;for(inti=1;i<=n;i++){cout<<“结点“<<i<<“的值:“<<p->data<<endl;p=p->next;}cout<<“链表输出完毕\n\n“;}intmain{intn;inti,e;intchoose=0;DulLinkListL;cout<<“\n********* 程序开头前,先创立双链表************\n“;L.inputNodeNumber;L.createList;cout<<“\n链表创立成功,输出如下:\n“;L.display;while(choose!=3){choose=0;cout<<“\n你可以对双链表进展的操作如下:\n“;cout<<“1.插入\n2.删除\n3.退出\n“;while(choose!=1&&choose!=2&&choose!=3){cout<<“请输入1或2或3选择插入或删除或退出:“;cin>>choose;if(choose!=1&&choose!=2&&choose!=3)cout<<“输入错误,请重输入\n“;}if(choose==1){while(1){cout<<“\n双链表插入前为:\n“;L.display;cout<<“请输入要插入的数:“;cin>>e;cout<<“请输入要插入的位置:“;cin>>i;if(L.listInsert(i,e)){cout<<“\n双链表插入后为:\n“;L.display;break;}elsecout<<“输入的插入位置错误,请重试\n“;}}elseif(choose==2){while(1){cout<<“\n双链表删除前为:\n“;L.display;cout<<“请输入删除的结点的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论