数据结构(线性表、树、图)
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据结构
第一部分: 第一部分:线性结构
5 ٭广义表
▪ 定义 是线性表的推广一,由零个或多个单元素或子表所组成的有限序列。一般记为: 是线性表的推广一,由零个或多个单元素或子表所组成的有限序列。一般记为: LS=(a1,a2,…,an)其中 ( )其中ai(1<=i<=n) 注意与线性表的区别: 注意与线性表的区别: ▪ 基本操作 取表头: 取表头:head(LS) 取表尾: 取表尾 tail(LS) ▪ 特点: 特点: 多层次结构, 多层次结构,即广义表的元素可以是子表 广义表的元素可以是已经定义好的广义表 是一个递归的表, 是一个递归的表,即广义表的元素可是本广义表的名字 ▪ 存储结构
存储时,可以将其压缩存储在一维数组中, 存储时,可以将其压缩存储在一维数组中,并建立起每个非零元素在矩阵中的位置与其 一维护数组中的位置之间的对应关系。 一维护数组中的位置之间的对应关系。
▪ 稀疏矩阵
– 非零元素的个数远远少于零元素的个数,且非零元素的分布没有规律。 非零元素的个数远远少于零元素的个数,且非零元素的分布没有规律。
(1)初始化队 InitQueue(Q) 初始化队 (2)判队空 Empty(Q) 判队空 (3)入队 EnQueue(Q,x) 入队 (4)出队 DeQueue(Q) 出队 (5)读队头元素 FrontQue(Q) 读队头元素
数据结构
第一部分: 第一部分:线性结构
▪ 队列的存储结构
– 顺序存储(顺序队列) 顺序存储(顺序队列) 利用一组地址连续的存储单元存放队列中的元素, 利用一组地址连续的存储单元存放队列中的元素,同时设置队头指针和队尾 指针,分别表示当前的队首元素和队尾元素。 指针,分别表示当前的队首元素和队尾元素。 思考:(1)为什么要引入循环队列? 为什么要引入循环队列 思考 为什么要引入循环队列? (2)什么叫假溢出?如何形成的? 什么叫假溢出? 什么叫假溢出 如何形成的? – 链式存储(链队列) 链式存储(链队列)
、3 ٭存储结构: 、存储结构:
▪ 顺序存储结构
– 含义:用一组连续的存储单元存放线性表中的数据元素。 含义:用一组连续的存储单元存放线性表中的数据元素。
– 特点:逻辑相邻的元素,物理位置也相邻。 特点:逻辑相邻的元素,物理位置也相邻。 – 优点和缺点:存取方便,插入删除操作需要移动大量元素。 优点和缺点:存取方便,插入删除操作需要移动大量元素。
通常采用链式存储结构:有两种方法,即同层结点法, 通常采用链式存储结构:有两种方法,即同层结点法,表头表尾法
数据结构
第二部分 非线性结构
一、树
( ٭一)树的定义及运算 、1 ٭树的定义 、
▪ 树是n(n>=0)个节点的有限集合,当n=0时,称为空树,在任一非空树中: 树是 ( )个节点的有限集合, 时 称为空树, 在任一非空树中: (1)有且仅有一个称为根的节点; )有且仅有一个称为根的节点; (2)其余节点可分为 (m>=0) )其余节点可分为m
▪ 队列的应用: 队列的应用:
– 常用于需要排队的场合:比如操作系统中处理打印任务,离散事件的计算模 常用于需要排队的场合:比如操作系统中处理打印任务, 拟等。 拟等。
数据结构
第一部分: 第一部分:线性结构
3 ٭串 即字符串,是一种特殊的线性表,它的数据元素仅由一个字符组成。 即字符串,是一种特殊的线性表,它的数据元素仅由一个字符组成。 ▪ 串的定义 串的定义
▪ 栈的应用:表达式求值,括号匹配,递归转非递归。 栈的应用:表达式求值,括号匹配,递归转非递归。
.2 ٭队列
▪ 定义:是一种先进先出(FIFO)的线性表,只允许在表的一端插入元素, 定义:是一种先进先出( )的线性表,只允许在表的一端插入元素, 表的另一端删除元素。 表的另一端删除元素。
▪ 基本运算: 基本运算:
数据结构
第一部分: 第一部分:线性结构
)2( ٭矩阵 )
在数据结构中,我们研究的是如何存储矩阵中的元素。 在数据结构中,我们研究的是如何存储矩阵中的元素。 ▪ 特殊矩阵 指矩阵中的元素分布有一定的规律的矩阵。例如:对称矩阵、三角矩阵、 指矩阵中的元素分布有一定的规律的矩阵。例如:对称矩阵、三角矩阵、对 角矩阵。 角矩阵。
4 ٭数组、矩阵和广义表 数组、
▪ (1)数组 )
– 定义:线性表的元素又是一个线性表,是定长线性表在维数上的一个扩张。 定义:线性表的元素又是一个线性表,是定长线性表在维数上的一个扩张。 – 特点: 特点: .数据元素数目固定 数据元素数目固定 .数据元素具有相同数据类型 数据元素具有相同数据类型 .数据元素的下标关系具有上下界的约束且下标有序 数据元素的下标关系具有上下界的约束且下标有序 – 两个基本运算 两个基本运算 其一:给定一组下标,存取相应的数据元素; 其一:给定一组下标,存取相应的数据元素; 其二:给定一组下标,修改相应的数据元素中某个数据项的值。 其二:给定一组下标,修改相应的数据元素中某个数据项的值。 – 存储结构 由于数组一般不作插入和删除运算, 由于数组一般不作插入和删除运算,所以数组中数据元素个数和元素之间 的 关系固定不变,因此适合采用顺序存储结构。 关系固定不变,因此适合采用顺序存储结构。 .二维数组的存储方式有两种: 二维数组的存储方式有两种: 二维数组的存储方式有两种 行优先: 行优先: 列优先: 列优先:
▪ 串的模式匹配 串的模式匹配
– 即子串的定位操作,是各种串处理中最重要的运算之一。有以下两种算法: 即子串的定位操作,是各种串处理中最重要的运算之一。有以下两种算法: (1)朴素模式匹配算法 ) 基本思想: 基本思想:P432 (2)改进的模式匹配算法 ) 基本思想: 基本思想:P433
数据结构
第一部分: 第一部分:线性结构
数据结构
第一部分: 第一部分:线性结构
二、栈和队列 .1 ٭栈
▪ 定义
– 只能通过它的一端来实现数据存储和检索的 线性结构,也称为后进先出(或先进后出) 线性结构,也称为后进先出(或先进后出)的 线性表。 线性表。
▪ 基本运算
– – – – – 初始化栈: 初始化栈:InitStack(S) 判栈空: 判栈空 StackEmpty 入栈:Push(S,x) 入栈 出栈:Pop(S) 出栈 读栈顶元素:Top(s) 读栈顶元素
– 是仅由字符构成的有限序列,是取值范围受限的线性表。一般记为: 是仅由字符构成的有限序列,是取值范围受限的线性表。一般记为: S=‘a1a2…an’,其中 是串名,单引号括起来的字符序列是串值。 是串名, ,其中S是串名 单引号括起来的字符序列是串值。
▪ 几个相关的基本概念 几个相关的基本概念
– 空串:长度为零的串,不包含任何字符。 空串:长度为零的串,不包含任何字符。 – 空格串:由一个或多个空格组成的串。 空格串:由一个或多个空格组成的串。 – 子串 : 由串中任意长度的连续字符构成的序列称为子串 。 空串是任意串的 子串:由串中任意长度的连续字符构成的序列称为子串。 子串。 子串。 – 串相等:两个串长度相等,且对应位置上的字符也相同。 串相等:两个串长度相等,且对应位置上的字符也相同。 – 串比较:比较大小时,以ASCII码值作为依据。 串比较:比较大小时, 码值作为依据。 码值作为依据
▪ (1)从问题入手,分析和研究数据结构的特性,选择适当的逻辑结构、 从问题入手,分析和研究数据结构的特性,选择适当的逻辑结构、 从问题入手 存储结构及相应的操作方法。 存储结构及相应的操作方法。 ▪ (2)并掌握时间复杂度和空间复杂度的概念。 并掌握时间复杂度和空间复杂度的概念。 并掌握时间复杂度和空间复杂度的概念
▪ 串的存储结构 串的存储结构
– 静态存储 即串的顺序存储结构) 静态存储(即串的顺序存储结构 即串的顺序存储结构 用一组地址连续的存储单元来存储串值的字符序列。( 。(在程序设计语言中 用一组地址连续的存储单元来存储串值的字符序列。(在程序设计语言中 可借助字符数组定义串的存储空间)。 可借助字符数组定义串的存储空间)。 – 链式存储 用链表存储串中的字符,每个节点中可以存储一个字符, 用链表存储串中的字符,每个节点中可以存储一个字符,也可以存储多个 字符,注意存储密度问题,因为它直接影响到串和处理效率 因为它直接影响到串和处理效率。 字符,注意存储密度问题 因为它直接影响到串和处理效率。
.3 ٭按逻辑关系分类 按逻辑关系分类
▪ 线性结构 包括线性表、栈、队列、数组、串等 线性结构(包括线性表 包括线性表、 队列、数组、串等) ▪ 非线性结构(树、图) 非线性结构 树
数据结构
第一部分: 第一部分:线性结构
一、线性表
٭最常见的一种线性结构,有两种存储方法:顺序存储和链式存Hale Waihona Puke Baidu 最常见的一种线性结构,有两种存储方法:
、1 ٭定义: 、定义:
▪ N个元素的有限序列,n≥0,通常表示为(a1,a2,…,an) 个元素的有限序列, 个元素的有限序列 ,通常表示为( )
、2 ٭特点: 、特点:
▪ 元素集合中存在唯一称作“第一个”和唯一“最后一个”元素,除 元素集合中存在唯一称作“第一个”和唯一“最后一个”元素, 第一个元素外,每个元素均只有一个直接前驱;除最后一个元素外, 第一个元素外,每个元素均只有一个直接前驱;除最后一个元素外, 序列中的每个元素只有一个直接后继。 序列中的每个元素只有一个直接后继。
第八章 数据结构
数据结构概要
.1 ٭数据结构定义: 数据结构定义 数据结构 ▪ 指数据元素的集合及元素之间的关系和构造方法,可以用二元组 指数据元素的集合及元素之间的关系和构造方法, 表示为: ( , ),其中A是数据元素的非空有限集合 ),其中 是数据元素的非空有限集合, 表示为:B=(A,R),其中 是数据元素的非空有限集合,R 是定义在A上的关系的非空有限集合 是定义在 上的关系的非空有限集合。 .2 ٭要达到的目标: 要达到的目标 要达到的
数据结构
第一部分: 第一部分:线性结构
. 链式存储结构
– 含义: 含义: 存储数据元素的同时必须存储元素之间的关系。用节点来存储数据元素, 存储数据元素的同时必须存储元素之间的关系。用节点来存储数据元素, 节点地址可以连续,也可以不连续。 节点地址可以连续,也可以不连续。
– 节点结构: 节点结构: – 节点的插入和删除操作
个互不相交的有限集T1、 、 个互不相交的有限集 、T2、 …、Tm,其中 又都是一棵树, 其中Ti又都是一棵树 、 其中 又都是一棵树, 并且乐为根节点的子树。 并且乐为根节点的子树。 递归定义) (递归定义) 、2 ٭树的基本概念 、 与树相关的概念有: 与树相关的概念有: 双亲、孩子、 双亲、孩子、兄弟 节点的度、叶子节点、节点的层次、树的高度、有序(无序)树 节点的度、叶子节点、节点的层次、树的高度、有序(无序) 3、树的遍历 、 按照某种次序,获取树中全部节点的信息。 按照某种次序,获取树中全部节点的信息。
▪ 存储结构
– 顺序存储:(顺序栈)指用一组地址连续的存储单元依次存储自 顺序存储:(顺序栈) :(顺序栈 栈顶到栈底的数据元素,同时附设指针top指示栈顶元素的位置 指示栈顶元素的位置。 栈顶到栈底的数据元素,同时附设指针 指示栈顶元素的位置。
数据结构
第一部分: 第一部分:线性结构
– 链式存储(链栈):为了克服 链式存储(链栈): ):为了克服 顺序栈可能存在上溢的不足,采 顺序栈可能存在上溢的不足, 用钻链表作为存储结构的栈。 用钻链表作为存储结构的栈。
▪ 基本操作
– 赋值 赋值strAssign(s,t): 将串 赋给串 将串t赋给串 赋给串s – 连接Concat(s,t) : 串t接续在串 的尾部,形成一个新串。 接续在串s的尾部 形成一个新串。 连接 接续在串 的尾部,
数据结构
第一部分: 第一部分:线性结构
– 求串长 求串长StrLength(s) – 串比较 串比较StrCompare(s,t) 返回值 、0、1分别表示 返回值-1、 、 分别表示 分别表示s<t,s=t,s>t – 求子串SubString(s,start,len) 求子串
–
插入操作
删除操作
▪ 数据结构
第一部分: 第一部分:线性结构
▪ 4.其他几种链表结构: 其他几种链表结构 – 双向链表: 双向链表:
每个节点包含两个指针, 每个节点包含两个指针,分别指出当前节点元素的直接前驱和直接 后继。 后继。
– 循环链表: 循环链表:
– 静态链表: 静态链表:
借助数组来描述线性表的链式存储结构