数据结构知识点总结1

本文详细总结了数据结构的基本概念,包括数据元素、数据对象、数据结构的逻辑结构与物理结构,以及线性表、链表、栈、队列等常见数据结构的特点与存储方式。此外,还介绍了递归、树、二叉搜索树和图等高级数据结构,以及排序、搜索算法和数据结构在实际应用中的选择与优劣分析。
摘要由CSDN通过智能技术生成

数据是信息的载体,是描述客观事物的数、字符、以及所有能输入到计算机中,被计算机程序识别和处理的符号(数值、字符等)的集合。

数据元素(数据成员)是数据的基本单位。在不同的条件下,数据元素又可称为元素、结点、顶点、记录等

数据对象具有相同性质的数据元素(数据成员)的集合

数据结构由某一数据对象及该对象中所有数据成员之间的关系组成。记为Data_Structure = {D, R}其中,D是某一数据对象,R是该对象中所有数据成员之间的关系的有限集合。

数据类型是指一种类型,以及定义在这个值集合上的一组操作的总称。
判断一个算法的优劣主要标准:正确性、可使用性、可读性、效率、健壮性、简单性。

算法效率的衡量方法:后期测试,事前估计

算法分析是算法的渐进分析简称

数据结构包括“逻辑结构” 和“物理结构”两个方面(层次):

逻辑结构是对数据成员之间的逻辑关系的描述,它可以用一个数据成员的集合和定义在此集合上的若干关系来表示物理结构是逻辑结构在计算机中的表示和实现,故又称“存储结构”

线性表的定义n( ³ 0)个表项的有限序列 L =(a1, a2,…, anai是表项,n是表长度。第一个表项是表头,最后一个是表尾。

线性表的特点:表中元素的数据类型相同;线性表中,结点和结点间的关系是一对一的,有序表和无序表线性表的存储方式。一,顺序存储方式,二,链表存储方式。

顺序表的存储表示有2种方式:静态方式和动态方式。

顺序表的定义是:把线性表中的所有表项按照其逻辑顺序依次存储到从计算机存储中指定存储位置开始的一块连续的存储空间中。

顺序表的特点:用地址连续的一块存储空间顺序存放各表项,各表项的逻辑顺序与物理顺序一致,对各个表项可以顺序访问,也可以随机访问 。

单链表是一种最简单的链表表示,也叫线性链表,用她来表示线性表时,用指针表示结点间的逻辑关系。特点:是长度可以很方便地进行扩充。

连续存储方式(顺序表)特点:存储利用率高,存取速度快缺点:插入、删除等操作时需要移动大量数据:

链式存储方式(链表) 特点:适应表的动态增长和删除。缺点:需要额外的指针存储空间

单链表的类定义:多个类表达一个概念(单链表)。分为:链表结点(ListNode)类 ,链表(List)类。

循环链表的概念:是另一种形式的表示线性表的链表,它的结点结构与单链表相同,与单链表不同的是链表中表尾结点的LINK域中不是NULL,而是存放了一个指向链表开始结点的指针,这样,只要知道表中任何一个结点的地址,就能遍历表中其他任何一结点。

双向链表的概念:在双向链表的没饿结点中应有两个链接指针作为它的数据成员:1LINK指示它的前驱结点,RLINK指示它的后继结点,因此,双向链表的每个结点至少有3个域:1LINK(前驱指针) DADA(数据) RLINK(后继指针)。

:定义为只允许在表的末端进行插入和删除的线性表。特点是:后进先出。

递归的定义 :若一个对象部分地包含它自己,或用它自己给自己定义,  则称这个对象是递归的;若一个过程直接地或间接地调用自己, 则称这个过程是递归的过程。以下三种情况常常用到递归方法一。 定义是递归的二。 数据结构是递归的三问题的解法是递归的。

队列:队列是只允许在一端删除,在另一端插入的顺序表允许删除的一端叫做队头,允许插入的一端叫做队尾。特性:先进先出。

优先级队列:是不同于先进先出队列的另一种队列。每次从队列中取出的是具有最高优先权的元素。多维数组是一维数组的推广。

多维数组是一维数组的推广。多维数组的特点是每一个数据元素可以有多个直接前驱和多个直接后继。数组元素的下标一般具有固定的下界和上界,因此它比其他复杂的非线性结构简单。

字符串n ( ³ 0 ) 个字符的有限序列, 记作S : “c1c2c3…cn”其中,S 是串名字c1c2c3…cn”是串值ci 是串中字符n 是串的长度,n = 0 称为空串。

广义表n ( ≥0 ) 个表元素组成的有限序列,记作LS (a1, a2, a3, …, an),LS 是表名,ai 是表元素,可以是表(称为子表),可以是数据元素(称为原子)。n为表的长度。n = 0 的广义表为空表。n > 0时,表的第一个表元素称为广义表 的表头(head),除此之外,其它表元素组成的表称为广义表的表尾(tail

有根树:一棵有根树T,简称为树,它是n (n≥0) 个结点的有限集合。当n = 0时,T 称为空树;否则,T 是非空树,记作 T={ 空集 n=0

            {r,T1,T2….Tn},n>0

r 是一个特定的称为根(root)的结点,它只有直接后继,但没有直接前驱;根以外的其他结点划分为 m (m ³ 0) 个互不相交的有限集合T1, T2, …, Tm,每个集合又是一棵树,并且称之为根的子树。每棵子树的根结点有且仅有一个直接前驱,但可以有0个或多个直接后继

二叉树的定义:一棵二叉树是结点的一个有限集合,该集合或者为空,或者是由一个根结点加上两棵分别称为左子树和右子树的、互不相交的二叉树组成。

完全二叉树 :─ 若设二叉树的深度为 k,则共有 k 层。除第 k 层外,其它各层 (1~k-1) 的结点数都达到最大个数,第k层从右向左连续缺若干结点,这就是完全二叉树

二叉树的遍历就是按某种次序访问树中的结点,要求每个结点访问一次且仅访问一次。设访问根结点记作 V遍历根的左子树记作 L 遍历根的右子树记作 R。则可能的遍历次序有:前序 VLR 镜像 VRL;中序 LVR 镜像 RVL;后序 LRV 镜像 RLV

前序遍历二叉树算法的框架是:若二叉树为空,则空操作;否则访问根结点 (V);前序遍历左子树 (L);前序遍历右子树 (R)。遍历结果- + a * b - c d / e f

树的后根次序遍历:当树非空时依次后根遍历根的各棵子树访问根结点:树后根遍历 EFBCGDA;对应二叉树中序遍历 EFBCGDA;树的后根遍历结果与其对应二叉树。

表示的中序遍历结果相同:树的后根遍历可以借助对应二叉树的中序遍历算法实现

最小堆和最大堆:如果有一个关键码集合K={K0,K1,K2,K3,….,Kn-1},把它的所有元素按完全二叉树的顺序存储方式存放在一个一维数组中。并满足Ki≤K2i+1且Ki≤K2i+2(或者Ki≥K2i+1且KiK2i+2)i=0,1,….[(n-2)/2],则称这个集合为最小堆或最大堆。

堆是最高效的一种数据结构,每次出队列的是优先权最高的元素。用堆实现其存储表示,能够高效运作。

堆的建立:有2种方式建立最小的堆,一种方式是通过第一个构造函数建立一个空堆,其大小通过动态存储分配得到,另一中建立最小堆的方式是通过第二个构造函数复制一个记录数组并对其加以调整形成一个堆。

路径:从树中一个结点到达另一个结点之间的分支构成该两结点之间的路径。

路径长度:是指路径上的分支条数,树的路径长度是从树的根结点到每一个结点的路径长度之和。由树的定义,从根结点到达书中每一结点有且仅有一条路径。

Huffman树:带权路径长度最小的二叉树应是权值大的外结点离根结点最近的扩充二叉树。 带路径长度最小的扩充二叉树不一定是完全二叉树。

集合是成员(元素)的一个群集。集合中的成员可以是原子(单元素),也可以是集合。

字典是一些元素的集合,每个元素有一个称作关键码(key)的域,不同元素的关键码互不相同。

散列方法:理想的搜索方法是可以不经过比较,一次直接从字典中得到要搜索的元素。如果在元素存储位置与其关键码之间建立一个确定的对应函数关系Hash(), 使得每个关键码与结构中一个唯一的存储位置相对应:Address = Hash(key)。在插入时依此函数计算存储位置并按此位置存放。在搜索时对元素的关键码进行同样的计算,把求得的函数值当做元素存储位置,在结构中按此位置搜索。这就是散列方法。在散列方法中所用转换函数叫做散列函数。按此方法构造出来的表叫做散列表。使用散列方法进行搜索不必进行多次关键码的比较, 搜索速度比较快, 可以直接到达或逼近具有此关键码的表项的实际存放地址。<

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值