学习数据结构心得体会

上传人:dus****log 文档编号:147098426 上传时间:2022-09-01 格式:DOCX 页数:23 大小:20.75KB
收藏 版权申诉 举报 下载
学习数据结构心得体会_第1页
第1页 / 共23页
学习数据结构心得体会_第2页
第2页 / 共23页
学习数据结构心得体会_第3页
第3页 / 共23页
资源描述:

《学习数据结构心得体会》由会员分享,可在线阅读,更多相关《学习数据结构心得体会(23页珍藏版)》请在装配图网上搜索。

1、学习数据结构心得体会【篇一:数据结构学习总结】 数据结构学习总结 通过一学期对数据结构与算法的学习,大概的了解了基本的数据结构和相应的一些算法。下面总结一下自己一个学期学习的收获和心得。 数据结构是什么: 数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。数据结构往往同高效的检索算法和索引技术有关。 数据结构重要性: 一般认为,一个数据结构是由数据元素依据某种逻辑联系组织起来的。对数据元素间逻辑关系的描述称为数据的逻辑结构;数据必须在计算机内存储,数据的存储结构是数据结构的实现形式,是

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

3、现,面向对象的程序设计语言就是其中之一。 常见的数据结构: 1. 顺序表: 定义:顺序表是在计算机内存中以数组的形式保存的线性表,是指用一组地址连续的存储单元依次存储数据元素的线性结构。线性表采用顺序存储的方式存储就称之为顺序表。顺序表是将表中的结点依次存放在计算机内存中一组地址连续的存储单元中。 基本运算: 置表空:sqlsetnull(l)判表满:sqlempty(l) 求表长:sqllength(l)插入:sqlinsert(l,i,x) 按序号取元素:sqlget(l,i) 删除:sqldelete(l,i) 按值查找:sqllocate(l,x) 2. 链表 定义:链表是一种物理存储

4、单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。 相比于线性表顺序结构,链表比较方便插入和删除操作。 分类:单链表用一组地址任意的存储单元存放线性表中的数据元素。 循环链表循环链表是另一种形式的链式存贮结构。它的特点是表中最后一个结点的指针域指向头结点,整个链表形成一个环。基本运算:建立链表,插入节点,删除节点。 3. 堆栈 定义:堆栈都是一种数据项按序排列的数据结构,只能在一端(称为栈顶(top)

5、对数据项进行插入和删除。要点:堆:顺序随意栈:后进先出(last-in/first-out)。 基本算法: 置空栈:initstack(s)判栈空:stackempty(s) 判栈满:stackfull(s)取栈顶元素:gettop(s) 入栈:push(s) 出栈:pop(s) 4. 队列 定义:队列是一种特殊的线性表,它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列中没有元素时,称为空队列。在队列这种数据结构中,最先插入的元素将是最先被删除的元素;反之最后插入的元素将最后被删除的元素,因此队列又称为

6、“先进先出”(fifofirst 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次方个结

7、点;深度为k的二叉树至多有2(k) -1个结点;对任何一棵二叉树t,如果其终端结点数(即叶子结点数)为n0,度为2的结点数为n2,则n0 = n2 + 1。 (1)完全二叉树若设二叉树的高度为h,除第 h 层外,其它各层 (1h-1) 的结点数都达到最大个数,第 h 层有叶子节点,并且叶子节点都是从左到右依次排布,这就是完全二叉树。 (2)满二叉树除了叶结点外每一个结点都有左右子叶且叶结点都处在最底层的二叉树,。 (3)深度二叉树的层数,就是高度。 性质: (1) 在二叉树中,第i层的结点总数不超过2(i-1); (2) 深度为h的二叉树最多有2h-1个结点(h=1),最少有h个结点; (3)

8、 对于任意一棵二叉树,如果其叶结点数为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个枝点,

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

10、 (3)后序遍历 按后序遍历左子树;按后序遍历右子树;访问根 (4)层次遍历 即按照层次访问,通常用队列来做。访问根,访问子女,再访问子女的子女(越往后的层次越低)(两个子女的级别相同)。 7. 散列 定义:若结构中存在和关键字k相等的记录,则必定在f(k)的存储位置上。由此,不需比较便可直接取得所查记录。称这个对应关系f为散列函数(hash function),按这个思想建立的表为散列表。 散列函数:直接定址法;除留余数法;数字分析法;平方取中法;折叠法。 冲突处理方法:开放地址法(线性探测再散列,二次探测再散列,伪随机探测再散列) 链地址法。 8. 图 定义:一种较线性表和树更为复杂的数据

11、结构。 存储结构:邻接矩阵;邻接表;逆邻接表;十字链表;邻接多重表。 图的遍历: 深度优先遍历:深度优先遍历的思想类似于树的先序遍历。其遍历过程可以描述为:从图中某个顶点v出发,访问该顶点,然后依次从v的未被访问的邻接点出发继续深度优先遍历图中的其余顶点,直至图中所有与v有路径相通的顶点都被访问完为止。 广度优先遍历:对图的广度优先遍历方法描述为:从图中某个顶点v出发,在访问该顶点v之后,依次访问v的所有未被访问过的邻接点,然后再访问每个邻接点的邻接点,且访问顺序应保持先被访问的顶点其邻接点也优先被访问,直到图中的所有顶点都被访问为止。下面是对一个无向图进行广度优先遍历的过程。 查找算法 1.

12、 顺序查找:在一个已知无(或有序)序队列中找出与给定关键字相同的数的具体位置。原理是让关键字与队列中的数从第一个开始逐个比较,直到找出与给定关键字相同的数为止。 2. 折半查找:首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。 3. 分块查找:先选取各块中的最大关键字构成一个索引表;查找分两个部 分:先对索引表进行二分查找或顺序

13、查找,以确定待查记录在哪一块中;然后,在已确定的块中用顺序法进行查找。 4. 二叉排序树: 定义:二叉排序树(binary sort tree)又称二叉查找树。 它或者是一棵空树;或者是具有下列性质的二叉树:(1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值;(2)若右子树不空,则右子树上所有结点的值均大于它的根结点的值;(3)左、右子树也分别为二叉排序树; 查找:若根结点的关键字值等于查找的关键字,成功。否则,若小于根结点的关键字值,递归查左子树。若大于根结点的关键字值,递归查右子树。若子树为空,查找不成功。 排序算法: 1. 直接插入排序:插入排序的基本操作就是将一个数据插入到

14、已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,算法适用于少量数据的排序,时间复杂度为o(n2)。是稳定的排序方法。插入算法把要排序的数组分成两部分:第一部分包含了这个数组的所有元素,但将最后一个元素除外,而第二部分就只包含这一个元素。在第一部分排序后,再把这个最后元素插入到此刻已是有序的第一部分里的位置。 2. 希尔排序:先取一个小于n的整数d1作为第一个增量,把文件的全部记录分成d1个组。所有距离为d1的倍数的记录放在同一个组中。先在各组内进行直接插入排序;然后,取第二个增量d2d1重复上述的分组和排序,直至所取的增量dt=1(dtdt-l?d2d1),即所有记录放在同一组中

15、进行直接插入排序为止。这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。 5. 直接选择排序:第一次从r0rn-1中选取最小值,与r0交换,第二次从r1rn-1中选取最小值,与r1交换,.第i次从ri-1rn-1中选取最小值,与ri-1交换.第n-1次从rn-2rn-1中选取最小值,与rn-2交换,总共通过n-1次,得到一个按排序码从小到大排列的有序序列。 6. 归并排序:申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列;设定两个指针,最初位置分别为两个已经排序序列的起始位置;比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移

16、动指针到下一位置;重复直到某一指针达到序列尾;另一序列剩下的所有元素直接复制到合并序列尾。 心得:无论我们学习什么课程,概念永远是基础,所有的知识都是建立在基础概念之上的。我们要将概念熟记于心,然后构建知识框架。数据结构包括线性结构、树形结构、图状结构或网状结构。线性结构包括线性表、栈、队列、串、数组、广义表等,栈和队列是操作受限的线性表,串的数据对象约束为字符集,数组和广义表是对线性表的扩展:表中的数据元素本身也是一个数据结构。除了线性表以外,栈是重点,因为栈和递归紧密相连,递归是程序设计中很重要的一种工具。树状结构中的重点自然是二叉树和哈弗曼树了。对于二叉树的很多操作都是基于对二叉树的遍历

17、,掌握了如何遍历,很多问题也就迎刃而解了,比如对二叉树结点的查找访问、统计二叉树中叶子结点的数目、求二叉树的深度等。哈弗曼编码也有着很广泛的应用。对于图状结构,主要学习图的存储结构及图的遍历。对算法的学习是学习数据结构的关键。要注重对算法的掌握。对于一个算法,如果我们不是很理解的话,可以手动将算法走一遍,慢慢理解该算法的思想。学习这门课程的最终目的,还是要学会如何设计算法,这需要我们长期的练习和思考。【篇二:数据结构课程设计心得体会】 程序设计心得体会 做了一个星期的程序设计终于做完了,在这次程序设计课中,真是让我获益匪浅,我突然发现写程序还挺有意思的。 由于上学期的c语言跟这学期的数据结构都

18、算不上真正的懂,对于书上的稍微难点的知识就是是而非的,所以我只是对老师的程序理解,我也试着去改变了一些变量,自己也尽量多的去理解老师做程序的思路。当我第一天坐在那里的时候,我就不知道该做些什么,后来我只有下来自己看了一遍书来熟悉下以前学过的知识。 通过这次的程序设计,发现一个程序设计就是算法与数据结构的结合体,自己也开始对程序产生了前所未有的兴趣,以前偷工减料的学习也不可能一下子写出一个程序出来,于是我就认真看老师写的程序,发现我们看懂了一个程序其实不难,难的是对于一个程序的思想的理解,我们要掌握一个算法,不仅仅限于读懂,主要的是要理解老师的思路,学习老师的解决问题的方法。 这次试验中,我发现

19、书本上的知识是一个基础,但是我基础都没掌握,更别说写出一个整整的程序了。自己在写程序的时候,也发现自己的知识太少了,特别是基础知识很多都是模模糊糊的一个概念,没有落实到真正的程序,所以自己写的时候也感到万分痛苦,基本上涉及一个知识我就会去看看书,对于书本上的知识没掌握好。在饭后闲暇时间我也总结了一下,自己以前上课也认真的听了,但是还是写不出来,这主要归结于自己的练习太少了,而且也总是半懂就不管了。在改写老师的程序中也出现了很多的问题,不断的修改就是不断的学习过程,当我们全身心的投入其中时,实际上是一件很有乐趣的事情。对于以后的学习有了几点总结:第一、熟记各种数据结构类型,定义、特点、基本运算(

20、分开点一点也没多少东西,难度不大,但是基本);第二、各种常用的排序算法,如冒泡排序、堆排序,这些是必考的内容,分数不会少于20%;第三,多做习题,看题型,针对题型来有选择复习;数据结构看上去很复杂,但你静下心来把书扫上几遍,分解各个知识点,这一下来,学数据结构的思路就会很清晰了。【篇三:数据结构实训心得体会】 这次课程设计的心得体会通过实习我的收获如下1、巩固和加深了对数据结构的理解,提高 综合运用本课程所学知识的能力。2、培养了我选用参考书,查阅手册及文献资料的能力。培 养独立思考,深入研究,分析问题、解决问题的能力。3、通过实际编译系统的分析设计、编 程调试,掌握应用软件的分析方法和工程设

21、计方法。4、通过课程设计,培养了我严肃认真的 工作作风,逐步建立正确的生产观念、经济观念和全局观念。从刚开始得觉得很难,到最后 把这个做出来,付出了很多,也得到了很多,以前总以为自己对编程的地方还不行,现在, 才发现只要认真做,没有什么不可能。 编程时要认真仔细,出现错误要及时找出并改正,(其中对英语的要求也体现出来了,因 为它说明错误的时候都是英语)遇到问题要去查相关的资料。反复的调试程序,最好是多找 几个同学来对你的程序进行调试并听其对你的程序的建议,在他们不知道程序怎么写的时候 完全以一个用户的身份来用对你的用户界面做一些建议,正所谓当局者迷旁观者清,把各个 注意的问题要想到;同时要形成

22、自己的编写程序与调试程序的风格,从每个细节出发,不放 过每个知识点,注意与理论的联系和理论与实践的差别。另外,要注意符号的使用,注意对 字符处理,特别是对指针的使用很容易出错且调试过程是不会报错的,那么我们要始终注意 指针的初始化不管它怎么用以免不必要麻烦。 通过近两周的学习与实践,体验了一下离开课堂的学习,也可以理解为一次实践与理论 的很好的连接。特别是本组所做的题目都是课堂上所讲的例子,在实行之的过程中并不是那 么容易事让人有一种纸上谈兵的体会,正所谓纸上得来终觉浅绝知此事要躬行。实训过程中 让我们对懂得的知识做了进一步深入了解,让我们的理解与记忆更深刻,对不懂的知识与不 清楚的东西也做了

23、一定的了解,也形成了一定的个人做事风格。通过这次课程设计,让我对一个程序的数据结构有更全面更进一步的认识,根据不同的 需求,采用不同的数据存储方式,不一定要用栈,二叉树等高级类型,有时用基本的一维数 组,只要运用得当,也能达到相同的效果,甚至更佳,就如这次的课程设计,通过用for的 多重循环,舍弃多余的循环,提高了程序的运行效率。在编写这个程序的过程中,我复习了 之前学的基本语法,哈弗曼树最小路径的求取,哈弗曼编码及译码的应用范围,程序结构算 法等一系列的问题它使我对数据结构改变了看法。在这次设计过程中,体现出自己单独设计 模具的能力以及综合运用知识的能力,体会了学以致用、突出自己劳动成果的喜

24、悦心情,也 从中发现自己平时学习的不足和薄弱环节,从而加以弥补。篇二:数据结构试验心得数据结构课程设计心得体会(专业:计算机科学与技术 姓名:朱文 学号:2011220137) 通讯录管理系统是基于双向循环链表设计而成的信息管理系统。该系统通过对程序进行 模块化,建立添加、显示、查找和删除功能的函数,各函数中运用双向循环链表存储数据。 为存储通讯录信息,需定义一个结构体类型,成员包括姓名、街道、城市、邮编、国家等, 并建立双向循环链表,定义该结构体类型的指针,用于指向各结点。分别建立具有添加、删 除、修改、查询等功能的子函数,完成相应功能,对程序实现模块化。这其中要用到对链表 的删除、插入等知

25、识。为实现存储功能,需用到文件的相关函数开发一个通讯录管理系统,借助计算机可以方便、快捷、灵活的管理个人的朋友及相关 人员的通讯信息,了解友人相关信息,帮助与友人保持联络。所以设计一个通讯录管理系统 管理各人的通讯信息是非常必要的,同时,通过用循环双向链表设计通讯录管理系统可以让 我们更好的去理解循环双向链表,更好的学好数据结构这门课程。 本次实验中,我们使用分工合作的方式,首先定义了函数的结构体部分,剩下的根据函 数所要实现的功能进行分工合作,我实现的是通讯录中删除功能的子函数,删除信息(void delete(dnode *head))的功能是按照用户输入的姓名首先进行按姓名查询功能,查找

26、成功, 则执行删除信息的功能,查询不成功,则提示错误信息。定义结点p,输入要删除的信息的姓名,按姓名查找结点,如果找到匹配的结点p,就进行相关的删除操作,否则就是没找到 要删除的数据,最后返回到主函数。这次实验中我深刻认识到合作的重要性。例如:我所编写的按名删除功能的实现中,应 用了章林霞同学所编写写的按名搜索查询功能的那部分函数,在这次实验中,我学到很多东 西,加强了我的动手能力,并且培养了我的独立思考能力。我们坚持理论联系实际的思想, 以实践证实理论,从实践中加深对理论知识的理解和掌握。实验是我们快速认识和掌握理论 知识的一条重要途径。 通过这次课程设计,我们对c语言以及数据结构有了更深刻

27、的了解,增强了程序的编写 能力,巩固了专业知识,对程序的模块化观念也又模糊逐渐变的清晰了。在程序的运行与调 试过程中出现了很多错误,通过反复地复习课本上的相关知识,不停地修改与调试,我们终 于完成了这段程序。在调试过程中,我们认识到了数据结构的灵活性与严谨性,同一个功能 可以由不同的语句来实现,但编写程序时要特别注意细节方面的问题,因为一个小小的疏忽 就能导致整个程序不能运行。我们也认识到了自己的薄弱之处,如对链表相关知识的欠缺, 文件运用的不熟练,在以后的学习中我们要集中精力、端正态度,争取把知识学得更扎实、 更全面。 经过这次的实验,我们整体对各个方面都得到了不少的提高,希望以后学校和系里

28、能够 开设更多类似的实验,能够让我们得到更好的锻炼。也让我们深深感受到讨论交流很重要, 遇到困难时,大家一起讨论,加强我们的团队合作精神,同时通过这次的课程设计,我们对数据结构中双向链表结构有了更深刻的理解。篇三:数据结构综合实验心得体会心得体会: 做了一个星期的程序设计终于做完了,在这次程序设计课中,真是让我获益匪浅。 对大 一学习的c语言和这学期开的数据结构,并没有掌握,很多知识都不太懂,突然让自己独立 完成一个程序让我手忙脚乱,起码在我认为那真的特别难,看了老师给的题目以及上网查找 了一些相关的知识,简单的编了几行就告一段落了,第一天等于只完成了老师要求写的需求 分析和概要设计,后来查找

29、了关于哈希表的相关知识,了解了如何创建哈希表,如何合适的 构建哈希函数,(选取合适的表长,合适的余数,使得查找时间以及平均查找长度最短)以及 什么是除留余数法,和怎样用除留余数法创建哈希表,看懂了之后,我又看了处理冲突的方 法,有三种线性探测再散列法法,二次探测再散列法,伪随机数序列法三种,而我所要做的 是第一种线性探测再散列的方法,相较后两种要简单很多,在遇到冲突的时候地址加一,知 道冲突解决。 在了解这些概念以后,我就开始着手编程序了,在遇到问题的时候请教我们班擅长的同 学,慢慢把不能不会不理解的地方给弄明白了,在经过很多次调试以后,一些基本功能已经 可以实现了,为了使平均查找长度越小越好

30、,我不断尝试新的表长以及除数,在没有出现错 误的基础上,将功能实现,最后,终于在周四的时候将所有的程序调试完全。这次的综合性实验使我了解到,平时对知识的积累相当重要,同时也要注重课上老师的 讲解,老师在课上的延伸是课本上所没有的,这些知识对于我们对程序的编写有很大的作用, 同时,编程也要求我们有足够的耐心,细细推敲。越着急可能就越无法得到我们想要的结果, 遇到不会的问题要多多请教,知识是在实践与向别人请教的过程中积累的,所以问是至关重 要的,只要肯下功夫很多东西都是可以完成的。篇四:数据结构实验报告及心得体会20112012第一学期数据结构实验报告 班级:信管一班 学号:201051018 姓

31、名:史孟晨 实验报告题目及要求 一、实验题目设某班级有m(6)名学生,本学期共开设n(3)门课程, 要求实现并修改如下程 序(算 法)。 1. 输入学生的学号、姓名和 n 门课程的成绩(输入提示和输出显示使用汉字系统), 输出实验结果 。(15分) 2. 计算每个学生本学期 n 门课程的总分,输出总分和n门课程成绩排在前 3 名学生的学号、姓名和成绩。 3. 按学生总分和 n 门课程成绩关键字升序排列名次,总分相同者同名次。 二、实验要求 1修改算法。将奇偶排序算法升序改为降序。(15分) 2用选择排序、冒泡排序、插入排序分别替换奇偶排序算法,并将升序算法修改为 降序算法;。(45分) 3编译

32、、链接以上算法,按要求写出实验报告(25)。 4. 修改后算法的所有语句必须加下划线,没做修改语句保持按原样不动。 5用a4纸 打印输出实验报告。 三、实验报告说明 实验数据可自定义,每种排序算法数据要求均不重复。 (1) 实验题目:n门课程学 生成绩名次排序算法实现; (2) 实验目的:掌握各种排序算法的基本思想、实验方法和验证算法的准确性; (3) 实验要求:对算法进行上机编译、链接、运行; (4) 实验环境(windows xp-sp3,visual c+); (5) 实验算法(给出四种排序算法修改后的全部清单); (6) 实验结果(四种 排序算法模拟运行后的实验结果); (7) 实验体

33、会(文字说明本实验成功或不足之处)。 三、实验源程序(算法)score.c #include stdio.h #include string.h #define m 6 #define n 3 struct student char name10; int number; int scoren+1; /*scoren为总分,score0-score2为学科成绩 */ stum; void changesort(struct student a,int n,int j)int flag=1,i; struct student temp; while(flag) flag=0; for(i=1;i

34、n-1;i+=2) /*对所有奇数项进行一遍比较*/ if (ai.scorejai+1.scorej) temp=ai; ai=ai+1; ai+1=temp; flag=1; for(i=0;in-1;i+=2)/*对所有偶数项进行一遍比较*/ if (ai.scorejai+1.scorej) temp=ai; ai=ai+1; ai+1=temp; flag=1; void print_score(struct student a,int n,int j) int i,k;printf(“ 奇偶交换 成绩 %d 排序表,j+1); printf(n); printf( 名 次 学 号

35、姓 名 分 数n); k=1; for(i=0;knin;i+) if(i0ai.scorej!=ai-1.scorej)k+; printf( %4d ,k); printf(%4d,ai.number); printf( %s,ai.name); printf( %6d,ai.scorej); printf(n); main() int i,j,k; for (i=0;im;i+) /*输入每个学生信息*/ printf(请输入第 %d 名学生分数: ,i+1);printf(n);printf(姓 名: ); scanf(%s,stui.name); printf(编 号: );scan

36、f(%4d,stui.number); printf(数据结构: ); scanf(%4d,stui.score0); printf(离散数学: ); scanf(%4d,stui.score1);printf(大学英语: ); scanf(%4d,stui.score2); for(i=0;im;i+) /*计算每个学生总分*/stui.scoren=0; for(j=0;jn;j+) stui.scoren+=stui.scorej; changesort(stu,m,n); /*对总分进行排序*/ printf( 学生总分成绩排序表n); printf( 名次 学号 姓 名数据结构 离散

37、数学 大学英语 k=1; for(i=0;im;i+) if(i0stui.scoren!=stui-1.scoren) k+;printf(%4d,k); printf( %4d,stui.number);printf( %s,stui.name);for(j=0;jn+1;j+) printf(%6d,stui.scorej);printf(n); changesort(stu,m,0); /*对数据结构成绩进行排序*/ print_score(stu,m,0); /*输出数据结构前 3 名同学成绩*/changesort(stu,m,1); /*对离散数学成绩进行 排序*/ 总 分n);

38、篇五:数据结构实训报告 山东科技大学泰山科技学院课程实训说明书 课程: 数据结构项目实训题目: 院 系: 信息工程系2014年5月 25日专业班级: 学 号: 学生姓名: 指导教师:目录 一、设计题目.3 1.1 顺序表操作.3 1.2 链表操作.3 1.3 二叉树的 基本操作.3 二、运行环境(软、硬件环境).32.1 软件环境.3 2.2 硬件环境.3 三、数据结构及算法设计的思想.3 3.1 顺序表设计构思.3 3.2 链表设计构思.43.3 二叉树 设计构思.4 四、源代码.5 5.1 顺序表源代码.5 5.2 链表源代码.65.3 二叉树 源代码.8 五、运行结果分析.11 6.1

39、顺序表运行结果.11 6.2 链表运行结果.136.3 二 叉树运行结果.15 七、实习总结.18 一、设计题目 1.1链表操作 1.1.1 设计目的? 掌握线性表的在顺序结构和链式结构实现。? 掌握线性表在顺序结构和链式结构上的基本操作。 1.1.2 设计内容和要求利用顺序表链表的插入运算建立线性链表,然后实现链表的查找、插入、删除、计数、 输出、排序、逆置等运算(查找、插入、删除、查找、计数、输出、排序、逆置要单独写成 函数),并能在屏幕上输出操作前后的结果。 1.2二叉树的基本操作 1.2.1 设计目的 ? 掌握二叉树的概念和性质 ? 掌握任意二叉树存储结构。 ? 掌握任意二叉树的基本 操作。 1.2.2 设计内容和要求 (1) 对任意给定的二叉树(顶点数自定)建立它的二叉链表存储结构,并利用栈的五种 基本运算(置空栈、进栈、出栈、取栈顶元素、判栈空)实现二叉树的先序、中序、后序三 种遍历,输出三种遍历的结果。 (2) 求二叉树高度、结点数、度为1的结点数和叶子结点数。

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!