数据结构课程设计 实验报告 心得体会 链表 C语言_第1页
数据结构课程设计 实验报告 心得体会 链表 C语言_第2页
数据结构课程设计 实验报告 心得体会 链表 C语言_第3页
数据结构课程设计 实验报告 心得体会 链表 C语言_第4页
数据结构课程设计 实验报告 心得体会 链表 C语言_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

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

文档简介

数 据 结构课程设计设计题目:两个链表的交叉合并专业班级:08软件工程3班姓名:xxxxxx学号:080107031123设计时间:2010/9/25指导教师:杨薇薇一、设计题目实现两个链表的合并设计目的1.掌握线性链表的建立。2.掌握线性链表的基本操作。设计内容和要求1.建立两个链表A和B,链表元素个数分别为m和n个。2.假设元素分别为(x1,x2,…xm),和(y1,y2,…yn)。把它们合并成一个线形表C,使得:当m>=n时,C=x1,y1,x2,y2,…xn,yn,…,xm当n>m时,C=y1,x1,y2,x2,…ym,xm,…,yn输出线性表C。3.用直接插入排序法对C进行升序排序,生成链表D,并输出链表D。4.能删除指定单链表中指定位子和指定值的元素。二、运行环境(软、硬件环境)软件环境:VC++6.0编程软件,运行平台:Win32硬件:普通个人pc机、算法设计的思想开始三开始CreatA链表CreatA链表CreatB链表CreatB链表Mergel(A,B)交叉合并成CMergel(A,B)交叉合并成C对C排序生成D对C排序生成D提示输入0或1 cmd=0cmd=1错误输入输入将要操作的链表的名字Cmderror输入将要操作的链表的名字Cmderror输入将要操作的链表的名字 正确错误正确错误Nameerror删除,打印NNameerror删除,打印Nameerror删除,打印打印“over”结束结束四、算法设计分析这个两个链表的交叉合并算法主要运用到的是链表的基本操作,定义节点,将链表的创建、计算链表的长度、链表A,B的交叉组合、链表内容升序排列、删除链表指定位置元素、删除指定的元素等算法写成了独立函数,通过主函数调用。这样就大大精简了主函数的操作。但主函数中很大篇幅用到了if、else语句,用以指定链表指定结点和指定元素的删除操作,这样就使得本来很精简变得繁琐,降低了程序的质量。所以其有优点和缺点,但需要不断的改进,不断优化该程序。五、源代码程序源代码:#include<stdio.h>#include<stdlib.h>typedefstructnode//节点定义{intdata;structnode*next;}node,*linklist;linklistcreat(linklisthead)//该函数用来创建链表{node*r,*s;inta;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("pleaseinputadata:");scanf("%d",&a);}r->next=NULL;returnhead;}linklistlength(linklistl)//返回L中数据元素个数{ inti=0; linklistp=l->next;//p指向第一个结点 while(p) { i++; p=p->next; } returni;}linklistmergel(linklistA,linklistB)//用于实现链表A,B的交叉组合{ intm,n;node*p,*q,*s,*t;linklistC;p=A->next;q=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;} returnC;}linklistsort(linklistL)//链表内容升序排列{linklistp,q,min;inttemp;p=L;while(p=p->next){q=min=p;while(q=q->next){if(q->data<min->data)min=q;}if(min!=p){temp=p->data;p->data=min->data;min->data=temp;}}returnL;}linklistDelete(linklistl,intindex) //删除链表指定位置元素{linklistp,t;intcx=1;//用于计数p=l;if(index<length(l)){ while(p&&(cx<index)) { t=p; p=p->next;cx++; }t->next=p->next;}elseprintf("inputindexterror");returnl;}linklistDelete_element(linklistl,intdata)//删除指定的元素{linklistp;p=l;if(p->next){while(p->next->data!=data){ p=p->next; }p->next=p->next->next;}else printf("don'tfaindtheelement");returnl;}linklistdisplay(linklistl)//打印{linklistp; printf("newlinklist:\n"); p=l->next; while(p) { printf("%d\n",p->data); p=p->next; }returnl;}main(){linklistp,q,A,B,C,D; intindexs; intdatas; charname; intcmd;printf("CreatlinklistA:\n");//创建A链表,并打印printf("pleaseinputadata:"); A=creat(A); printf("CreatlinklistB:\n");//创建B链表,并打印 printf("pleaseinputadata:");B=creat(B); C=mergel(A,B);//生成C链表,并打印printf("linklistC\n"); p=C->next;while(p){printf("%d\n",p->data);p=p->next;}D=C;//对C进行排序生成Dsort(D);printf("linklistD:\n"); q=D->next;while(q){printf("%d\n",q->data);q=q->next;} printf("\npleaseinput0or1\n");//用1和0判断是按位置删除还是直接删除元素 scanf("%d",&cmd); if(cmd==0)//位置删除 { printf("pleaseinputlinklistname\n"); fflush(stdin); scanf("%c",&name); printf("\npleaseinputindex\n"); scanf("%d",&indexs); fflush(stdin); if(name=='A') { Delete(A,indexs); display(A); } elseif(name=='B') { Delete(B,indexs); display(B); } elseif(name=='C') { Delete(C,indexs); display(C); } elseif(name=='D') { Delete(D,indexs); display(D); } else printf("nameError"); } elseif(cmd==1)//元素删除 { fflush(stdin);//清除缓冲 printf("pleaseinputlinklistname\n"); //fflush(stdin); scanf("%c",&name); printf("\npleaseinputdatas\n"); scanf("%d",&datas); if(name=='A') { Delete_element(A,datas); display(A); } elseif(name=='B') { Delete_element(B,datas); display(B); } elseif(name=='C') {Delete_element(C,datas); display(C); } elseif(name=='D') { Delete_element(D,datas); display(D); } else printf("name2error"); }else printf("cmdError"); printf("\nOver\n");getchar();return0;}六、运行结果分析截图:结果分析:大体来说,该程序都实现了课程设计的算法要求及功能,但还是有很多问题,由于时间问题该算法做得比较粗糙,还不能很好的处理问题,例如,如果想在一次操作完成后还像再次操作,但此时已经结束算法了,需要重新运行程序再次输入操作才能达到要求,这样很繁琐。同时还存在一些其他的问题需要改进,程序就是在不断改进中不断完善。七、收获及体会这学期开始两周时间是我们自己选题上机的时间,虽然上机时间只有短短两个星期但从中确实学到了不少知识。数据结构可以说是计算机里一门基础课程,但我觉得我们一低定要把基础学扎实,然而这次短短的上机帮我又重新巩固了C语言知识,让我的水平又一部的提高。数据结构这是一门纯属于设计的科目,它需用把理论变为上机调试。它对我们来说具有一定的难度。它是其它编程语言的一门基本学科。我选的上机题目是交叉合并两个链表,对这个题目,我觉得很基础。刚开始调试代码的时候有时就是一个很小的错误,导致整个程序不能运行,然而开始的我还没从暑假的状态转到学习上,每当程序错误时我都非常焦躁,甚至想到了放弃,但我最终找到了状态,一步一步慢慢来,经过无数次的检查程序错误的原因后慢慢懂得了耐心是一个人成功的必然具备的条件!同时,通过此次课程设计使我了解到,硬件语言必不可缺少,要想成为一个有能力的人,必须懂得硬件基础语言。在这次课程设计中,虽然不会成功的编写一个完整的程序,但是在看程序的过程中,不断的上网查资料以及翻

温馨提示

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

评论

0/150

提交评论