数据结构学习总结

数据结构学习总结

经过一学期的学习,我对数据结构有了我自己的认识。一开始,我以为它和C语言和C++一样,都是讲一门语言。但学习之后,发现事实并不是这样,在数据结构的学习中,有线性表,有队,有栈,有树,有图等等。这些看起来没有关系,其实之间有着千丝万缕的联系。线性表是其中最简单的,所以在前几章学习,后面依次逐章变难,学起来也很吃力。

《数据结构与算法》以基本数据结构和算法设计策略为知识单元,系统地介绍了数据结构的知识与应用、计算机算法的设计与分析方法,主要内容包括线性表、树、图和广义表、算法设计策略以及查找与排序算法等。

线性表是最基本、最简单、也是最常用的一种数据结构。线性表中数据元素之间的关系是一对一的关系,即除了第一个和最后一个数据元素之外,其它数据元素都是首尾相接的。线性表的逻辑结构简单,便于实现和操作。因此,线性表这种数据结构在实际应用中是广泛采用的一种数据结构。线性表具有如下的结构特点:均匀性:虽然不同数据表的数据元素可以是各种各样的,但对于同一线性表的各数据元素必定具有相同的数据类型和长度。有序性:各数据元素在线性表中的位置只取决于它们的序号,数据元素之前的相对位置是线性的,即存在唯一的“第一个“和“最后一个”的数据元素,除了第一个和最后一个外,其它元素前面均只有一个数据元素直接前驱和后面均只有一个数据元素(直接后继)。在实现线性表数据元素的存储方面,一般可用顺序存储结构和链式存储结构两种方法。链式存储结构将在本网站线性链表中介绍,本章主要介绍用数组实现线性表数据元素的顺序存储及其应用。另外栈、队列和串也是线性表的特殊情况,又称为受限的线性结构。 链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生

成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点。地址的指针域。相比于线性表顺序结构,链表比较方便插入和删除操作。单链表—用一组地址任意的存储单元存放线性表中的数据元素。循环链表—循环链表是另一种形式的链式存贮结构。它的特点是表中最后一个结点的指针域指向头结点,整个链表形成一个环。

在学习数据结构之前,我就已经接触过栈了,当时学习C语言,就用到过,但不是很全面。栈作为一种数据结构,是一种只能在一端进行插入和删除操作的特殊线性表。它按照先进后出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来)。栈具有记忆作用,对栈的插入与删除操作中,不需要改变栈底指针。栈是允许在同一端进行插入和删除操作的特殊线性表。允许进行插入和删除操作的一端称为栈顶(top),另一端为栈底(bottom);栈底固定,而栈顶浮动;栈中元素个数为零时称为空栈。插入一般称为进栈(PUSH),删除则称为退栈(POP)。栈也称为后进先出表。

队列是一种特殊的线性表,特殊之处在于它只允许在表的前端进行删除操作,而在表的后端进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列中没有元素时,称为空队列。在队列这种数据结构中,最先插入的元素将是最先被删除的元素;反之最后插入的元素将是最后被删除的元素,因此队列又称为“先进先出”的线性表。为充分利用向量空间,克服"假溢出"现象的方法是:将向量空间想象为一个首尾相接的圆环,并称这种向量为循环向量。存储在其中的队列称为循环队列。

在计算机科学中,树是一种重要的非线性数据结构,直观地看,它是数据元素(在树中称为结点)按分支关系组织起来的结构。二叉树是每个节点最多有两个子树的有序树。通常子树被称作“左子树”和“右子树”。二叉树常被用于实现二叉查找树和二叉堆。值得注意

的是,二叉树不是树的特殊情形。在图论中,二叉树是一个连通的无环图,并且每一个顶点的度不大于3。有根二叉树还要满足根结点的度不大于2。有了根结点后,每个顶点定义了唯一的根结点,和最多2个子结点。然而,没有足够的信息来区分左结点和右结点。在学习树的过程中,我印象最深的就是儿茶排序树了。二叉排序树又称二叉查找树,亦称二叉搜索树。 它或者是一棵空树;或者是具有下列性质的二叉树:若左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若右子树不空,则右子树上所有结点的值均大于它的根结点的值; 左、右子树也分别为二叉排序树。

数据结构中的图是一种比线性表、树更为复杂的数据结构。在线性表中,数据元素之间呈线性关系,即每个元素只有一个直接前驱和一个直接后继。在树型结构中,数据元素之间有明显的的层次关系,即每个结点只有一个直接前驱,但可有多个直接后继,而在图结构中,每个结点即可有多个直接前驱,也可有多个直接后继,因此,树结构是图结构的一种特殊情形。当一个树结构中允许同一结点出现在不同分支上时,该树结构实际上就是一个图结构。图分有向图和无向图。图的存储结构的知识点有:邻接矩阵、邻接表、逆邻接表、十字链表和邻接多重表。图的遍历包括图的深度优先搜索遍历和广度优先搜索遍历。其余知识点有:有向图、连通图、生成树和森林、最短路径问题和有向无环图及其应用。有向无环图重点理解AOV网和拓扑排序及其算法。图的遍历:深度优先遍历的思想类似于树的先序遍历。其遍历过程可以描述为从图中某个顶点v出发,访问该顶点,然后依次从v的未被访问的邻接点出发继续深度优先遍历图中的其余顶点,直至图中所有与V有路径相通的顶点都被访问完为止。对图的广度优先遍历方法描述为:从图中某个顶点v出发,在访问该顶点v之后,依次访问v的所有未被访问过的邻接点,然后再访问每个邻接点的邻接点,且访问顺序应保持先被访问的顶点其邻接点也优先被访问,直到图中的所有顶点都被访问为止。下面是对一个无向图进行广度优先遍历的过程。

学习数据结构不同于C语言和C++,数据结构的内容很多,概括的方面也很广,想要学好不是一件简单的事。我还记得我在实验课的前一个晚上,就为了一个树的代码,想了几个小时!我不知道时间是怎么过去的,但我感觉颇丰!学习数据结构,我个人觉得这是最重要的,当你有那种自己写的程序按自己的想法编译出来后,心情是特别愉悦的,这就是我们学习的动力!学数据结构,看不如做,写在纸上不如写在电脑上。我不赞成题海战术,但相关的题量是必须要有的,只有在不断的写程序中,不断的发现自己的不足,不断地收货新的知识,不断的锻炼自己编程的能力。还有就是学习数据结构是要花时间的,要下功夫,少一点玩游戏时间,多一点编程时间,总对我们是好的。

 

第二篇:数据结构学习总结

数据结构总结

数据结构讲的是什么,数据结构课程主要是研究非数值计算的研究的程序设

计问题中所出现的计算机处理对象以及它们之间关系和操作的学科。

第一章主要介绍了数据、数据元素、数据类型以及数据结构的定义。

其中,数据结构包括逻辑结构、存储结构和运算集合。逻辑结构分为四类:

集合型、线性、树形和图形结构,

数据元素的存储结构分为:顺序存储、链接存储、索引存储和散列存储四类。

最后着重介绍算法性能分析,包括算法的时间性能分析以及算法的空间性能

分析。

第二章具体地介绍了顺序表的定义、特点及其主要操作,如查找、插入和删

除的实现。需要掌握对它们的性能估计。包括查找算法的平均查找长度,插入与删除算法中的对象平均移动次数。

链表中数据元素的存储不一定是连续的,还可以占用任意的、不连续的物理

存储区域。

与顺序表相比,链表的插入、删除不需要移动元素,给算法的效率带来较大

的提高。

链表这一章中介绍了链表的节点结构、静态与动态链表的概念、链表的基本

运算(如求表长、插入、查找、删除等)、单链表的建立(头插法和尾插法)以及双向循环链表的定义、结构、功能和基本算法。

第三章介绍了堆栈与队列这两种运算受限制的线性结构。其基本运算方法与

顺序表和链表运算方法基本相同,不同的是堆栈须遵循“先进后出”的规则,对堆栈的操作只能在栈顶进行;而队列要遵循“先进先出”的规则,教材中列出了两种结构的相应算法,如入栈、出栈、入队、出队等。在介绍队列时,提出了循环队列的概念,以避免“假溢出”的现象。

算法上要求掌握进栈、退栈、取栈顶元素、判栈空盒置空栈等五种操作及掌

握使用元素个数计数器及少用一个元素空间来区分队列空、队列满的方法。

第四章串和数组中,我们知道串是一种特殊的线性表,是由零个或多个任意

字符组成的字符序列。串的储存结构分为紧缩模式和非紧缩模式。

基本运算需掌握求串长、串赋值、连接操作、求子串、串比较、串定位、串

插入、串删除、串替换等。

第五章二叉树的知识是重点内容。提到了二叉树的性质以及两种特殊的二叉

树:完全二叉树和满二叉树。接着介绍二叉树的顺序存储 和链接存储 以及

生成算法。

重点介绍二叉树的遍历算法(递归算法、先序、中序和后序遍历非递归算法)

和线索二叉树。

二叉树的应用:基本算法、哈弗曼树、二叉排序树和堆排序。

树与二叉树是不同的概念。教材介绍了树和森林的概念、遍历和存储结构,

还有树、森林和二叉树的相互关系,

树或森林怎样转化成二叉树,

二叉树又如何转换为树和森林等算法。

相关推荐