数据结构二.ppt_第1页
数据结构二.ppt_第2页
数据结构二.ppt_第3页
数据结构二.ppt_第4页
数据结构二.ppt_第5页
已阅读5页,还剩101页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1 公共基础的考试方式为笔试 与C语言 VisualBASIC VisualFoxPro Java Access VisualC 的笔试部分合为一张试卷 公共基础部分占全卷的30分 2 公共基础知识有10道选择题和5道填空题 1 算法的基本概念 算法复杂度的概念和意义 时间复杂度与空间复杂度 2 数据结构的定义 数据的逻辑结构与存储结构 数据结构的图形表示 线性结构与非线性结构的概念 3 线性表的定义 线性表的顺序存储结构及其插入与删除运算 4 栈和队列的定义 栈和队列的顺序存储结构及其基本运算 5 线性单链表 双向链表与循环链表的结构及其基本运算 6 树的基本概念 二叉树的定义及其存储结构 二叉树的前序 中序和后序遍历 7 顺序查找与二分法查找算法 基本排序算法 交换类排序 选择类排序 插入类排序 1 4算法和算法分析算法 algorithm 对特定问题求解步骤的一种描述 它是指令的有限序列 其中每一条指令表示一个或多个操作 算法着重于思想的描述 可能会省略很多细节 因此 算法需要进行适当修改才能变成程序在机器上实现 1 有穷性 一个算法必须总是在执行有穷步之后结束 且每一步都可在有穷时间内完成 2 确定性 算法的每一条指令必须有确切的含义 理解时不会产生二义性 并且在任何条件下都只有一条执行路径 3 可行性 一个算法是能行的 即算法中描述的操作都是可以通过已经实现的基本运算执行有限次来实现的 4 输入 一个算法有零个或多个输入 这些输入取自于某个特定的对象的集合 5 输出 一个算法有一个或多个输出 这些输出是同输入有着某些特定关系的量 算法特性 为比较同一问题的不同算法 通常做法是 从算法中选取一种对于所研究的问题来说是基本操作的原操作 以该基本操作重复执行的次数作为算法的时间量度 基本操作的原操作指多数情况下最深层循环内的语句中的原操作 基本操作重复执行的次数被称为语句频度 是问题规模n的某个函数f n 随问题规模n的增大 算法执行时间的增长率和f n 的增长率相同 称做算法的渐近时间复杂度 简称时间复杂度 记作 T n O f n 例1 在下列三个程序段中 含基本操作 x 的语句执行次数分别为多少 程序段的时间复杂度为多少 a x s 0 b for i 1 i n i x s x c for j 1 j n j for k 1 k n k x s x 答案 1 n n2O 1 O n O n2 例2 N N矩阵相乘for i 1 i n i for j 1 j n j c i j 0 for k 1 k n k c i j c i j a i k b k j 控制结构 答案 算法的执行时间与该基本操作 乘法运算 重复执行的次数n3成正比 记做T n O n3 基本操作 算法中基本操作重复执行的次数还随问题的输入集不同而不同 例如冒泡排序中 要求是将给定序列自小至大排列 交换序列中相临整数为基本操作 若初始序列自小至大有序 则基本操作执行次数为0 若初始序列自大至小有序 则基本操作执行次数为n n 1 2 我们约定 通常考虑最坏情况下的时间复杂度 由于我们关注的是增长率 所以只取执行次数的最高阶 O n2 算法的空间复杂度 空间复杂度是对一个算法在运行过程中临时占用存储空间大小的度量 记作 S n O f n 数据结构 datastructure 是相互之间存在一种或多种特定关系的数据元素的集合 数据元素相互之间的关系称为结构 可见 不同的 关系 构成不同的 结构 或者说 数据结构是相互之间存在一种或多种特定关系的数据元素的集合 数据结构概念的解释 3214 6587 9345 a1 3214 a2 6587 a3 9345 则在数据元素a1 a2和a3之间存在着 次序 关系 a1 a2 a2 a3 3214 6587 9345a1a2a3 6587 3214 9345a2a1a3 例 假设用三个4位的十进制数表示一个含12位数的十进制数 集合 数据元素间除 同属于一个集合 外 无其它关系线性结构 一个对一个 如线性表 栈 队列树形结构 一个对多个 如树图状结构 多个对多个 如图 根据数据元素间关系的不同特性 有四种基本结构 数据结构的形式定义为 数据结构是一个二元组Data Structure D S 其中 D是数据元素的有限集 S是D上关系的有限集 例4复数可取如下定义 复数是一种数据结构Complex C R 其中 C是含两个实数的集合 c1 c2 R P 而P是定义在集合C上的一种关系 c1是复数的实部 c2是复数的虚部 数据的逻辑结构 结构定义中的 关系 描述的是数据元素之间的逻辑关系 因此称为数据的逻辑结构 是对操作对象的一种数学描述 从操作对象抽象出来的数学模型 从逻辑关系上描述数据 与数据的存储无关 是独立于计算机的 数据的存储 物理 结构 是数据结构在计算机中的表示 又称映像 包括数据元素的表示和关系的表示 指数据元素及其关系在计算机存储器内的表示 存储结构是逻辑结构用计算机语言的实现 依赖于计算机语言 如一张学生表 数据元素之间的关系在计算机中有两种不同的表示方法 顺序映像和非顺序映像 得到两种不同的存储结构 顺序存储结构和链式存储结构 顺序映像特点 是借助元素在存储器中的相对位置来表示数据元素之间的逻辑关系 非顺序映像特点 是借助指示元素存储地址的指针来表示数据元素之间的逻辑关系 复数存储结构示意图 Z1 3 0 2 3iZ2 0 7 4 8i 顺序存储 1536 元素2 1400 元素1 1346 元素3 元素4 1345 h 链式存储 h Z1 3 0 2 3iZ2 0 7 4 8i 复数存储结构示意图 0415 链式存储 数据的逻辑结构 数据的存储结构 线性结构 非线性结构 顺序存储 链式存储 线性表 栈 队列 树形结构 图形结构 数据结构 线性结构的特点 在数据元素的非空有限集中 1 存在唯一的一个被称为第一个的数据元素 2 存在唯一的一个被称为最后一个的数据元素 3 除第一个之外 集合中的每个数据元素均只有一个前驱 4 除最后一个之外 集合中每个数据元素均只有一个后继 第2章线性表 线性表是一种最常用最简单的线性结构 2 1线性表的类型定义 线性表是n个数据元素的有限序列 每个数据元素可以是一个数或一个符号 也可是一页书 甚至更复杂的信息 如 26个英文字母的字母表 A B C Z 是一个线性表 表中的数据元素是单个字母字符 又如 某校从1978年到1983年各种型号的计算机拥有量的变化情况 可用线性表的形式给出 6 17 28 50 92 188 表中的数据元素是整数 在稍复杂的线性表中 一个数据元素可以由若干个数据项组成 这种情况下 把数据元素称为记录 含有大量记录的线性表称文件 线性表的顺序表示指的是用一组地址连续的存储单元依次存储线性表的数据元素 an ai a2 a1 b b L b i 1 L b n 1 L 存储地址 内存状态 图2 2线性表的顺序存储结构示意图设每个元素需占L个存储单元 以所占的第一个单元的存储地址作为数据元素的存储位置 2 2线性表的顺序表示和实现 Loc ai Loc a1 i 1 L 每个元素所占用的存储单元个数 LOC a1 是线性表的起始地址或基地址 线性表中第i 1个数据元素的存储位置Loc ai 1 和第i个数据元素的存储位置Loc ai 之间满足下列关系 Loc ai 1 Loc ai L线性表的第i个数据元素ai的存储位置为 线性表的这种机内表示称作线性表的顺序存储结构或顺序映象 称这种存储结构的线性表为顺序表 以元素在计算机内的物理位置相邻来表示线性表中数据元素之间的逻辑关系 每个数据元素的存储位置都和线性表的起始位置相差一个和数据元素在线性表中的位序成正比的常数 因此 只要确定了线性表的起始位置 线性表中任一数据元素都可随机存取 所以线性表的顺序存储结构是一种随机存取的存储结构 算法思想 检查i值是否超出所允许的范围 1 i n 1 若超出 则进行 超出范围 错误处理 将线性表的第i个元素和它后面的所有元素均向后移动一个位置 将新元素写入到空出的第i个位置上 使线性表的长度增1 算法2 在线性表中指定位置前插入一个元素 插入元素时 线性表的逻辑结构由 a1 ai 1 ai an 改变为 a1 ai 1 e ai an 在第i 1个数据元素和第i个数据元素之间插入新的数据元素 a1 ai 1 ai an 改变为 a1 ai 1 e ai an 表的长度增加 图2 3线性表插入前后的状况 a 插入前n 8 b 插入后n 9 插入25 算法思想 检查i值是否超出所允许的范围 1 i n 若超出 则进行 超出范围 错误处理 将线性表的第i个元素后面的所有元素均向前移动一个位置 使线性表的长度减1 算法3 在线性表中删除第i个元素 删除元素时 线性表的逻辑结构由 a1 ai 1 ai ai 1 an 改变为 a1 ai 1 ai 1 an a1 ai 1 ai ai 1 an 改变为 a1 ai 1 ai 1 an ai 1 an 表的长度减少 图2 4线性表删除前后的情况 a 删除前n 8 b 删除后n 7 删除24 栈 后进先出的线性表 是限定仅在表尾进行插入和删除操作的线性表 表尾端为栈顶 表头端为栈底 不含元素的栈为空栈 3 1栈 3 1 1抽象数据类型栈的定义 设栈s a1 a2 ai an a1是栈底元素 an是栈顶元素 a1 a2 an 进栈 出栈 栈顶 栈底 用铁路调度站表示栈 举例1 家里吃饭的碗 通常在洗干净后一个一个地落在一起存放 在使用时 若一个一个地拿 一定最先拿走最上面的那只碗 而最后拿出最下面的那只碗 举例2 在建筑工地上 使用的砖块从底往上一层一层地码放 在使用时 将从最上面一层一层地拿取 栈有两种存储表示方法 顺序栈 链栈 顺序栈 即栈的顺序存储结构是利用一组地址连续的存储单元依次存放自栈底到栈顶的数据元素 同时附设指针top指示栈顶元素在顺序栈中的存储位置 3 1 2栈的表示和实现 栈的初始化操作为 按设定的初始分配量进行第一次存储分配 base称为栈底指针 在顺序栈中 它始终指向栈底的位置 若base值为NULL 表明栈结构不存在 称top为栈顶指针 初值指向栈底 即top base为栈空 每当插入新的栈顶元素时 指针top增1 删除栈顶元素时 指针top减1 因此 非空栈中的栈顶指针始终在栈顶元素的下一个位置上 top base top base top base top base 队列 是先进先出 FIFO 的线性表 只允许在表的一端进行插入 而在另一端进行删除元素的线性表 a1 a2 a3 a4 an 1 an 图3 8队列示意图 队头 队尾 3 4队列 3 4 1队列的定义与运算 允许插入的一端叫队尾 允许删除的一端称为队头 假设队列q a1 a2 an a1是队头元素 an队尾元素 出队列 入队列 在队列的顺序存储结构中 除了用一组地址连续的存储单元依次存放从队列头到队列尾的元素之外 需附设两个front和rear分别指示队列头元素及队列尾元素的位置 3 4 3循环队列 队列的顺序表示和实现 为在c语言中描述方便起见 在此约定 初始化建空队列时 令front rear 0 每当插入新的队列尾元素时 尾指针增1 每当删除队列头元素时 头指针增1 在非空队列中 头指针始终指向队列头元素 而尾指针始终指向队列尾元素的下一个位置 3210 a rear front 0 队空 e3 e4 e1 e2出队 e4入队 队满 Q rear 4 e1 e2 e3 Q front b e1 e2 e3入队 队空时 令rear front 0 当有新元素入队时 尾指针加1 当有元素出队时 头指针加1 故在非空队列中 头指针始终指向队头元素 而尾指针始终指向队尾元素的下一位置 Q front Q front 不能继续插入 数组会越界 一个巧妙的办法是将顺序队列臆造为一个环状的空间 称为循环队列 Q rear Q front Q rear Q front 队空 front rear队满 front rear 队空 一般情况 队满 初始状态 rear front 初始状态 rear front J4 J5 J6 2 3 4 5 0 1 rear front J8 J7 队空 一般情况 解决方案 少用一个元素空间 队空 Q front Q rear队满 Q rear 1 MAXQSIZE Q front 队满 2 3线性表的链式表示和实现 线性表的链式存储结构特点 用一组任意的存储单元 可以是连续的 也可以是不连续的 存放线性表的数据元素 为了表示每个数据元素与其直接后继之间的逻辑关系 对数据元素ai来说 除了存储其本身的信息之外 还需存储一个指示其直接后继的信息 即直接后继的存储位置 这两部分信息组成数据元素ai的存储映象 称为结点 它含有两个域 存储数据元素信息的域称为数据域 存储直接后继存储位置的域称为指针域 指针域中存储的信息称作指针或链 数据域指针域 结点 2 3 1线性链表 43 13 1 NULL 37 7 19 25 图2 6线性链表的逻辑状态 图2 5线性链表示例 头指针 空指针 单链表操作的实现 GetElem L L i e 取第i个数据元素 ListInsert L L i e 插入数据元素 ListDelete L L i e 删除数据元素 CreateList L L n 生成含n个数据元素的链表 线性表的操作GetElem L L 3 e 在单链表中的实现 j 1 2 3 线性表的操作ListInsert L i e 在单链表中的实现 有序对改变为和 线性表的操作ListDelete L L i e 在链表中的实现 有序对和改变为 1查找从头指针指向的结点开始往后扫描 直到后面已经没有结点或下一结点数据域为x为止 2插入 1 取得结点设为p 2 寻找包含x的前一结点 设为q 3 将结点p插入到q之后使结点p指向包含x的结点使结点q的指针域改为指向p 3删除 1 寻找包含x的前一个结点 设为q 2 将q后的结点p从表中删除 即让q的指针指向p指向的结点 a1a2 an 和单链表的差别仅在于 判别链表中最后一个结点的条件不再是 后继是否为空 而是 后继是否为头结点 循环单链表 特点 最后一个结点的指针域指向头结点 整个链表形成一个环 由此 从表中任一结点出发均可找到其它结点 空表 2 3 2循环链表 在每个结点中有两个指针域 一个指向直接后继 一个指向直接前驱 typedefstructDuLNode ElemTypedata structDuLNode prior structDuLNode next DuLNode DuLinkList 线性表的双向链表存储结构 2 3 3双向链表 双向循环链表 空表 非空表 a1a2 an 双向链表有循环表 链表中有两个环 在双向链表中 若d为指向表中某一结点的指针 即d为DuLinkList型变量 则显然有d next prior d prior next d 双向链表的操作特点 查询 和单链表相同 插入 和 删除 时需要同时修改两个方向上的指针 树 tree 是n n 0 个结点的有限集 在任意一棵非空树中 1 有且仅有一个特定的称为根的结点 2 当n 1时 其余结点可分为m m 0 个互不相交的有限集T1 T2 Tm 其中每一个集合本身又是一棵树 并且称为根的子树 6 1树的定义和基本术语 线性结构 树型结构 第一个数据元素 无前驱 根结点 无前驱 最后一个数据元素 无后继 多个叶子结点 无后继 其它数据元素 一个前驱 一个后继 其它数据元素 一个前驱 多个后继 6 2二叉树 二叉树 或为空树 或是由一个根结点加上两棵分别称为左子树和右子树的 互不相交的二叉树组成 A B C D E F G H K 根结点 左子树 右子树 特点 1 每个结点至多有二棵子树 即不存在度大于2的结点 2 二叉树的子树有左 右之分 且其次序不能任意颠倒 二叉树的五种基本形态 空树 只含根结点 L R R 右子树为空树 L 左子树为空树 左右子树均不为空树 基本术语 结点 结点的度 树的度 叶子 终端 结点 分支 非终端 结点 数据元素 若干指向子树的分支 结点拥有的子树数 树中所有结点的度的最大值 度为零的结点 度不为零的结点 D H I J M 子孙 以某结点为根的子树中的任一结点 A B C D E F G H I J M K L 孩子 结点的子树的根 双亲 该结点称为孩子的双亲 兄弟 同一个双亲的孩子之间互称兄弟 祖先 从根到该结点所经分支上的所有结点 有序树 子树之间存在确定的次序关系 不能互换 无序树 子树之间不存在确定的次序关系 树的深度 树中结点的最大层次 堂兄弟 其双亲在同一层的结点 结点的层次 假设根结点的层次为1 若某结点在第l层 则其子树的根结点层次为l 1 结点A的度 结点B的度 结点M的度 叶子 结点A的孩子 结点B的孩子 结点I的双亲 结点L的双亲 树的度 结点A的层次 结点M的层次 树的深度 3 2 0 B C D E F K L F G M I J 3 D E 兄弟 兄弟 1 4 4 堂兄弟 二叉树的性质 性质1 在二叉树的第i层上至多有2i 1个结点 i 1 证明 用归纳法证明之 i 1时 只有一个根结点 是对的 假设对所有j 1 j i 命题成立 即第j层上至多有个结点那么 第i 1层至多有个结点又二叉树每个结点的度至多为2 第i层上最大结点数是第i 1层的2倍 即故命题得证 性质2 深度为k的二叉树上至多含2k 1个结点 k 1 证明 基于上一条性质 深度为k的二叉树上的结点数至多为20 21 2k 1 2k 1 a1 1 qn 1 q 性质3 对任何一棵二叉树 若它含有n0个叶子结点 n2个度为2的结点 则必存在关系式 n0 n2 1 证明 设二叉树上结点总数n n0 n1 n2又二叉树上分支总数b n1 2n2而n b 1 n1 2n2 1由此 n0 n2 1 两类特殊的二叉树 指的是深度为k且含有2k 1个结点的二叉树 满二叉树 树中所含的n个结点和满二叉树中编号为1至n的结点一一对应 完全二叉树 完全二叉树特点 1 叶子结点只可能在层次最大的两层上出现 2 对任一结点 若其右分支下子孙的最大层次为l 则其左分支下子孙的最大层次必为l或l 1 性质4 具有n个结点的完全二叉树的深度为 log2n 1 证明 设完全二叉树的深度为k则根据第二条性质得2k 1 第k层第一个结点的编号 n 2k 第k 1层第一个结点的编号 即k 1 log2n k因为k只能是整数 因此 k log2n 1 性质5 若对含n个结点的完全二叉树从上到下且从左至右进行1至n的编号 则对完全二叉树中任意一个编号为i的结点 1 若i 1 则该结点是二叉树的根 无双亲 如果i 1 编号为 i 2 的结点为其双亲结点 2 若2i n 则该结点无左孩子 否则 编号为2i的结点为其左孩子结点 3 若2i 1 n 则该结点无右孩子结点 否则 编号为2i 1的结点为其右孩子结点 1 2 3 11 4 5 8 9 12 6 7 10 第k层上最后一个结点的编号是2k 1 它的右孩子是第k 1层上最后一个结点 编号是2k 1 1 右孩子编号是它的双亲结点编号的 2k 1 2 1 左孩子的编号是 2k 1 2所以 编号为i的结点的左孩子结点编号是2i 右孩子结点编号是2i 1 双亲结点编号 i 2 i 2 2i 3 i i 1 2i 2i 1 2i 2 填空题 假定一棵三叉树的结点个数为50 则它的最小高度为 最大高度为 5 50 最小高度是满三叉树 a1 1 qn 1 q 3n 1 2 求出等比数列和等于50的n值 34 81对其上取整 最大高度为单支树 5 设二叉树有15个结点且根结点处于第1层 则其高度为 A 4 B 5 C 不确定 6 设高度为h二叉树只有度为2和度为0的结点 则该二叉树中所含结点至少有个 C 2h 1 除第一层之外 每层只有2个结点 二叉树的存储结构 二 链式存储结构 一 顺序存储结构 二 二叉树的链式存储结构 1 二叉链表 2 三叉链表 A D E B C F root lchilddatarchild 结点结构 1 二叉链表 F 在n个结点的二叉链表中 有n 1个空指针域 A D E B C F root 2 三叉链表 pare

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论