资源描述:
《双向链表的基本操作和应用》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、实验二双向链表的基本操作和应用一、实验目的:1.掌握双向线性表的逻辑特征2.熟练掌握带头结点的双向链式表的指针操作、能完成双向链表的插入、删除、获取指定位序结点指针、遍历、和复杂应用;二、实验内容(双向链式线性表)1.熟悉VisualStudio6.0,会设置断点,会查看运行过程中的指针情况;2.编写双向链表的插入、删除、获取指定位序的结点、遍历函数;3.实现将a1,a2,a3…an的双向链表转变为:a1,a3…a4,a2;三、实验结果#includetypedefstructDulNode{intda
2、ta;structDulNode*Prior,*Next;}DulNode,*LinkDulNode;intInsertDulNode(LinkDulNodehead,intlocation,intdata){LinkDulNodep=head;for(inti=0;iNext==head)break;elsep=p->Next;}if(location<0&&i!=location)return-1;LinkDulNodes=newDulNode;s->data=data;s-
3、>Next=p->Next;s->Prior=p;p->Next->Prior=s;p->Next=s;++head->data;}voidPrintDulNode(LinkDulNodehead){LinkDulNodep;p=head->Next;while(p!=head){printf("%d",p->data);p=p->Next;}}LinkDulNodeGetDulNode(LinkDulNodehead,inti){LinkDulNodep;for(intj=0;j<=i;j++){p=head->Nex
4、t;head=p;}returnp;}voidDeleteDulNode(LinkDulNodehead,intdata){LinkDulNodep;p=head->Next;for(inti=0;iNext;p->Prior->Next=p->Next;p->Next->Prior=p->Prior;--head->data;}voidChange(LinkDulNodeh1,LinkDulNodeh2){inti=0;LinkDulNodep,q;p=h1->Next;while(p!=
5、h1){q=GetDulNode(h1,i);InsertDulNode(h2,i,q->data);DeleteDulNode(h1,i);p=p->Next;i++;}intj=h1->data-1;p=h1->Prior;while(p!=h1){q=GetDulNode(h1,j);InsertDulNode(h2,i,q->data);DeleteDulNode(h1,j);i++;j--;p=p->Prior;}}voidmain(){LinkDulNodeh1;h1=newDulNode;h1->data=
6、0;h1->Next=h1;h1->Prior=h1;InsertDulNode(h1,0,9);InsertDulNode(h1,0,8);InsertDulNode(h1,0,7);InsertDulNode(h1,0,6);InsertDulNode(h1,0,5);InsertDulNode(h1,0,4);InsertDulNode(h1,0,3);InsertDulNode(h1,0,2);InsertDulNode(h1,0,1);PrintDulNode(h1);printf("");LinkDulN
7、odeh2;h2=newDulNode;h2->data=0;h2->Next=h2;h2->Prior=h2;Change(h1,h2);PrintDulNode(h2);printf("");}}四、实验中遇到的问题及解决方法1.遇到的问题:用函数求的表长度过于繁琐,是否可在双向循环链表中储存链表长度信息。解决方法:方法1.定义表结构定义时多定义intlength类型,这使得所有的节点中的p->length均为表长度,造成资源浪费;方法2.在头节点L->date中储存链表长度,在插入函数中加入++L->date操
8、作,删除函数中加入--L->date操作。2.遇到的问题:编写程序过程中忽略大小写。解决方:输写时仔细些,完成后认真检查。五、心得体会在这次实验中已就遇到了一些上次实验中所遇到的问题,但在解决过程中明显比上一次有了进步。编写程序的困难在老师演示指导后得以解决。对断点设置,正确设置断点有了进一步了解。希望在以后的实验、