2022年数据结构学习总结 .pdf

上传人:Q****o 文档编号:27179751 上传时间:2022-07-22 格式:PDF 页数:5 大小:58.81KB
返回 下载 相关 举报
2022年数据结构学习总结 .pdf_第1页
第1页 / 共5页
2022年数据结构学习总结 .pdf_第2页
第2页 / 共5页
点击查看更多>>
资源描述

《2022年数据结构学习总结 .pdf》由会员分享,可在线阅读,更多相关《2022年数据结构学习总结 .pdf(5页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

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、素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。相比于线性表顺序结构,链表比较方便插入和删除操作。分类:单链表用一组地址任意的存储单元存放线性表中的数据元素。循环链表循环链表是另一种形式的链式存贮结构。它的特点是表中最后一个结点的指针域指向头结点,整个链表形成一个环。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共

5、5 页 - - - - - - - - - 基本运算:建立链表,插入节点,删除节点。3. 堆栈定义:堆栈都是一种数据项按序排列的数据结构,只能在一端(称为栈顶(top)对数据项进行插入和删除。要点:堆:顺序随意栈:后进先出(Last-In/First-Out)。基本算法:置空栈: InitStack(S)判栈空: StackEmpty (S)判栈满: StackFull (S)取栈顶元素: GetTop (S)入栈: Push (S )出栈:Pop(S) 4. 队列定义:队列是一种特殊的线性表,它只允许在表的前端(front)进行删除操作,而在表的后端( rear)进行插入操作。进行插入操作的

6、端称为队尾,进行删除操作的端称为队头。队列中没有元素时,称为空队列。在队列这种数据结构中,最先插入的元素将是最先被删除的元素;反之最后插入的元素将最后被删除的元素, 因此队列又称为 “先进先出” (FIFO first in first out)的线性表。分类:顺序队列;链队;基本运算:初始化队列Qini (Q) 入队 QADD(Q,X)出队 QDel(Q,X) 判断队列是否为 qempty(Q) 判断队列是否为满qfull(Q) 5. 特殊矩阵分类:对阵矩阵;三角矩阵;稀疏矩阵;6. 二叉树定义:二叉树是每个节点最多有两个子树的有序树。通常子树被称作“左子树” (left subtree)和

7、“右子树” (right subtree) 。二叉树的每个结点至多只有二棵子树 (不存在度大于2 的结点 ),二叉树的子树有左右之分,次序不能颠倒。二叉树的第i 层至多有 2 的 i -1 次方个结点;深度为k 的二叉树至多有 2(k) -1 个结点;对任何一棵二叉树T,如果其终端结点数 (即叶子结点数 )为 n0,度为 2 的结点数为 n2,则 n0 = n2 + 1 。(1)完全二叉树若设二叉树的高度为h, 除第 h 层外,其它各层(1h-1) 的结点数都达到最大个数,第h 层有叶子节点,并且叶子节点都是从左到右依次排布,这就是完全二叉树。(2)满二叉树除了叶结点外每一个结点都有左右子叶且

8、叶结点都处在最底层的二叉树 ,。(3)深度二叉树的层数,就是高度。性质:(1) 在二叉树中,第 i 层的结点总数不超过2(i-1);(2) 深度为 h 的二叉树最多有2h-1 个结点 (h=1),最少有 h 个结点;(3) 对于任意一棵二叉树,如果其叶结点数为N0,而度数为 2 的结点总数为 N2,则 N0=N2+1 ;(4) 具有 n 个结点的完全二叉树的深度为int(log2n)+1 (5)有 N 个结点的完全二叉树各结点如果用顺序方式存储,则结点之间有如下关系:若 I 为结点编号则如果 I1,则其父结点的编号为I/2;如果2*IN,则无左名师资料总结 - - -精品资料欢迎下载 - -

9、- - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 5 页 - - - - - - - - - 儿子;如果 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 。二叉树遍历:遍历是对树的一种最基本的运算,所谓遍历二叉树,就是按一定的规则和顺序走遍二叉树的所有结点,使每一个结点都被访问一次,而且只被访问一次。由于二叉树是非线性结构,因此,

10、树的遍历实质上是将二叉树的各个结点转换成为一个线性序列来表示。设 L、D、R 分别表示遍历左子树、访问根结点和遍历右子树,则对一棵二叉树的遍历有三种情况:DLR (称为先根次序遍历) ,LDR (称为中根次序遍历) ,LRD (称为后根次序遍历)。(1)前序遍历访问根;按前序遍历左子树;按前序遍历右子树(2)中序遍历按中序遍历左子树;访问根;按中序遍历右子树(3)后序遍历按后序遍历左子树;按后序遍历右子树;访问根(4)层次遍历即按照层次访问,通常用队列来做。访问根,访问子女,再访问子女的子女(越往后的层次越低) (两个子女的级别相同) 。7. 散列定义:若结构中存在和关键字K相等的记录,则必定

11、在f(K)的存储位置上。由此,不需比较便可直接取得所查记录。称这个对应关系 f 为散列函数 (Hash function),按这个思想建立的表为散列表。散列函数:直接定址法;除留余数法;数字分析法;平方取中法;折叠法。冲突处理方法:开放地址法(线性探测再散列,二次探测再散列,伪随机探测再散列)链地址法。8.图定义:一种较线性表和树更为复杂的数据结构。存储结构:邻接矩阵;邻接表;逆邻接表;十字链表;邻接多重表。图的遍历:深度优先遍历: 深度优先遍历的思想类似于树的先序遍历。其遍历过程可以描述为:从图中某个顶点v 出发, 访问该顶点, 然后依次从v 的未被访问的邻接点出发继续深度优先遍历图中的其余

12、顶点,直至图中所有与v 有路径相通的顶点都被访问完为止。广度优先遍历: 对图的广度优先遍历方法描述为:从图中某个顶点v 出发, 在访问该顶点 v 之后, 依次访问v 的所有未被访问过的邻接点,然后再访问每个邻接点的邻接点,且访问顺序应保持先被访问的顶点其邻接点也优先被访问,直到图中的所有顶点都被访问为止。下面是对一个无向图进行广度优先遍历的过程。查找算法1. 顺序查找:在一个已知无(或有序)序队列中找出与给定关键字相同的数的具体位置。原理是让关键字与队列中的数从第一个开始逐个比较,直到找出与给定关键字相同的数为止。2. 折半查找: 首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找

13、关键字比较,如果两者相等,则查找成功;否则利用中间位名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 5 页 - - - - - - - - - 置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。3. 分块查找: 先选取各块中的最大关键字构成一个索引表;查找分两个部分:先对索引表进行二分查找或顺序查找,以确定待查记录在哪一

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

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

16、。3.冒泡排序: 依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1 个和第 2 个数,将小数放前,大数放后。然后比较第 2 个数和第 3 个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。至此第一趟结束,将最大的数放到了最后。在第二趟:仍从第一对数开始比较(因为可能由于第2个数和第 3 个数的交换,使得第 1 个数不再小于第 2 个数) , 将小数放前,大数放后,一直比较到倒数第二个数 (倒数第一的位置上已经是最大的) ,第二趟结束,在倒数第二的位置上得到一个新的最大数(其实在整个数列中是第二大的数)。如此下去,重复以上过程,直至最终完

17、成排序。4.快速排序: 通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 5 页 - - - - - - - - - 这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。5.直接选择排序: 第一次从 R0Rn-1中选取最小值, 与 R0交换,第二次从 R1Rn-1 中选取最小值,与R1交换,.第 i 次从 Ri-1Rn-1中选取

18、最小值, 与 Ri-1交换.第 n-1次从 Rn-2Rn-1中选取最小值,与 Rn-2交换,总共通过 n-1 次,得到一个按排序码从小到大排列的有序序列。6.归并排序: 申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列;设定两个指针,最初位置分别为两个已经排序序列的起始位置;比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置;重复直到某一指针达到序列尾;另一序列剩下的所有元素直接复制到合并序列尾。心得:无论我们学习什么课程,概念永远是基础,所有的知识都是建立在基础概念之上的。 我们要将概念熟记于心, 然后构建知识框架。 数据结构包括线性结构、树形

19、结构、图状结构或网状结构。线性结构包括线性表、栈、队列、串、数组、广义表等,栈和队列是操作受限的线性表,串的数据对象约束为字符集,数组和广义表是对线性表的扩展: 表中的数据元素本身也是一个数据结构。除了线性表以外, 栈是重点, 因为栈和递归紧密相连, 递归是程序设计中很重要的一种工具。树状结构中的重点自然是二叉树和哈弗曼树了。对于二叉树的很多操作都是基于对二叉树的遍历, 掌握了如何遍历, 很多问题也就迎刃而解了, 比如对二叉树结点的查找访问、 统计二叉树中叶子结点的数目、求二叉树的深度等。 哈弗曼编码也有着很广泛的应用。 对于图状结构,主要学习图的存储结构及图的遍历。对算法的学习是学习数据结构的关键。要注重对算法的掌握。 对于一个算法, 如果我们不是很理解的话, 可以手动将算法走一遍, 慢慢理解该算法的思想。 学习这门课程的最终目的, 还是要学会如何设计算法, 这需要我们长期的练习和思考。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 5 页 - - - - - - - - -

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 技术资料 > 技术总结

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

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁