版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、一、需求分析:题目:实现两个链表的合并问题描述:1. 建立两个链表 A和B,链表元素个数分别为m和n个。2. 假设元素分别为(x1,x2, xm),和(y1,y2,- yn) o把它们合并成一个线形表 C,使得:当 m>=n时,C=x1,y1,x2,y2, xn,yn,xm当 n>m时,C=y1,x1,y2,x2,ym,xm,yn输由线性表Co由题目的相关信息可以分析得到:首先我们需要建立两个链表AB, A链表的元素个数为 ml B链表的元素个数为 n;在将AB链 表进行合并,更具 m和n的大小关系决定链表 C的元素顺序;再将 C经行直接插入排序得到一个新的链表D;最后输由ABCD
2、勺相关信息。二、算法的流程图三、算法设计分析这个两个链表的交叉合并算法主要运用到的是链表的基本操作,定义 节点,将链表的创建、计算链表的长度、链表 A,B的交叉组合、链表内容升 序排列、删除链表指定位置元素、删除指定的元素等算法写成了独立函数, 通过主函数调用。这样就大大精简了主函数的操作。但主函数中很大篇幅用 到了 if、else语句,用以指定链表指定结点和指定元素的删除操作,这样就使得本来很精简变得繁琐,降低了程序的质量。所以具有优点和缺点,但需 要不断的改进,不断优化该程序。源代码程序源代码:#include<stdio.h>#include<stdlib.h>t
3、ypedef struct node/int data;struct node *next; node,*linklist;节点定义linklist creat(linklist head) /node *r,*s;int a;r = (linklist)malloc(sizeof(node);head = r;scanf("%d",&a);while(a != 0)s =(node*)malloc(sizeof(node); s->data=a;r->next=s;r=s;printf("please input a data:")
4、; scanf("%d",&a);r->next=NULL;return head;该函数用来创建链表linklist length(linklist l) / int i=0;linklist p=l->next; / p while(p) i+;p=p->next;return i;返回 L 中数据元素个数指向第一个结点链表内容升序排列用于实现链表A,B的交叉组合linklist mergel(linklist A,linklist B) / int m,n;node *p,*q,*s,*t;linklist C;p=A->next;q=
5、B->next;m=length(A);n=length(B);C=A;if(m<n)p=B->next;q=A->next;C=B;while(p&&q)s=p->next;p->next=q;if(s)t=q->next;q->next=s;p=s;q=t;return C;linklist sort(linklist L) /linklist p,q,min;int temp;p=L;while( p=p->next )q=min=p;while(q=q->next)if( q->data<min-&
6、gt;data )min = q;if( min!=p )temp = p->data;p->data = min->data;min->data=temp;return L;linklist Delete(linklist l,int index) / linklist p,t;int cx=1;/用于计数p=l;if(index<length(l)while(p&&(cx<index)t=p;p=p->next;cx+;t->next=p->next;elseprintf("input indext error
7、");return l;linklist Delete_element(linklist l,int data) / linklist p;p=l;if(p->next)while(p->next->data!=data)p=p->next;删除链表指定位置元素删除指定的元素p->next=p->next->next;elseprintf("don't faind the element");return l;linklist display(linklist l) /打印 linklist p;printf(&q
8、uot;new linklist :n");p = l->next;while(p)printf("%dn",p->data);p= p->next;return l;main()linklist p,q,A,B,C,D;int indexs;int datas;char name;int cmd;printf("Creat linklist A:n");/printf("please input a data:");A = creat(A);创建A链表,并打印printf("Creat link
9、list B:n");/printf("please input a data:");B = creat(B);C = mergel(A,B);/printf("linklist Cn");p = C->next;while(p)printf("%dn",p->data);p=p->next;创建B 链表, 并打印生成C链表,并打印对 C 进行排序生成DD=C;/sort(D); printf("linklist D:n");q = D->next; while(q) printf
10、("%dn",q->data); q = q->next;printf("nplease input 0 or 1 n");/ 用 1 和 0 判断是按位置删除还是直接删除元素scanf("%d",&cmd);if(cmd=0)/位置删除printf("please input linklist namen ");fflush(stdin);scanf("%c",&name);printf("nplease input index n");scan
11、f("%d",&indexs);fflush(stdin);if(name='A')Delete(A,indexs);display(A);else if(name='B')Delete(B,indexs);display(B);else if(name='C')Delete(C,indexs);display(C);else if(name='D')Delete(D,indexs);display(D);elseprintf("nameError");else if(cmd=1)/
12、元素删除fflush(stdin);/清除缓冲printf("please input linklist namen ");/fflush(stdin);scanf("%c",&name);printf("nplease input datas n");scanf("%d",&datas);if(name='A')Delete_element(A,datas);display(A);else if(name='B')Delete_element(B,datas);di
13、splay(B);else if(name='C')Delete_element(C,datas);display(C);else if(name='D')Delete_element(D,datas);display(D);elseprintf("name2error"); elseprintf("cmdError");printf("nOvern");getchar();return 0;六、实验运行结果显示:设计体会及今后改进的意见短短一周的数据结构课程设计结束了,回想着这一周自己的表现,感觉不是很满意,感到自己许多不足之处。但同时通过本次课程设计,我也收获了不少。这次课程设计我做的是实现两个链表的合并,由于有C语言的编程,而编程一直对我来说就是一个弱项,我觉的我选的这个题比较基础,自己也有一些思路,但在程序编写过程中还是遇到了不少问题,在开始前, 我查阅相关资料,对这次课程谁过程中用到的知识做出了一个系统的归纳:如链表的建立、链表的合并、直接插入排序以及SWITCH语句等知识点。但在板鞋程序过程中还是遇到了一些问题。经过修改、调试、运行然后再修改、调试、运行,有时虽然能运行,但对本次实验来说缺少一定程度的完整性,然后就上网查资料,在书上查看相关方面的知识,当编写的程序感觉符合要求时
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 泌尿外科手术图谱
- 2024-2025学年高中政治第三单元发展社会主义民主政治第五课中国特色社会主义最本质的特征1坚持党对一切工作的领导课时作业含解析新人教版必修2
- 2024-2025学年高中物理第八章气体第1节气体的等温变化达标练含解析新人教版选修3-3
- 2025员工安全生产合同
- 2025企业办公室装修合同范本
- 2025年武汉货运资格证考试答题软件
- 2025年巢湖货运资格证考试有哪些项目
- 2025年湖南道路客货运输从业资格证模拟考试下载
- 中国石质工程板项目投资可行性研究报告
- 中国密闭式防腐照明灯具项目投资可行性研究报告
- 采购工作执行情况的汇报
- 佛山市年信息技术初中学业水平考试试题附有答案
- 2023年12个月院感培训计划表
- 《延迟焦化介绍》课件
- 起重机械安全技术规程(TSG-51-2023)宣贯解读课件
- 2024宫腔镜检查ppt课件完整版
- 智能化实验室建设方案
- 师德师风自评情况对照《新时代高校教师职业行为十项准则》
- 经络脉学心悟
- 2023年电池Pack结构设计工程师年度总结及下年规划
- 肛肠科常见疾病中医诊疗规范诊疗指南2023版
评论
0/150
提交评论