数据结构期末总结范文通用10篇

山崖发表网范文2022-09-25 10:27:35266

数据结构期末总结范文 第一篇

- 将待排序的序列分到若干个桶中,每个桶内的元素再进行个别排序。 - 时间复杂度最好可能是线性O(n),桶排序不是基于比较的排序

参考:桶排序 总结来说:当键的值的范围N与序列大小n相比很小时,桶排序是高效的,但是N相比于n开始增大时,性能降低。

稳定排序:对于S中任意两个条目(ki, vi), (kj, vj),ki = kj, 排序前和排序后相对位置不变 基数排序:很简单,通俗来说就是为了保持稳定性,每一项都进行稳定排序,得到的结果很自然。如先按第二项稳定排序再对第一项,得到的结果就是第一项相等的情况下,第二项递增。

数据结构期末总结范文 第二篇

定义:允许添加元素,且对总体大小没有明显的限制 增减规则:当数组已满时,创建新数组是原数组的两倍,并将原数组元素存入;当实际元素个数小于数组大小的1/4,创建新数组是原数组的1/2,并将原数组元素存入。

摊销:通过增加某些操作的投入,来减少其他操作所需的代价,来达到整体平均的目的

分析append()时间复杂度:设动态数组从k增大到2k需要k个硬币,而我们将每个操作索取三个硬币,对不需要扩大数组的增添操作多付了两枚,我们将多收的两枚视为存入,则从k/2增长到k的过程中预留了k个硬币,正好供给我们进行从旧数组到新数组复制所需的k个硬币,综上,我们进行了k/2次append()共花费3k/2枚硬币,即每个append()操作的时间复杂度为O(1)

例题:在动态数组中调用append()时,增幅由100%调整为25%,能否证明append()的复杂度为O(1) 设原数组为k,增幅25%,则新数组为,设一次append()存储n枚硬币,增添元素消耗一枚,每次增幅后每个存储一枚 则:(n-1) = 解得:n=6 即O(6n) 所以每次操作为O(1)

头哨兵(header)和尾哨兵(tailer):占用极小的空间极大地简化操作地逻辑

数据结构期末总结范文 第三篇

树是由N个结点组成的有限集合,且只有一个结点是树的根结点,其余结点不相交。

树的逻辑表达方法:树形表示法、文氏图表示法、凹入表示法、括号表示法。

1、结点的度与树的度:树中某个结点的子树的个数称为该结点的度,树中所有结点的度中最大的为树的度。

2、分支结点与叶子结点:度为0的是叶子结点,度为1的为单支结点、度为2的为双分支结点

3、路径长度是该路径所通过的结点数目减1

4、孩子结点、双亲结点、兄弟结点

5、结点层次(从树根开始定义),树中结点最大的层次称为树的高度或树的深度

6、有序树和无序树

7、森林:n个互不相交的树称为森林,把多个子树的根去掉就是森林

数据结构期末总结范文 第四篇

分离链表: 使每个桶A[j]存储其自身的二级容器,容器存储元组(k, v),如h(k) = j 负载因子lambda < 开放寻址: 我们采用将每个元组直接存储到一个小的列表插槽中作为代替的方法,节省空间 负载因子lambda < (python中为2/3 ) 线性探测及其变种: 线性探测: 是使用开放寻址处理冲突的一个简单方法是线性探测。使用这种方法时,如果我们想要将一个元组(k, v)插入桶A[j]的位置,在这里j = h(k),但是A[j]被占用,那么我们将尝试使用A[(j+i) mod N],以此重复操作。对于删除操作,我们不能简单地从插槽中移除,因为如果简单移除,随后搜寻原来插入的位置会失败(该位置在删除位置之后),一个典型办法是用一个带标记的特殊对象来代替被删除的对象。

二次探测: 反复探测A[(h(k)+f(i)) mod N] 其中f(i) = i^2,它可以避免在线性探测中发生的聚集模式,而且还创建了自己的聚集方法:二次聚集。当N是素数且桶数组填充了不到一半时,二次探测保证可以找到空闲位置。但是当N不是素数且桶数组填充超过一半时,二次探测无法保证找到空闲位置

双哈希策略: 一种不会引起线性探测和二次探测所引起的聚集问题的策略,迭代探测桶A[(h(k) + f(i)) mod N] f(i) = i * h’(k), h’(k) 为二次哈希函数。

另一种避免聚集的开放寻址是迭代地探测桶A[(h(k) + f(i)) mod N],f(i)是一个基于伪随机数产生器的函数

这个数据结构允许我们以对数时间复杂度来实现插入和删除操作

数据结构期末总结范文 第五篇

数据结构心得体会

【篇1:数据结构学习总结】

数据结构学习总结

通过一学期对《数据结构与算法》的学习,大概的了解了基本的数据结构和相应的一些算法。下面总结一下自己一个学期学习的收获和心得。 数据结构是什么:

数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。数据结构往往同高效的检索算法和索引技术有关。 数据结构重要性:

一般认为,一个数据结构是由数据元素依据某种逻辑联系组织起来的。对数据元素间逻辑关系的描述称为数据的逻辑结构;数据必须在计算机内存储,数据的存储结构是数据结构的实现形式,是其在计算机内的表示;此外讨论一个数据结构必须同时讨论在该类数据上执行的运算才有意义。一个逻辑数据结构可以有多种存储结构,且各种存储结构影响数据处理的效率。在许多类型的程序的设计中,数据结构的选择是一个基本的设计考虑因素。许多大型系统的构造经验表明,系统实现的困难程度和系统构造的质量都严重的依赖于是否选择了最优的数据结构。许多时候,确定了数据结构后,算法就容易得到了。有些时候事情也会反过来,我们根据特定算法来选择数据结构与之适应。不论哪种情况,选择合适的数据结构都是非常重要的。选择了数据结构,算法也随之确定,是数据而不是算法是系统构造的关键因素。这种洞见导致了许多种软件设计方法和程序设计语言的出现,面向对象的程序设计语言就是其中之一。

常见的数据结构: 1.顺序表:

定义:顺序表是在计算机内存中以数组的形式保存的线性表,是指用一组地址连续的存储单元依次存储数据元素的线性结构。线性表采用顺序存储的方式存储就称之为顺序表。顺序表是将表中的结点依次存放在计算机内存中一组地址连续的存储单元中。

基本运算:

置表空:sqlsetnull(l)判表满:sqlempty(l)

求表长:sqllength(l)插入:sqlinsert(l,i,x) 按序号取元素:sqlget(l,i) 删除:sqldelete(l,i) 按值查找:sqllocate(l,x) 2.链表

定义:链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。 相比于线性表顺序结构,链表比较方便插入和删除操作。 分类:单链表—用一组地址任意的存储单元存放线性表中的数据元素。

循环链表—循环链表是另一种形式的链式存贮结构。它的特点是表中最后一个结点的指针域指向头结点,整个链表形成一个环。 基本运算:建立链表,插入节点,删除节点。 3.堆栈

定义:堆栈都是一种数据项按序排列的数据结构,只能在一端(称为栈顶(top))对数据项进行插入和删除。要点:堆:顺序随意栈:后进先出(last-in/first-out)。

基本算法:

置空栈:initstack(s)判栈空:stackempty(s)

判栈满:stackfull(s)取栈顶元素:gettop(s)

入栈:push(s) 出栈:pop(s) 4.队列

定义:队列是一种特殊的线性表,它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列中没有元素时,称为空队列。在队列这种数据结构中,最先插入的元素将是最先被删除的元素;反之最后插入的元素将最后被删除的元素,因此队列又称为“先进先出”(fifo—first in first out)的线性表。

分类:顺序队列;链队;

基本运算:初始化队列 qini (q)入队 qadd(q,x)

出队 qdel(q,x)判断队列是否为qempty(q)

判断队列是否为满qfull(q) 5.特殊矩阵

分类:对阵矩阵;三角矩阵;稀疏矩阵; 6.二叉树 定义:二叉树是每个节点最多有两个子树的有序树。通常子树被称作“左子树”(left subtree)和“右子树”(right subtree)。二叉树的每个结点至多只有二棵子树(不存在度大于2的结点),二叉树的子树有左右之分,次序不能颠倒。二叉树的第i层至多有2的 i -1次方个结点;深度为k的二叉树至多有2^(k) -1个结点;对任何一棵二叉树t,如果其终端结点数(即叶子结点数)为n0,度为2的结点数为n2,则n0 = n2 + 1。

(1)完全二叉树——若设二叉树的高度为h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第 h 层有叶子节点,并且叶子节点都是从左到右依次排布,这就是完全二叉树。

(2)满二叉树——除了叶结点外每一个结点都有左右子叶且叶结点都处在最底层的二叉树,。

(3)深度——二叉树的层数,就是高度。

性质:

(1) 在二叉树中,第i层的结点总数不超过2^(i-1);

(2) 深度为h的二叉树最多有2^h-1个结点(h=1),最少有h个结点; (3) 对于任意一棵二叉树,如果其叶结点数为n0,而度数为2的结点总数为n2,则n0=n2+1;

(4) 具有n个结点的完全二叉树的深度为int(log2n)+1

(5)有n个结点的完全二叉树各结点如果用顺序方式存储,则结点之间有如下关系: 若i为结点编号则 如果i1,则其父结点的编号为i/2;如果2*i=n,则其左儿子(即左子树的根结点)的编号为2*i;若2*in,则无左

儿子;如果2*i+1=n,则其右儿子的结点编号为2*i+1;若2*i+1n,则无右儿子。

(6)给定n个节点,能构成h(n)种不同的二叉树。h(n)为卡特兰数的第n项。h(n)=c(n,2*n)/(n+1)。

(7)设有i个枝点,i为所有枝点的道路长度总和,j为叶的道路长度总和j=i+2i。

二叉树遍历:

遍历是对树的一种最基本的运算,所谓遍历二叉树,就是按一定的规则和顺序走遍二叉树的所有结点,使每一个结点都被访问一次,而且只被访问一次。由于二叉树是非线性结构,因此,树的遍历实质上是将二叉树的各个结点转换成为一个线性序列来表示。 设l、d、r分别表示遍历左子树、访问根结点和遍历右子树, 则对一棵二叉树的遍历有三种情况:dlr(称为先根次序遍历),ldr(称为中根次序遍历),lrd (称为后根次序遍历)。

(1)前序遍历 访问根;按前序遍历左子树;按前序遍历右子树 (2)中序遍历按中序遍历左子树;访问根;按中序遍历右子树 (3)后序遍历 按后序遍历左子树;按后序遍历右子树;访问根

(4)层次遍历 即按照层次访问,通常用队列来做。访问根,访问子女,再访问子女的子女(越往后的层次越低)(两个子女的级别相同)。 7.散列

定义:若结构中存在和关键字k相等的记录,则必定在f(k)的存储位置上。由此,不需比较便可直接取得所查记录。称这个对应关系f为散列函数(hash function),按这个思想建立的表为散列表。

散列函数:直接定址法;除留余数法;数字分析法;平方取中法;折叠法。 冲突处理方法:开放地址法(线性探测再散列,二次探测再散列,伪随机探测再散列) 链地址法。 8.图

定义:一种较线性表和树更为复杂的数据结构。 存储结构:邻接矩阵;邻接表;逆邻接表;十字链表;邻接多重表。 图的遍历:

深度优先遍历:深度优先遍历的思想类似于树的先序遍历。其遍历过程可以描述为:从图中某个顶点v出发,访问该顶点,然后依次从v的未被访问的邻接点出发继续深度优先遍历图中的其余顶点,直至图中所有与v有路径相通的顶点都被访问完为止。

广度优先遍历:对图的广度优先遍历方法描述为:从图中某个顶点v出发,在访问该顶点v之后,依次访问v的所有未被访问过的邻接点,然后再访问每个邻接点的邻接点,且访问顺序应保持先被访问的顶点其邻接点也优先被访问,直到图中的所有顶点都被访问为止。下面是对一个无向图进行广度优先遍历的过程。

查找算法

1.顺序查找:在一个已知无(或有序)序队列中找出与给定关键字相同的数的具体位置。原理是让关键字与队列中的数从第一个开始逐个比较,直到找出与给定关键字相同的数为止。

2.折半查找:首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位 置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。

3.分块查找:先选取各块中的最大关键字构成一个索引表;查找分两个部

分:先对索引表进行二分查找或顺序查找,以确定待查记录在哪一块中;然后,在已确定的块中用顺序法进行查找。 4.二叉排序树:

定义:二叉排序树(binary sort tree)又称二叉查找树。 它或者是一棵空树;或者是具有下列性质的二叉树:(1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值;(2)若右子树不空,则右子树上所有结点的值均大于它的根结点的值;(3)左、右子树也分别为二叉排序树;

查找:若根结点的关键字值等于查找的关键字,成功。否则,若小于根结点的关键字值,递归查左子树。若大于根结点的关键字值,递归查右子树。若子树为空,查找不成功。

排序算法:

1.直接插入排序:插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,算法适用于少量数据的排序,时间复杂度为o(n^2)。是稳定的排序方法。插入算法把要排序的数组分成两部分:第一部分包含了这个数组的所有元素,但将最后一个元素除外,而第二部分就只包含这一个元素。在第一部分排序后,再把这个最后元素插入到此刻已是有序的第一部分里的位置。

2.希尔排序:先取一个小于n的整数d1作为第一个增量,把文件的全部记录分成d1个组。所有距离为d1的倍数的记录放在同一个组中。先在各组内进行直接插入排序;然后,取第二个增量d2d1重复上述的分组和排序,直至所取的增量dt=1(dtdt-l?d2d1),即所有记录放在同一组中进行直接插入排序为止。

3.冒泡排序:依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。至此第一趟结束,将最大的数放到了最后。在第二趟:仍从第一对数开始比较(因为可能由于第2个数和第3个数的交换,使得第1个数不再小于第2个数),将小数放前,大数放后,一直比较到倒数第二个数(倒数第一的位置上已经是最大的),第二趟结束,在倒数第二的位置上得到一个新的最大数(其实在整个数列中是第二大的数)。如此下去,重复以上过程,直至最终完成排序。 4.快速排序:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对 这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。

5.直接选择排序:第一次从r[0]~r[n-1]中选取最小值,与r[0]交换,第二次从r{1}~r[n-1]中选取最小值,与r[1]交换,....第i次从r[i-1]~r[n-1]中选取最小值,与r[i-1]交换.....第n-1次从r[n-2]~r[n-1]中选取最小值,与r[n-2]交换,总共通过n-1次,得到一个按排序码从小到大排列的有序序列。

6.归并排序:申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列;设定两个指针,最初位置分别为两个已经排序序列的起始位置;比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置;重复直到某一指针达到序列尾;另一序列剩下的所有元素直接复制到合并序列尾。

数据结构期末总结范文 第六篇

做了一个星期的程序设计终于做完了,在这次程序设计课中,真是让我获益匪浅,我突然发现写程序还挺有意思的。

由于上学期的C语言跟这学期的数据结构都算不上真正的懂,对于书上的稍微难点的知识就是是而非的,所以我只是对老师的程序理解,我也试着去改变了一些变量,自己也尽量多的去理解老师做程序的思路。当我第一天坐在那里的时候,我就不知道该做些什么,后来我只有下来自己看了一遍书来熟悉下以前学过的知识。

通过这次的程序设计,发现一个程序设计就是算法与数据结构的结合体,自己也开始对程序产生了前所未有的兴趣,以前偷工减料的学习也不可能一下子写出一个程序出来,于是我就认真看老师写的程序,发现我们看懂了一个程序其实不难,难的是对于一个程序的思想的理解,我们要掌握一个算法,不仅仅限于读懂,主要的是要理解老师的思路,学习老师的解决问题的方法。

这次试验中,我发现书本上的知识是一个基础,但是我基础都没掌握,更别说写出一个整整的程序了。自己在写程序的时候,也发现自己的知识太少了,特别是基础知识很多都是模模糊糊的一个概念,没有落实到真正的程序,所以自己写的时候也感到万分痛苦,基本上涉及一个知识我就会去看看书,对于书本上的知识没掌握好。在饭后闲暇时间我也总结了一下,自己以前上课也认真的听了,但是还是写不出来,这主要归结于自己的练习太少了,而且也总是半懂就不管了。在改写老师的程序中也出现了很多的问题,不断的修改就是不断的学习过程,当我们全身心的投入其中时,实际上是一件很有乐趣的事情。对于以后的学习有了几点总结:第一、熟记各种数据结构类型,定义、特点、基本运算(分开点一点也没多少东西,难度不大,但是基本);第二、各种常用的排序算法,如冒泡排序、堆排序……,这些是必考的内容,分数不会少于20%;第三,多做习题,看题型,针对题型来有选择复习;数据结构看上去很复杂,但你静下心来把书扫上几遍,分解各个知识点,这一下来,学数据结构的思路就会很清晰了。

数据结构期末总结范文 第七篇

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

在这次课程设计当中,我了解到了我的不足,如算法的不完善、不细心和耐心不是很好等等。不细心的我在调试程序时,老是因为某个书写错误导致错误;对这些错误,我不得不花大量的时间去更正,并且还要重复检查是否出现雷同的错误而导致程序不能运行。但是通过这次课程设计,我的这些缺点有些改善。我在写新的程序时,首先要考虑的深入一点、仔细一点,这样要修改程序的时间就会少很多。并且也不会因为自己不细心而导致的浪费时间的情况出现。

在进行程序设计时,要注意想好思路。即要有恰当模块名、变量名、常量名、子程序名等。将每个功能的模块,即函数名要清晰的表述出来,使用户能够一目了然此程序的功能。当然适当的给写注释,也是方便用户的理解。还有在编写程序时要注意对程序的适当分配,便于用户看懂程序,也便于自己检查城市。但是完成任何一个较大的程序,都需要掌握一定的编程基础,需要不断的探索和求知过程,这样对自己编程能力的提高有较大的帮助。当然,任何程序必须经过计算机的调试,看是否调试成功,发现错误,一个个,一步步去解决,这样就能从错误中进步。

通过课程设计加强了我的动手能力,以及提升了局部和统一考虑问题的思维方式。回顾起此次课程设计,至今我仍感慨颇多,的确,从从拿到题目到完成整个编程,从理论到实践,在整整半个月的日子里,可以学到很多很多的的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,比如说结构体通过这次课程设计之后,一定把以前所学过的知识重新温故。

通过这次的课程设计,我学到了怎么样从一个实际问题出发,建立模型,找到相应的存储结构和实现方法,实际运行,反复调试和修改,最终实现功能。在程序设计方法以及上机操作等基本技能和科学作风方面受到比较系统和严格的训练,学会数据组织的方法,把现实世界中的实际问题在计算机内部表示出来并用软件解决问题,培养了良好的程序设计技能。

在这次课程设计中,得到了好多同学的帮助以及老师的指导,在此要表达我真诚的谢意!

数据结构期末总结范文 第八篇

数据库课程设计大赛的尘嚣渐渐远去,怀着对这次大赛的些许不舍,怀着对当初课程设计开始时候的豪情万丈的决心的留恋,怀着通过这次课程设计积累的信心与斗志,我开始写这篇文章,为自己的足迹留下哪怕是微不足道但是对自己弥足珍贵的痕迹并期望与大家共勉。

首先,让我的记忆追溯到大二暑假,在老大的指引下(老大劝我学),我接触到Microsoft公司的.NET产品。那个时候我已经学过vc和asp,因为windows程序设计实验的课的关系,接触过vb,但是没有专门去学他,因为习惯了c++里面的class,int,觉得vb的sub,var看着就不是很顺心。我是一个好奇心很强的人,突然看到了一个号称“.net是用于创建下一代应用程序的理想而又现实的开发工具”,而且主推c#语言,由于对c语言的一贯好感,我几乎是立刻对他产生了兴趣。我就开始了对c#的学习,任何语言都不是孤立存在的,所以数据交互是很重要的,暑假的时候我把我们这学期的课本数据库系统概论看了一遍。我记得以前用c语言编程的时候,数据是在内存中申请空间,譬如使用数组等等。很耗费内存空间。这个时候就是数据库站出来的时候啦,于是我又装上了sqlserver20XX,以前学asp的时候用的是access,那个时候只是照着人家做,理论是什么也不是很清楚。

通过一个暑假的学习,基本搞清楚了理论方面的东西,具体怎么用也不是很清楚。但是这为这学期的课程设计打下了铺垫。

我很庆幸我参加了这次数据库大赛,让我确实打开了眼界。

数据结构期末总结范文 第九篇

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

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

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

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

数据结构期末总结范文 第十篇

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

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

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

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

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

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

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

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

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

显示全文

注:本文部分文字与图片资源来自于网络,转载此文是出于传递更多信息之目的,若有来源标注错误或侵犯了您的合法权益,请立即后台留言通知我们,情况属实,我们会第一时间予以删除,并同时向您表示歉意

点击下载文档

文档为doc格式

发表评论

评论列表(7人评论 , 39人围观)

点击下载
本文文档