数据结构 课程设计 报告新的体会
在本次的课程设计中,我遇到了好多问题,期间我苦苦思考了好长时间,去解决我遇到的每个问题,感觉问题就是一串一串的,解决一个下一个就会在那等着,就像登山一样,越来越累但风景却越来越好。承认这学期我的学习没有用心,尤其是数据结构,根本是听得一知半解,在做课程设计之前,我对双向链表根本就是不知道更别提做设计了。我之前没敢想,因为我不会,因为我不知道我的人生会走向哪里,没有前进的动力和方向。真正做起来,才发现自己到大学了,学的竟然是那么少,连结构体的操作都那么陌生,面对比这样一个问题,开始的前四天我基本上都在看以前的C语言,数据结构书籍。我不想再样混沌下去,我需要的是走出自己,好好把握自己,我没有放弃,没有被困难吓到,以前就是以前了,现在我要好好的,认真的对待我的人生。
我从简单的单向链表开始建立,再慢慢构建起双向链表,之后对其赋值,建立起一个能够插入,删除,操作的测试程序,发现只要认真去学,没有什么不可克服的困难,就这样一个一个问题的解决,慢慢我发现自己的程序慢慢壮大,一天一个进步,不断完善程序,根本没想到我也能写出一个将近700行的程序,心中又是激动又是感觉自己必须要更加努力,努力让自己更好。
出错的时候我也很烦,因为知识少不知道错在哪里,但慢慢的我不断看到自己程序从不能运行到出现完美结果,记得好几次都是想问题想得头痛,但我还是坚持了下来,看到了我的成果。
事情只有自己经历过才来的彻底,来的深刻,程序实践性很强,我还是动手少,思考少,通过本次课程设计,我学到了很多很多,也感悟了很多,我会好好改变自己当前的状态,以饱满的热情去迎接明天的挑战,努力为未来
通过这次数据结构课程设计的实验,在解决问题的过程中,充分体会到了数据结构这门课程对于软件设计的重要性,也体会到了数据结构+算法=程序这句话的真正含义,一个实际问题的解决第一步就是要依赖于良好的抽象思维的,将实际问题转化为相应的数据结构,只有这一步做好了,才能采取相应的算法和优化方法解决问题和解决好问题。
扩展阅读:数据结构课程设计 实验报告 心得体会 链表 C语言
数据结
构课程设计
设计题目:两个链表的交叉合并
专业班级:08软件工程3班姓名:xxxxxx学号:080107031123设计时间:201*/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链表开始
CreatB链表Mergel(A,B)交叉合并成对C排序生成D提示输入0或1cmd=0cmd=1错误输入
输入将要操作的链表的名字输入将要操作的链表的名字Cmderror正确错误正确错误删除,打印Nameerror删除,打印Nameerror打印“over”结束
四、算法设计分析
这个两个链表的交叉合并算法主要运用到的是链表的基本操作,定义节点,将链表的创建、计算链表的长度、链表A,B的交叉组合、链表内容升序排列、删除链表指定位置元素、删除指定的元素等算法写成了独立函数,通过主函数调用。这样就大大精简了主函数的操作。但主函数中很大篇幅用到了if、else语句,用以指定链表指定结点和指定元素的删除操作,这样就使得本来很精简变得繁琐,降低了程序的质量。所以其有优点和缺点,但需要不断的改进,不断优化该程序。
五、源代码程序源代码:
#include#include
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(mnext;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->datadata)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(indexnext=p->next;}
else
printf("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语言知识,让我的水平又一部的提高。数据结构这是一门纯属于设计的科目,它需用把理论变为上机调试。它对我们来说具有一定的难度。它是其它编程语言的一门基本学科。
我选的上机题目是交叉合并两个链表,对这个题目,我觉得很基础。刚开始调试代码的时候有时就是一个很小的错误,导致整个程序不能运行,然而开始的我还没从暑假的状态转到学习上,每当程序错误时我都非常焦躁,甚至想到了放弃,但我最终找到了状态,一步一步慢慢来,经过无数次的检查程序错误的原因后慢慢懂得了耐心是一个人成功的必然具备的条件!同时,通过此次课程设计使我了解到,硬件语言必不可缺少,要想成为一个有能力的人,必须懂得硬件基础语言。在这次课程设计中,虽然不会成功的编写一个完整的程序,但是在看程序的过程中,不断的上网查资料以及翻阅相关书籍,通过不断的模索,测试,发现问题,解
决问题和在老师的帮助下一步一步慢慢的正确运行程序,终于完成了这次课程设计,虽然这次课程设计结束了但是总觉得自已懂得的知识很是不足,学无止境,以后还会更加的努力深入的学习。
专业班级:08软件工程3班
学号:080107031123
姓名:彭德伟
201*/9/25
友情提示:本文中关于《数据结构 课程设计 报告新的体会》给出的范例仅供您参考拓展思维使用,数据结构 课程设计 报告新的体会:该篇文章建议您自主创作。
来源:网络整理 免责声明:本文仅限学习分享,如产生版权问题,请联系我们及时删除。
《数据结构 课程设计 报告新的体会》
由互联网用户整理提供,转载分享请保留原作者信息,谢谢!
http://m.bsmz.net/gongwen/689777.html
- 上一篇:幕墙设计师
- 下一篇:单元式幕墙防水构造设计要点