2022年数据结构笔记.pdf
《2022年数据结构笔记.pdf》由会员分享,可在线阅读,更多相关《2022年数据结构笔记.pdf(24页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、数据结构笔记数据结构笔记基础 : 数据结构与算法(一)数据结构基本概念数据 (data):就是对客观事物的符号表示,在计算机科学中就是指所有能输入到计算机中并被计算机程序处理的符号总称数据元素 (data element): 就是数据的基本单位,在计算机中通常被当做一个整体进行考虑与处理数据对象 (data object): 性质相同的数据元素的集合,就是数据的一个子集数据结构 (data structure): 相互之间存在一种或多种特定关系的数据元素的集合4 类基本结构 :集合、线性结构、树形结构、图形(网状 )结构数据结构的形式定义为数据结构就是一个二元组Data Structure =
2、 (D,S),其中 D 就是数据元素的有限集 ,S就是 D 上关系的有限集数据结构定义中的“关系”描述的就是数据元素之间的逻辑关系,因此又称为数据的逻辑结构数据结构在计算机中的表示(映像 )称为物理结构 (存储结构 ) 计算机中表示信息的最小单位就是二进制中的一位,叫做位 (bit), 一到若干位组成一个位串表示一个数据元素,这个位串称为元素或结点数据结构之间关系在计算机中的表示有两种:顺序映像、非顺序映像,并由此得到两种存储结构:顺序存储、链式存储,前者运用相对位置表示数据元素间的逻辑结构,后者借助指针任何一个算法的设计取决于数据(逻辑 )结构 ,而实现依赖于存储结构数据类型就是一个值的集合
3、与定义在这个值集上的一组操作的总称数据类型分两种:原子类型、结构类型,前者不可分解 (例如 int、char、 float 、void ),后者结构类型由若干成分按某种结构组成,可分解 ,成分既可以就是非结构的也可以就是结构的(例:数组) 抽象数据类型 (Abstract Data Type ):就是指一个数学模型及定义在该模型上的一组操作(P8) 抽象数据类型格式如下: ADT 抽象数据类型名 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 1 页,共 24 页 - - - - - - - - - -
4、数据结构笔记数据对象 : 数据关系 : 数据操作 : ADT抽象数据类型名基本操作格式如下: 基本操作名 (参数表 ) 初始条件 : 操作结果 : 多形数据类型 (polymorphic data type): 就是指其值得成分不确定的数据类型(P9) 抽象数据类型可由固有数据类型来表示与实现(二)算法 ( 概念) 与算法分析 ( 时、空性能 ) 算法 (algorithm): 对特定问题求解步骤的一种描述算法 5 特性 :有穷、确定、可行、输入、输出1、有穷性 :算法必须在可接受的时间内执行有穷步后结束2、确定性 :每条指令必须要有确切含义,无二义性 ,并且只有唯一执行路径,即对相同的输入只
5、能得相同输出3、可行性 :算法中的操作都可通过已实现的基本运算执行有限次来完成4、输入 :一个算法有一到多个输入,并取自某个特定对象合集5、输出 :一个算法有一到多个输出,这些输出与输入有着某些特定关系的量算法设计要求 (好算法 ):正确性、可读性、健壮性、效率与低存储需求健壮性就是指对于规范要求以外的输入能够判断出这个输入不符合规范要求,并能有合理的处理方式。算法效率的度量: (1)事后统计 :程序运行结束后借助计算机内部计时功能,缺点一就是必须先运行依据算法编制的程序 ,二就是受限于计算机软硬件,导致掩盖了算法本身的优劣(2)事前分析估计: 精品资料 - - - 欢迎下载 - - - -
6、- - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 2 页,共 24 页 - - - - - - - - - - 数据结构笔记消耗时间影响因素:算法策略、问题规模、编程语言、编译程序产生的机器码质量、机器执行指令的速度撇开各种影响因素只考虑问题的规模(通常用整数量n 表示 ),记为问题规模的函数算法时间取决于控制结构(顺序 ,分支 ,循环 )与固有数据类型操作的综合效果书写格式 :T(n)= O(f(n) f(n) 为 n 的某个函数时间复杂度 :算法的渐近时间复杂度(asymptotic time complexity),它表示随问题规模的增大,算法执行
7、时间的增长率与f(n)的增长率相同以循环最深层原操作为度量基准频度 :该语句重复执行的次数算法的存储空间需求: 空间复杂度 (space complexity):算法所需存储空间度量,记作S(n)= O(f(n),其中 n 为问题规模的大小一、线性表(一)线性表基本概念线性表 (linear_list):n个数据元素的有限序列结构特点 :存在唯一的被称作“第一个”、“最后一个”的数据元素,且除了第一个以外每个元素都有唯一前驱,除最后一个以外都有唯一后继精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 3 页
8、,共 24 页 - - - - - - - - - - 数据结构笔记在复杂线性表中存在:数据项 -记录 -文件 ,例如每个学生情况为一个记录,它由学号、性别、数据项组成,多个学生记录组成一个文件在形如 (a1, 、,ai-1,ai,ai+1, 、,an) 中,ai-1 领先于 ai,ai 领先于 ai+1, 且形成直接前驱元素,直接后继元素关系元素个数 n 定义为线性表长度,n=0 为空表相关操作算法见书(P20) (二)线性表顺序存储结构与链式存储结构(1) 线性表顺序表示与实现线性表顺序存储在一组连续的存储单元中,链式存储则不要求;顺序结构可以随机访问,链式结构可以无限扩容确定存储位置 (
9、计算公式 ): 第 i 个元素 :LOC(ai)= LOC(a1)+(i-1)*L L 就是偏移量 ,即每个元素占用存储单元第 ai+1 个元素 :LOC(ai+1)= LOC(ai)+L a1( 起始地址或基地址) C 语言下标从“ 0”开始 ,则表中第i 个元素就是L、elem i-1 当对线性表进行操作时,被操作元素后面的元素角标会相应变化(前移、后移 ),算法 (P24) (2) 线性表链式表示与实现特点 :用一组任意的存储单元存储线性表的数据元素(存储单元不一定连续) 结点存储数据元素及直接后继的存储位置信息,两个域 :数据域与指针域,指针域中存储的信息称为指针或链,仅含有一个指针域
10、故又称线性链表或单链表链表的插入 :先增加一条指针再修改原指针头指针指向第一个数据元素的存储位置,最后一个结点的指针为空(NULL) 链表表示方法及算法(P28) 单链表第一个结点前加一个头结点Head, 其数据域可为空也可存储一些附加信息(链长等 ) 假设 p 就是指向线性表中i 个元素 (ai) 的指针 ,则 p-next 就是指向i+1 个数据元素在单链表中 ,取得第 i 个元素必须从头指针开始寻找,因此单链表就是非随机的存储结构线性表指逻辑结构,从抽象数据层面来说顺序表与链表指物理存储结构精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 -
11、 - - - - - - - - -第 4 页,共 24 页 - - - - - - - - - - 数据结构笔记逻辑结构 :离散、线性、层次、网状应用见书算法二、栈与队列(一)栈的基本概念栈(stack) 就是限定仅在表尾进行插入或删除操作的线性表表尾为栈顶 ,表头为栈底 ,遵循后进先出原理(last in first on,LIFO),不含元素则为空栈操作 :在栈顶插入 (入栈 )与删除 (出栈),栈初始化、判空、取栈顶元素(算法 P45) (二)栈的顺序存储与链式存储顺序栈 ,即栈的顺序存储结构就是利用一组连续的存储单元依次存放自栈底到栈顶的数据元素 ,同时附设指针top 指示栈顶元素在
12、顺序栈中的位置初始栈时不应限定栈的最大容量,基本做法就是先为栈分配一个基本容量,然后在应用过程中 ,不够用再逐段扩大(算法 P46) (三)递归栈与递归的实现:一个直接调用自己或通过一系列的调用语句间接地调用自己的函数,称为递归函数阶乘函数、 2 阶 Fibonacci 数列、 Ackerman函数、 3 阶 Hanoi 问题 (多阶呢? )(P54) 函数调用函数执行过程笔记(P56)(四)队列队列先进先出 (first in first out,FIFO),队尾一端插入,队首一端删除元素(日常排队 ) 队列与栈均有八种基本操作(P59), 队列一般用链表实现,栈用顺序表实现双端队列 (限定
13、操作的队列)(P60) (五)栈与队列的应用链队列、循环队列(P60), 离散事件模拟 (银行接待工作(P65) (六)特殊矩阵的压缩存储如何存储矩阵的元,使矩阵的运算有效进行。高级语言常用二维数组存储阵元面对如高阶矩阵,多值相同矩阵与多零元素矩阵进行压缩存储节省空间精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 5 页,共 24 页 - - - - - - - - - - 数据结构笔记压缩存储 :为多个值相同的元只分配一个空间,对零元不分配值相同元素或零元素具有分布规律则称为特殊矩阵,反之为稀疏矩阵具体
14、应用与算法(P95) 三、树与二叉树(一)树的基本概念树就是非线性数据结构,以分支关系定义的层次结构树就是 n(n=0) 个结点的有限集详见 (P118), 基本术语 (P120) (二)二叉树1. 二叉树的定义及其主要特征: 二叉树就是每个结点最多有两个子树的树结构。通常子树被称作 “左子树” (left subtree)与“右子树” (right subtree) 。性质 : 1、2、3、满二叉树 : 完全二叉树 : 4、5、2. 二叉树的顺序存储结构与链式存储结构顺序存储 ,用一组地址连续的存储单元依次自上而下、自左至右存储完全二叉树上的结点元素 ,即将完全二叉树上编号为i 的结点依次存
15、储在如上定义的一位数组下标为i-1 的分量中。1 2 3 4 5 6 7 8 9 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 6 页,共 24 页 - - - - - - - - - - 数据结构笔记链式存储 ,每个结点中至少包含三个域,左指针 ,数据 ,右指针 ,称作“二叉链表”增加一个双亲指针域,则称作“三叉链表”详见 P126-127 3. 二叉树的遍历遍历二叉树 ,每个结点均被访问一次,且仅有一次。 在限定先左后右的访问序列后,有三种遍历方式 :先序 (DLR), 中序 (LDR), 后续(L
16、RD) P129 算法 6、1(波兰式 ) 层次遍历 ,无论那种遍历方式,对含 n 个结点的二叉树,时间复杂度都为O(n), 空间复杂度也为 O(n) 。4. 线索二叉树的基本概念与构造摘要 :对于 n 个结点的二叉树,在二叉链存储结构中有n+1(2n-(n-1)个空链域 ,利用这些空链域存放在某种遍历次序下该结点的前驱结点与后继结点的指针,这些指针称为线索概念 :加上了线索的二叉链表称为线索链表,相应的二叉树称为线索二叉树(Threaded BinaryTree) 。构造方法 : (三)树与森林1. 树的存储结构链表结构 :1、双亲表示法2、孩子表示法3、孩子兄弟表示法详见 P135 2.
17、森林与二叉树转换左孩子右兄弟3. 树与森林的遍历先序、中序遍历,详见 P139 当以二叉链表做树的存储结构时,树的先序= 二叉树先序、树的后序= 二叉树中序(四)树与二叉树的应用1. 二叉排序树二叉排序树 (Binary Sort Tree),又称二叉查找树(Binary Search Tree),亦称二叉搜索树。定义 :二叉排序树或者就是一棵空树,或者就是具有下列性质的二叉树: 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 7 页,共 24 页 - - - - - - - - - - 数据结构笔记(1
18、)若左子树不空 ,则左子树上所有结点的值均小于它的根结点的值; (2)若右子树不空 ,则右子树上所有结点的值均大于它的根结点的值; (3)左、右子树也分别为二叉排序树; (4)没有键值相等的节点。查找 : 步骤 :若根结点的关键字值等于查找的关键字,成功。否则 ,若小于根结点的关键字值,递归查左子树。若大于根结点的关键字值,递归查右子树。若子树为空 ,查找不成功。2. 平衡二叉树 (AVL) 定义:它或者就是一颗空树,或者具有以下性质的二叉树:它的左子树与右子树的深度之差 (平衡因子 )的绝对值不超过1,且它的左子树与右子树都就是一颗平衡二叉树。平衡因子 (bf): 结点的左子树的深度减去右子
19、树的深度,那么显然 -1=bf=1 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 8 页,共 24 页 - - - - - - - - - - 数据结构笔记图一 ,图二都就是BST, 但只有图一就是AVL tree 3. 哈夫曼 (Huffman) 树与哈夫曼编码哈夫曼树就是一类带权路径长度最短的树,又称最优树。路径与路径长度概念:从树中一个结点到另一个结点之间的分支构成这两个结点之间的路径 ,路径上的分支数目称为路径长度。树的路径长度就是从树根到每一结点的路径长度之与。推广到一般情况,考虑带权结点 :
20、 结点的带权路径长度为从该结点到树根之间的路径长度与结点上的权值的乘积,树的带权路径长度为树中所有叶子结点的带权路径长度之与,记作 WPL= 带权路径长度WPL 最小的二叉树称为最优二叉树或哈夫曼树哈夫曼算法构造哈夫曼树(P145) 哈夫曼编码前缀编码 :设计长短不等的编码,任一字符的编码都不就是另一个字符的编码的前缀利用二叉树来设计前缀编码约定左分支表示字符“0”右分支表示字符“1”精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 9 页,共 24 页 - - - - - - - - - - 数据结构笔记
21、则从根结点到叶子结点的路径上分支字符组成的字符串作为该叶子结点字符的编码。一般情况 ,当带有权值时 ,本质上就就是设计一棵哈夫曼树,得到二进制前缀编码=哈夫曼编码 - 算法详见 P147 四、图(一)图的基本概念图就是一种数据结构,加上一组基本操作,构成的一种抽象数据类型详见 (P156) 途中数据元素通常称为顶点,V 就是顶点的有穷非空集合;VR 就是两个顶点的关系集合,若属于 VR,则 表示从 v 到 w 的弧,称 v 为弧尾 (初始点 ),w 尾弧头 (终结点 ) 此时图就是有向图,若 属于 VR 必有 属于 VR,则以无序对 , 表示 v 与 w 的一条边 ,此时称图为无向图完全图有向
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022 数据结构 笔记
限制150内