欢迎访问吾小秘【www.wxiaomi.cn】,您身边的文字小秘书!

数据结构课程设计心得体会

时间:

数据结构课程设计心得体会【最新9篇】 学习数据结构中的树心得体会

  以下是会员“jiuxuncaiyongye”整理的数据结构课程设计心得体会【最新9篇】,以供借鉴。

数据结构课程设计心得体会

数据结构课程设计心得体会 篇1

  通过本次课程设计,对图的概念有了一个新的认识,在学习离散数学的时候,总觉得图是很抽象的东西,但是在学习了《数据结构与算法》这门课程之后,我慢慢地体会到了其中的奥妙,图能够在计算机中存在,首先要捕捉他有哪些具体化、数字化的信息,比如说权值、顶点个数等,这也就说明了想要把生活中的信息转化到计算机中必须用数字来完整的构成一个信息库,而图的存在,又涉及到了顶点之间的联系。图分为有向图和无向图,而无向图又是有向图在权值双向相等下的一种特例,如何能在计算机中表示一个双向权值不同的图,这就是一件很巧妙的事情,经过了思考和老师同学的帮助,我用edges[i][j]=up和edges[j][i]=up就能实现了一个双向图信息的存储。

  对整个程序而言,Dijkstra算法始终都是核心内容,其实这个算法在实际思考中并不难,也许我们谁都知道找一个路径最短的方法,及从顶点一步一步找最近的路线并与其直接距离相比较,但是,在计算机中实现这么一个很简单的想法就需要涉及到很多专业知识,为了完成设计,在前期工作中,基本都是以学习C语言为主,所以浪费了很多时间,比如说在程序中,删除顶点和增加顶点的模块中都有和建图模块相互重复的函数,但是由于技术的原因,只能做一些很累赘的函数,可见在调用知识点,我没有掌握好。

  不过,有了这次课程设计的经验和教训,我能够很清楚的对自己定一个合适的水平,而且在这次课程设计中我学会了运用两个新的函数sprintf和包涵在#include头文件中的输入函数。因为课程设计的题目是求最短路径,本来是想通过算法的实现把这个程序与交通情况相连,但是因为来不及查找各地的信息,所以,这个计划就没有实现,我相信在以后有更长时间的情况下,我会做出来的。

  1、巩固和加深了对数据结构的理解,提高综合运用本课程所学知识的能力。

  2、培养了我选用参考书,查阅手册及文献资料的能力。培养独立思考,深入研究,分析问题、解决问题的能力。

  3、通过实际编译系统的分析设计、编程调试,掌握应用软件的分析方法和工程设计方法。

  4、通过课程设计,培养了我严肃认真的工作作风,逐步建立正确的生产观念、经济观念和全局观念。

  根据我在实习中遇到得问题,我将在以后的学习过程中注意以下几点:

  1、认真上好专业实验课,多在实践中锻炼自己。

  2、写程序的过程中要考虑周到,严密。

  3、在做设计的时候要有信心,有耐心,切勿浮躁。

  4、认真的学习课本知识,掌握课本中的知识点,并在此基础上学会灵活运用。

  5、在课余时间里多写程序,熟练掌握在调试程序的过程中所遇到的常见错误,以便能节省调试程序的时间。

  这是一门纯属于设计的科目,它需用把理论变为上机调试。在学习科目的第一节课起,李老师就为我们阐述了它的重要性。它对我们来说具有一定的难度。它是其它编程语言的一门基本学科。

  刚开始学的时候确实有很多地方我很不理解,每次上课时老师都会给我们出不同的设计题目,对于我们一个初学者来说,无疑是一个具大的挑战,撞了几次壁之后,我决定静下心来,仔细去写程序。老师会给我们需要编程的内容一些讲解,顺着老师的思路,来完成自己的设计,我们可以开始运行自己的程序,可是好多处的错误让人看的可怕,还看不出到底是哪里出现了错误,但是程序还是得继续下去,我多次请教了老师和同学,逐渐能自己找出错误,并加以改正。

  TC里检查错误都是用英文来显示出来的,经过了这次课程设计,现在已经可以了解很多错误在英文里的提示,这对我来说是一个突破性的进步,眼看着一个个错误通过自己的努力在我眼前消失,觉得很是开心。此次的程序设计能够成功,是我和我的同学三个人共同努力作用的结果。在这一段努力学习的过程中,我们的编程设计有了明显的提高。

  其实现在想起来,收获还真是不少,虽然说以前非常不懂这门语言,在它上面花费了好多心血,觉得它很难,是需用花费了大量的时间编写出来的。现在真正的明白了一些代码的应用,每个程序都有一些共同点,通用的结构,相似的格式。只要努力去学习,就会灵活的去应用它。

数据结构课程设计心得体会 篇2

  本次课程设计,使我对《数据结构》这门课程有了更深入的理解。我的课程设计题目是线索二叉树的运算。刚开始做这个程序的时候,感到完全无从下手,甚至让我觉得完成这次程序设计根本就是不可能的,于是开始查阅各种资料以及参考文献,之后便开始着手写程序,写完运行时有很多问题。特别是实现线索二叉树的删除运算时很多情况没有考虑周全,经常运行出现错误,但通过同学间的帮助最终基本解决问题。

  在本课程设计中,我明白了理论与实际应用相结合的重要性,并提高了自己组织数据及编写大型程序的能力。培养了基本的、良好的程序设计技能以及合作能力。这次课程设计同样提高了我的综合运用所学知识的能力。并对VC有了更深入的了解。《数据结构》是一门实践性很强的课程,上机实习是对学生全面综合素质进行训练的一种最基本的方法,是与课堂听讲、自学和练习相辅相成的、必不可少的一个教学环节。上机实习一方面能使书本上的知识变“活”,起到深化理解和灵活掌握教学内容的目的;另一方面,上机实习是对学生软件设计的综合能力的训练,包括问题分析,总体结构设计,程序设计基本技能和技巧的训练。此外,还有更重要的一点是:机器是比任何教师更严厉的检查者。因此,在“数据结构”的学习过程中,必须严格按照老师的要求,主动地、积极地、认真地做好每一个实验,以不断提高自己的编程能力与专业素质。

  通过这段时间的课程设计,我认识到数据结构是一门比较难的课程。需要多花时间上机练习。这次的程序训练培养了我实际分析问题、编程和动手能力,使我掌握了程序设计的基本技能,提高了我适应实际,实践编程的能力。

  总的来说,这次课程设计让我获益匪浅,对数据结构也有了进一步的理解和认识。

数据结构课程设计心得体会 篇3

  通过两周的课程设计,完成了预定的目标,其中有很多的随想。老师的题目发下来的很早,大概提前了3周,当时就着手搜索有关线索二叉树的思想,思路,借了一本《数据结构-c语言描述》,在大体上就有了一个轮廓,先是输入二叉树,在对二叉树进行线索化,依次往下,但在具体实现时,遇到了很多问题:首先是思想的确定,其非常重要,以前有了这个想法,现在愈加清晰起来,因此,花了大量的时间在插入删除的具体操作设计上,大概三个晚上的时间,对其中什么不清晰明确之处均加以推敲,效果是显著的,在上机上相应的节约了时间。

  通过具体的实验编码,思路是对的,但是在小问题上摔了一次又一次,大部分时间都是花在这方面,这个节点没传过来啊之类的,以后应该搞一个小册子,记录一些错误的集合,以避免再犯,思想与C语言联系起来,才是我们所需要的,即常说的理论与实践的关系。

  数据结构是基础的一门课,对于有过编程经验的人,结合自己的编程体会去悟它的思想;而且我觉得随着编程经历的丰富对它的体会越深入,最初接触是对一些思想可能只是生硬的记忆,随着学习的深入逐渐领悟了很多。看了这次课程设计的题目,虽然具体要求没有看清,但是总结一下,可以看出,其需要我们能把一个具体案例或一件事情反映为程序来表达,数据结构就是桥梁,通过自己的设计,使应用能力得以融汇,对与问题,具有了初步的分析,继而解决之的能力,感觉对以后的学习会有很大的`帮助,学习无非是用于实践。

  认识到自己的不足,希望能有进一步的发展。

数据结构课程设计心得体会 篇4

  本次课程设计所用到的知识完全是上学期的知识,通过这次课程设计,我认识到了我对数据结构这门课的掌握程度。

  首先我这个课程设计是关于二叉树的,由于是刚接触二叉树,所以我掌握的长度并不深。在编程之前我把有关于二叉树的知识有温习了一遍,还好并没有忘掉。二叉树这章节难度中上等,而且内容广泛,所以我只掌握了百分之六七十。

  然后,在编程中我认识到了自己动手能力的不足,虽然相比较大二而言进步很大,但是我还是不满意,有的在编程中必须看书才能写出来,有的靠百度,很少是自己写的。还好,我自己组装程序的能力还行,要不这东拼西凑的程序根本组装不了。在编程中我还认识到了,编程不能停下,如果编程的时间少了,知识忘的会很快,而且动手也会很慢。同时,同学之间的合作也很重要,每个人掌握的知识都不一样,而且掌握程度也不一样,你不会的别的同学会,所以在大家的共同努力下,编程会变得很容易。在这次编程中,我了解到了自己某些方面的不足,比如说链表的知识,虽然我能做一些有关于链表的编程,但是很慢,没有别人编程的快,另外,二叉树和图的知识最不好掌握,这方面的知识广泛而复杂。以前,没动手编程的时候觉得这些知识很容易,现在编程了才发现自己错了,大错特错了,我们这个专业最重视的就是动手编程能力,如果我们纸上写作能力很强而动手编程能力很差,那我们就白上这个专业了。计算机这个专业就是锻炼动手编程能力的,一个人的理论知识再好,没有动手编程能力,那他只是一个计算机专业的“入门者”。在编程中我们能找到满足,如果我们自己编程了一个程序,我们会感到自豪,而且充实,因为如果我们专研一个难得程序,我们会达到忘我的境界,自己完全沉浸在编程的那种乐趣之中,完全会废寝忘食。编程虽然会乏味很无聊,但是只要我们沉浸其中,你就会发现里面的乐趣,遇到难得,你会勇往直前,不写出来永不罢休;遇到容易的,你会找到乐趣。编程是很乏味,但是那是因为你没找到编程重的乐趣,你只看到了他的不好,而没有看到他的好。其实,只要你找到编程中得乐趣,你就会完全喜欢上他,不编程还好,一编程你就会变成一个两耳不闻窗外事的“植物人”。可以说只要你涉及到了计算机,你就的会编程,而且还要喜欢上他,永远和他打交道,我相信在某一天,我们一定会把他当作我们不可或缺的好朋友。

  最后我要谈的是长时间编程的好处,俗话说“熟能生巧”,确实是这样。如果我们长时间不编程,在一接触他,我们会感到很陌生。有规律的编程会提高我们的动手能力,我们的思维,也会让我们变得很细心。在一个几千行的程序中,我们都能找到错误,那我们还会怕其他的错误吗?可以说编程是我们在我们这一行业的一把利剑,如果我们能很好的利用它,我们就会成为这个行业的真正成功者。也许你会说就算变成好了也不一定成功,是的,但是你不会编程就一定不会成功。如果,我们想成为这个专业的成功者,我们就得爱上编程,不管他是怎么得乏味,怎么得无聊,我们都不能丢掉他。

  总之,动手编程就是锻炼我们的动手能力,当然这个动手能力并不是科研上的动手能力,而是我们的动手编程能力,记住,只要你真正的喜欢上他,你就会发现其中的乐趣,我相信,只要你坚持下去,你一定会喜欢上他,把编程当作自己日常生活中一件必须做的事情。

数据结构课程设计心得体会 篇5

  数据结构课程设计

  1、 赫夫曼编码器

  设计一个利用赫夫曼算法的编码和译码系统,重复地显示并处理以下项目,直到选择退出为止。 要求:

  1) 将权值数据存放在数据文件(文件名为,位于执行程序的当前目录中)

  2) 初始化:键盘输入字符集大小26、26个字符和26个权值(统计一篇英文文章中26个字母),建立哈夫曼树;

  3) 编码:利用建好的哈夫曼树生成哈夫曼编码;

  4) 输出编码(首先实现屏幕输出,然后实现文件输出); 5) 界面优化设计。

  代码如下:

#include<>#include<>#include<>#include #define N 200

  typedef struct HTNode

//结构体 { int Weight;

  char ch; int Parent,Lchild,Rchild; }HTNode; typedef char * * HCode;

  void Save(int n,HTNode *HT)

//把权值保存到文件 {

  FILE * fp;

  int i;

  if((fp=fopen(“”,“wb”))==NULL)

{

  printf(“cannot open filen”);

  return;

}

  For(i=0;i

  if(fwrite(%26HT[i]。Weight,sizeof(struct HTNode),1,fp)!=1)

  printf(“file write errorn”);

  Fclose(fp);

  system(“cls”);

  printf(“保存成功!”);

}

  void CreateH(int n,int m,HTNode *HT)

//建立赫夫曼树,进行编码 {

  int w,k,j; char c; for(k=1;k<=m;k%2B%2B) {

  if(k<=n)

{

  printf(“n请输入权值和字符(用空格隔开): ”);

  scanf(“%d”,%26w);

  scanf(“ %c”,%26c); HT[k]。ch=c;

  HT[k]。Weight=w;

}

  else HT[k]。Weight=0;

  HT[k]。Parent=HT[k]。Lchild=HT[k]。Rchild=0; }

  int p1,p2,w1,w2;

  For(k=n%2B1;k<=m;k%2B%2B) {

  p1=0;p2=0;

  w1=;w2=;

  For(j=1;j<=k-1;j%2B%2B)

{

  if(HT[j]。Parent==0)

{

  if(HT[j]。Weight

{

  w2=w1;p2=p1;

  w1=HT[j]。Weight;

  p1=j;

}

  else if(HT[j]。Weight

{

  w2=HT[j]。Weight;

  p2=j;

}

}

} HT[k]。Lchild=p1;HT[k]。Rchild=p2; HT[k]。Weight=HT[p1]。Weight%2BHT[p2]。Weight;

  HT[p1]。Parent=k;HT[p2]。Parent=k;

} printf(“输入成功!”); }

  void CodingH(int n,HTNode *HT)

//对结点进行译码 { int k,sp,fp,p; char *cd; HCode HC;

  HC=(HCode)malloc((n%2B1)*sizeof(char *));

  cd=(char *)malloc(n*sizeof(char)); cd[n-1]=;

  printf(“************************n”); printf(“Char Codingn”);

  For(k=1;k<=n;k%2B%2B)

{

  sp=n-1;p=k;fp=HT[k]。Parent;

  For(;fp!=0;p=fp,fp=HT[fp]。Parent)

  if(HT[fp]。Lchild==p)

  cd[--sp]=0;

  else

  cd[--sp]=1;

  HC[k]=(char *)malloc((n-sp)*sizeof(char));

  strcpy(HC[k],%26cd[sp]);

  printf(“%c

%sn”,HT[k]。ch,HC[k]);

}

  printf(“************************n”); free(cd) ; } void Read(int n,HTNode *HT)

//从文件中读出数据 {

  int i; FILE * fp; if((fp=fopen(“”,“rb”))==NULL) {

  printf(“cannot open filen”);

  exit(0); } for(i=0;i

  Fread(%26HT[i]。Weight,sizeof(struct HTNode),1,fp); // printf(“%d n”,HT[i]。Weight);

} CodingH(n,HT);

  Fclose(fp); }

  void PrintH(int m,HTNode *HT)

//输出赫夫曼造树过程 { int k; printf(“************************n”); printf(“Num Weight

  par LCh RCh n”); for(k=1;k<=m;k%2B%2B) {

  printf(“%d ”,k);

  printf(“

%d”,HT[k]。Weight);

  printf(“

%d”,HT[k]。Parent);

  printf(“

%d”,HT[k]。Lchild);

  printf(“

%dn”,HT[k]。Rchild);

} printf(“************************n”); }

  void Decode(int m,HTNode *HT)

//对输入的电文进行译码 { int i,j=0; char a[10]; char endflag=2; i=m; printf(“输入发送的编码,以‘2’结束:”); scanf(“%s”,%26a); printf(“译码后的字符:”); while(a[j]!=2) {

  if(a[j]==0)

  i=HT[i]。Lchild;

  else i=HT[i]。Rchild;

  if(HT[i]。Lchild==0)

//HT[i]是叶结点

{

  printf(“%c”,HT[i]。ch);

  i=m;

//回到根结点

}

  j%2B%2B; } printf(“n”); if(HT[i]。Lchild!=0%26%26a[j]!=2)

  printf(“ERROR”); }

  int main()

//主函数 { int n,m,c; HTNode HT[N]; do {

  system(“color 2f”);

//运行环境背景颜色。

  printf(“nntt*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=ntt”);

  printf(“nttt 赫夫曼编译码系统 ttt”);

  printf(“nntt*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=ntt”);

  printf(“nttt1.输入权值、字母nttt2.把数据写入文件nttt3.输出赫夫曼编码表nttt”);

  printf(“4.输出赫夫曼译码表nttt5.输入编码并译码。nttt6.从文件中读出数据nttt7.退出”);

  printf(“nnttt请选择:”);

  scanf(“%d”,%26c);

  switch(c)

{

  case 1:system(“cls”);printf(“输入多少结点:”);

  scanf(“%d”,%26n);m=2*n-1;CreateH(n,m,HT);break;

  case 2:system(“cls”);Save(n,HT);break;

  case 3:system(“cls”);PrintH(m,HT);break;

  case 4:system(“cls”);CodingH(n,HT);break;

  case 5:system(“cls”);Decode(m,HT);break;

  case 6:system(“cls”);Read(n,HT);break;

  case 7:system(“cls”);exit(0);

}

}while(1); return 0; }

  运行界面如下:

  2、 学生成绩管理(链表实现) 要求:

  实现如下功能:增加、查找、删除、输出、退出。

  代码如下:

#include<>#include<>#include<>typedef struct score

//定义成绩信息结构体 {

  char Number[20]; char Name[20]; char Chinese[20]; char English[20]; char Math[20]; }score; typedef struct nodescore

//定义成绩信息链表结点,包括数据域和指针域 {

  score data; struct nodescore *next; }nodescore,*pnodescore; pnodescore headScore;//定义链表的头指针为全局变量 void PrintScore(score s) //输出信息函数 { printf(“ %10s”,); printf(“ |

%-6s”,); printf(“

  |

%-3s”,); printf(“

  |

%-3s”,);

  printf(“ |

%-3sn”,); } void View()//输出函数 {

  pnodescore pNodeScore;

  pNodeScore=headScore; printf(“

  学号

  |

  姓名

  | 语文成绩

  | 英语成绩| 高数成绩n”); while(pNodeScore != NULL) {

  printScore(pNodeScore->data);//输出学生信息和成绩信息

  pNodeScore=pNodeScore->next; } } void Add() {

  pnodescore pNodeScore; // 定义一个节点

  pNodeScore=(pnodescore)malloc(sizeof(nodescore));//为节点分配存储空间

  printf(“请输入学号:”); scanf(“%s”,pNodeScore->); printf(“请输入姓名:”); scanf(“%s”,pNodeScore->); printf(“请输入语文成绩:”); scanf(“%s”,pNodeScore->); printf(“请输入英语成绩:”); scanf(“%s”,pNodeScore->); printf(“请输入高数成绩:”); scanf(“%s”,pNodeScore->); if(headScore==NULL) { //如果头结点为空

  HeadScore=pNodeScore;

  pNodeScore->next=NULL; } else

{ //如果头结点不为空

  pNodeScore->next=headScore;

  HeadScore=pNodeScore;//将头结点新结点

} } void Input() { int n,i; printf(“输入几个学生的数据:”); scanf(“%d”,%26n); for(i=0;i

  Add(); printf(“输入成功!”); } int Delete() { pnodescore pNodeScore,p1; //p1为pNodeScore的前驱

  p1=headScore; if(p1==NULL) {

  printf(“成绩表中没有数据!请先添加数据!n”);

  return 0; } char DeleteNumber[20];

  printf(“请数入要删除的学生学号:”); scanf(“%s”,DeleteNumber); if(strcmp(p1->,DeleteNumber)==0)

{ //如果要删除的结点在第一个

  HeadScore=p1->next;

  pNodeScore=p1;

  printf(“学号为%s的学生信息已经删除!n”,DeleteNumber);

  return 0; } else

{

  pNodeScore=p1->next;

  while(pNodeScore!=NULL)

{

  if(strcmp(pNodeScore->,DeleteNumber)==0)

{

  p1->next=pNodeScore->next;

  printf(“学号为%s的学生信息已经删除!n”,DeleteNumber);

  return 0;

}

  else

{ //否则,结点向下一个,p1仍为pNodeScore的前驱

  p1=pNodeScore;

  pNodeScore=pNodeScore->next;

}

} } printf(“没有此学号的学生!”); } int Change() {

  pnodescore pNodeScore;

  pNodeScore=headScore; if(pNodeScore==NULL) {

  printf(“成绩表中没有数据!请先添加数据!n”);

  return 0; } char EditNumber[20]; printf(“请输入你要修改的学生学号:”); scanf(“%s”,EditNumber); while(pNodeScore!=NULL) {

  if(strcmp(pNodeScore->,EditNumber)==0)

{ //用strcmp比较两字符串是否相等,相等则返回0

  printf(“原来的学生成绩信息如下:n”); //输出原来的成绩信息

  printf(“

  学号

  |

  姓名

  | 语文成绩

  | 英语成绩| 高数成绩n”);

  printScore(pNodeScore->data);

  printf(“语文新成绩:”);

  scanf(“%s”,pNodeScore->);

  printf(“英语新成绩:”);

  scanf(“%s”,pNodeScore->;

  printf(“高数新成绩:”);

  scanf(“%s”,pNodeScore->);

  printf(“成绩已经修改!”);

  return 0;

}

  pNodeScore=pNodeScore->next; //如果不相等,pNodeScore则指向下一个结点

} printf(“没有此学号的学生!n”); //如果找到最后都没有,则输出没有此学号的学生

} int Find() {

  pnodescore pNodeScore;

  pNodeScore=headScore; if(pNodeScore==NULL) {

  printf(“成绩表中没有数据!请先添加数据!n”);

  return 0; } char FindNumber[20]; printf(“请输入你要查找的学生学号:”); scanf(“%s”,FindNumber); while(pNodeScore!=NULL) {

  if(strcmp(pNodeScore->,FindNumber)==0)

{

  printf(“你要查找的学生成绩信息如下:n”);

  printf(“

  学号

  |

  姓名

  | 语文成绩

  | 英语成绩| 高数成绩n”);

  printScore(pNodeScore->data);

  return 0;

}

  pNodeScore=pNodeScore->next; } printf(“没有此学号的学生!n”); } int main()

//主函数 { int choice=0; headScore=NULL; int c; do {

  system(“color 2f”);

//运行环境背景颜色。

  printf(“nntt*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=ntt”);

  printf(“nttt 学生成绩管理系统 ttt”);

  printf(“nntt*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=ntt”);

  printf(“nttt1.输入成绩信息nttt2.输出成绩信息nttt3.添加成绩信息nttt”);

  printf(“4.修改成绩信息nttt5.删除成绩信息nttt6.查询成绩信息nttt7.退出”);

  printf(“nnttt请选择:”);

  scanf(“%d”,%26c);

  switch(c)

{

  case 1:system(“cls”);Input();break;

  case 2:system(“cls”);View();break;

  case 3:system(“cls”);Add();break;

  case 4:system(“cls”);Change();break;

  case 5:system(“cls”);Delete();break;

  case 6:system(“cls”);Find();break;

  case 7:system(“cls”);exit(0);

}

}while(1); return 0; }

  运行界面如下:

数据结构课程设计心得体会 篇6

  通过两周的课程设计,完成了预定的目标,其中有很多的随想。老师的题目发下来的很早,大概提前了3周,当时就着手搜索有关线索二叉树的思想,思路,借了一本《数据结构-c语言描述》,在大体上就有了一个轮廓,先是输入二叉树,在对二叉树进行线索化,依次往下,但在具体实现时,遇到了很多问题:首先是思想的确定,其非常重要,以前有了这个想法,现在愈加清晰起来,因此,花了大量的时间在插入删除的具体操作设计上,大概三个晚上的时间,对其中什么不清晰明确之处均加以推敲,效果是显著的,在上机上相应的节约了时间。

  通过具体的实验编码,思路是对的,但是在小问题上摔了一次又一次,大部分时间都是花在这方面,这个节点没传过来啊之类的,以后应该搞一个小册子,记录一些错误的集合,以避免再犯,思想与C语言联系起来,才是我们所需要的,即常说的.理论与实践的关系。

  数据结构是基础的一门课,对于有过编程经验的人,结合自己的编程体会去悟它的思想;而且我觉得随着编程经历的丰富对它的体会越深入,最初接触是对一些思想可能只是生硬的记忆,随着学习的深入逐渐领悟了很多。看了这次课程设计的题目,虽然具体要求没有看清,但是总结一下,可以看出,其需要我们能把一个具体案例或一件事情反映为程序来表达,数据结构就是桥梁,通过自己的设计,使应用能力得以融汇,对与问题,具有了初步的分析,继而解决之的能力,感觉对以后的学习会有很大的帮助,学习无非是用于实践。

  认识到自己的不足,希望能有进一步的发展。

数据结构课程设计心得体会 篇7

  “数据结构与算法课程设计”是计算机科学与技术专业学生的集中实践性环节之一,是学习“数据结构与算法”理论和实验课程后进行的一次全面的综合练习。其目的是要达到理论与实际应用相结合,提高学生组织数据及编写程序的能力,使学生能够根据问题要求和数据对象的特性,学会数据组织的方法,把现实世界中的实际问题在计算机内部表示出来并用软件解决问题,培养良好的程序设计技能。

  当初拿到这次课程设计题目时,似乎无从下手,但是经过分析可知,对于简单文本编辑器来说功能有限,不外乎创作文本、显示文本、统计文本中字母—数字—空格—特殊字符—文本总字数、查找、删除及插入这几项功能。于是,我进行分模块进行编写程序。虽然每个模块程序并不大,但是每个模块都要经过一番思考才能搞清其算法思想,只要有了算法思想,再加上C程序语言基础,基本完成功能,但是,每个模块不可能一次完成而没有一点错误,所以,我给自己定了一个初级目标:用C语言大体描述每个算法,然后经调试后改掉其中明显的错误,并且根据调试结果改正一些算法错误,当然,这一目标实现较难。最后,经过反复思考,看一下程序是否很完善,如果能够达到更完善当然最好。并非我们最初想到的算法就是最好的算法,所以,有事我们会而不得不在编写途中终止换用其他算法,但是,我认为这不是浪费时间,而是一种认识过程,在编写程序中遇到的问题会为我们以后编写程序积累经验,避免再犯同样的错误。但是,有的方法不适用于这个程序,或许会适用于另外一个程序。所以,探索的过程是成长的过程,是为成功做的铺垫。经过努力后获得成功,会更有成就感。

  在课程设计过程中通过独立解决问题,首先分析设计题目中涉及到的数据类型,在我们学习的数据存储结构中不外乎线性存储结构及非线性存储结构,非线性存储结构中有树型,集合型,图型等存储结构,根据数据类型设计数据结点类型。然后根据设计题目的主要任务,设计出程序大体轮廓(包括子函数和主函数),然后对每个子函数进行大体设计,过程中错误在所难免,所以要经过仔细探索,对每个函数进行改进。

  程序基本完成后,功能虽然齐全,但是程序是否完善(例如,输入数据时是否在其范围之内,所以加入判断语句是很有必要的)还需运行测试多次,如有发现应该对其进行改善,当然要在力所能及的前提下。

  课程设计过程虽然短暂,但是使我深刻理解数据结构和算法课程对编程的重要作用,还有“数据结构与算法”还提供了一些常用的基本算法思想及算法的编写程序。通过独立完成设计题目,使我系统了解编程的基本步骤,提高分析和解决实际问题的能力。通过实践积累经验,才能有所创新。正所谓,良好的基础决定上层建筑。只有基本功做好了,才有可能做出更好的成果。

数据结构课程设计心得体会 篇8

  完成了这次的二元多项式加减运算问题的课程设计后,我的心得体会很多,细细梳理一下,有以下几点:

  1、程序的编写中的语法错误及修改

  因为我在解决二元多项式问题中,使用了链表的方式建立的二元多项式,所以程序的空间是动态的生成的,而且链表可以灵活地添加或删除结点,所以使得程序得到简化。但是出现的语法问题主要在于子函数和变量的定义,降序排序,关键字和函数名称的书写,以及一些库函数的规范使用,这些问题均可以根据编译器的警告提示,对应的将其解决。

  2、程序的设计中的逻辑问题及其调整

  我在设计程序的过程中遇到许多问题,首先在选择数据结构的时候选择了链表,但是链表的排序比较困难,特别是在多关键字的情况下,在一种关键字确定了顺序以后,在第一关键字相同的时候,按某种顺序对第二关键字进行排序。在此程序中共涉及到3个量数,即:系数,x的指数和y的指数,而关键字排是按x的指数和y的指数来看,由于要求是降幂排序且含有2个关键字,所以我先选择x的指数作为第一关键字,先按x的降序来排序,当x的指数相同时,再以y为关键字,按照y的指数大小来进行降序排列。

  另外,我在加法函数的`编写过程中也遇到了大量的问题,由于要同时比较多个关键字,而且设计中涉及了数组和链表的综合运用,导致反复修改了很长的时间才完成了一个加法的设计。但是,现在仍然有一个问题存在:若以0为系数的项是首项则显示含有此项,但是运算后则自动消除此项,这样是正确的。但是当其不是首项的时候,加法函数在显示的时候有0为系数的项时,0前边不显示符号,当然,这样也可以理解成当系数为0时,忽略这一项。这也是本程序中一个不完美的地方。

  我在设计减法函数的时候由于考虑不够充分就直接编写程序,走了很多弯路,不得不停下来仔细研究算法,后来发现由于前边的加法函数完全适用于减法,只不过是将二元多项式B的所有项取负再用加法函数即可,可见算法的重要性不低于程序本身。

  3、程序的调试中的经验及体会

  我在调试过程中,发生了许多小细节上的问题,它们提醒了自己在以后编程的时候要注意细节,即使是一个括号的遗漏或者一个字符的误写都会造成大量的错误,浪费许多时间去寻找并修改,总结的教训就是写程序的时候,一定要仔细、认真、专注。

  我还有一个很深的体会就是格式和注释,由于平时不注意格式和注释这方面的要求,导致有的时候在检查和调试的时候很不方便。有的时候甚至刚刚完成一部分的编辑,结果一不注意,就忘记了这一部分程序的功能。修改的时候也有不小心误删的情况出现。如果注意格式风格,并且养成随手加注释的习惯,就能减少这些不必要的反复和波折。还有一点,就是在修改的时候,要注意修改前后的不同点在哪里,改后调试结果要在原有的基础上更加精确。

数据结构课程设计心得体会 篇9

  完成了这次的二元多项式加减运算问题的课程设计后,我的心得体会很多,细细梳理一下,有以下几点:

  1、程序的编写中的语法错误及修改

  因为我在解决二元多项式问题中,使用了链表的方式建立的二元多项式,所以程序的空间是动态的生成的,而且链表可以灵活地添加或删除结点,所以使得程序得到简化。但是出现的语法问题主要在于子函数和变量的定义,降序排序,关键字和函数名称的书写,以及一些库函数的规范使用,这些问题均可以根据编译器的警告提示,对应的将其解决。

  2、程序的设计中的逻辑问题及其调整

  我在设计程序的过程中遇到许多问题,首先在选择数据结构的时候选择了链表,但是链表的排序比较困难,特别是在多关键字的情况下,在一种关键字确定了顺序以后,在第一关键字相同的时候,按某种顺序对第二关键字进行排序。在此程序中共涉及到3个量数,即:系数,x的指数和y的指数,而关键字排是按x的指数和y的指数来看,由于要求是降幂排序且含有2个关键字,所以我先选择x的指数作为第一关键字,先按x的降序来排序,当x的指数相同时,再以y为关键字,按照y的指数大小来进行降序排列。

  另外,我在加法函数的编写过程中也遇到了大量的问题,由于要同时比较多个关键字,而且设计中涉及了数组和链表的综合运用,导致反复修改了很长的时间才完成了一个加法的设计。但是,现在仍然有一个问题存在:若以0为系数的项是首项则显示含有此项,但是运算后则自动消除此项,这样是正确的。但是当其不是首项的时候,加法函数在显示的时候有0为系数的项时,0前边不显示符号,当然,这样也可以理解成当系数为0时,忽略这一项。这也是本程序中一个不完美的地方。

  我在设计减法函数的时候由于考虑不够充分就直接编写程序,走了很多弯路,不得不停下来仔细研究算法,后来发现由于前边的加法函数完全适用于减法,只不过是将二元多项式B的所有项取负再用加法函数即可,可见算法的重要性不低于程序本身。

  3、程序的调试中的经验及体会

  我在调试过程中,发生了许多小细节上的问题,它们提醒了自己在以后编程的时候要注意细节,即使是一个括号的遗漏或者一个字符的误写都会造成大量的错误,浪费许多时间去寻找并修改,总结的教训就是写程序的时候,一定要仔细、认真、专注。

  我还有一个很深的体会就是格式和注释,由于平时不注意格式和注释这方面的要求,导致有的时候在检查和调试的时候很不方便。有的时候甚至刚刚完成一部分的编辑,结果一不注意,就忘记了这一部分程序的功能。修改的时候也有不小心误删的情况出现。如果注意格式风格,并且养成随手加注释的习惯,就能减少这些不必要的反复和波折。还有一点,就是在修改的时候,要注意修改前后的不同点在哪里,改后调试结果要在原有的基础上更加精确。

数据结构课程设计心得体会【最新9篇】 学习数据结构中的树心得体会

将本文的Word文档下载到电脑,方便收藏
推荐度:
点击下载文档文档为doc格式