数据结构课程设计双向链表的操作.doc

上传人:土8路 文档编号:10281305 上传时间:2021-05-05 格式:DOC 页数:8 大小:139.50KB
返回 下载 相关 举报
数据结构课程设计双向链表的操作.doc_第1页
第1页 / 共8页
数据结构课程设计双向链表的操作.doc_第2页
第2页 / 共8页
数据结构课程设计双向链表的操作.doc_第3页
第3页 / 共8页
数据结构课程设计双向链表的操作.doc_第4页
第4页 / 共8页
数据结构课程设计双向链表的操作.doc_第5页
第5页 / 共8页
点击查看更多>>
资源描述

《数据结构课程设计双向链表的操作.doc》由会员分享,可在线阅读,更多相关《数据结构课程设计双向链表的操作.doc(8页珍藏版)》请在三一文库上搜索。

1、安徽省巢湖学院计算机与信息工程学院课程设计报告课程名称 数据结构 课题名称 双向链表 专业 计算机科学与技术 班级 10计本2班 学号10012133 姓名 联系方式 指导教师20 11 年 12 月 29日目 录1、数据结构课程设计任务书1.1、题目1.2、要求2、总体设计2.1、功能模块设计2.2、所有功能模块的流程图3、详细设计3.1、程序中所采用的数据结构及存储结构的说明3.2、算法的设计思想3.3、稀疏矩阵各种运算的性质变换4、调试与测试:4.1、调试方法与步骤:4.2、测试结果的分析与讨论:4.3、测试过程中遇到的主要问题及采取的解决措施:5、时间复杂度的分析:6、源程序清单和执行

2、结果7、C程序设计总结8、致谢9、参考文献1、数据结构课程设计任务书1.1、题目 双向链表的操作1.2、要求1. 建立双向链表L,含n个结点且按整数值递增排列的(输入任意);2. 删除双向链表中多余的值相同的元素 3. 求出的长度 4. 将双向链表就地逆置 5. 向双向链表中插入值,插入后双向链表仍有序2、总体设计2.1、功能模块设计根据课程设计题目的功能要求,各个功能模块的组成框图如下:输入矩阵1任意输入建立双向链表排序删除相同元素输出当前列表和长度插入删除相同元素输出当前列表和长度逆置并输出3、详细设计模块功能说明:如函数功能、入口及出口参数说明,函数调用关系描述等;3.1、程序中所采用的

3、数据结构及存储结构的说明为单向链表增加一个指向前趋的指针,则可以构成双向链表/-双向链表存储表示-typedef struct lnodeint data;struct lnode * next,*prior;/设置分别指向前后的指针Lnode,*Linklist;在此,节点Inode中有两个指针域,其一指向直接后继,另一指向直接前趋。3.2、算法的设计思想a) 双向链表创建 创建头结点,通过插入,实现有序排列。b)插入插入时指向头结点先进行数据域的大小比较,在符合条件前向后依次比较,然后插入时先将其指针分别指向前趋和后继,再将其前趋的next,和后继的prior指向该节点c) 删除相同元素遍

4、历链表,相同时删除节点,并判断是否是尾节点。 d)求长度输出当前链表的l头节点记录的表长。 e)逆置指向最后一个节点,将其重新定义为头结点,从后往前逆置各节点。4、调试与测试:4.1、调试方法与步骤:第一步:随机输入创建双向链表;第二步:通过删除操作完成其创建,并输出;第三步:求出长度,插入输出;第四步:逆置并输出。4.2、测试结果的分析与讨论:(测试要写出测试用例及每个用例结果的的截图)5、时间复杂度的分析:时间复杂度为 O。6、 源程序清单和执行结果#includeusing namespace std;typedef struct lnodeint data;struct lnode *

5、 next,*prior;Lnode,*Linklist;void Create_Link(Linklist & l); /创建有序双向链表void Insert_Link(Linklist & l,int x); /插入x到链表lvoid Show_Link(const Linklist & l); /显示链表int Length_Link(const Linklist & l) return l-data; ; /返回链表长void Reverse_Link(Linklist & l); /逆置链表void Delete_Same_Link(Linklist & l); /删除相同元素in

6、t main() Linklist h; cout输入链表中的元素 :; Create_Link(h); /创建有序双向链表 cout创建的链表为:; Show_Link(h); cout链表长度为:Length_Link(h)endl; cout要插入的数 :; int x; while(cinx) Insert_Link(h,x); /插入元素到链表 cout当前链表为:; Show_Link(h); cout当前链表长度为:Length_Link(h)endl; cout要插入的数 :; cout将链表逆置后为:; Reverse_Link(h); /逆置链表 Show_Link(h);

7、 Delete_Same_Link(h); /删除相同元素 cout删除链表中相同的元素后链表为:; Show_Link(h); cout当前链表长度为:Length_Link(h)data=0; s-next=NULL; s-prior=NULL; l=s; while(cinx) Insert_Link(l,x); /x元素插入链表l cin.clear(); while(cin.get()!=n) continue;void Insert_Link(Linklist & l,int x) /x元素插入链表l Lnode *p=l-next,*q=l; /p指向当前结点,q指向当前结点的前

8、驱结点 Lnode *s=new Lnode; /生成插入的结点s s-data=x; while(p!=NULL) if(p-data data) /插入结点的元素比链表当前结点元素大时,p、q指向下一个结点 q=q-next; p=p-next; else /当前结点的元素大于插入结点的元素时 s-prior=p-prior; /将s插入到p之前 s-next=p; p-prior-next=s; p-prior=s; +l-data; /表长+1 break; if(p=NULL) /链表为空或者插入结点元素最大时直接将结点插入表尾 s-next=q-next; q-next=s; s-

9、prior=q; +l-data; void Show_Link(const Linklist & l) /显示链表 Lnode *p=l-next; while(p!=NULL) coutdatanext; coutnext,*q=l,*s; while(p-next!=NULL) p=p-next; /将p定位到最后一个结点 l-next=p; /重定位头结点指针指向链表最后一个元素 while(p!=l) /逆置各个结点 s=p-prior; p-next=s; p-prior=q; q=p; p=s; q-next=NULL; /新链表的最后一个结点指向NULLvoid Delete_

10、Same_Link(Linklist & l) /删除相同元素 Lnode *p=l-next,*s=p-next; /p指向当前结点,s指向当前结点的后继 while(s!=NULL) /遍历链表 if(p-data = s-data) /相等时删除结点 p-next=s-next; delete s; s=p-next; if(s!=NULL) s-prior=p; /当p不是尾结点。因为p为尾结点时s=NULL -l-data; else p=p-next; /后移指针 s=s-next; 7、C程序设计总结在这次设计过程中,不仅复习课本上所学知识,还通过查资料、问同学学到了课本上没有的知识。从而启发我,要想写好程序,在写好课本知识的同时还需要多读和专业有关的一些书籍,同时还需要多动脑子,尽量把所学的知识综合起来应用,力争写出完美的程序。除此之外,我还得到了一些有用的教训:写程序时必须要细心,不能输错一个字符标点,就连全角半角也得注意。在修改时要有耐心,编译出错后必须逐个错误去改正,绝不能心急浮躁,否则修改之后还会有新的错误。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1