980 likes | 1.19k Views
“ 数据结构 ” 复习指导. 2009.6. 一、各章节主要知识点选讲 二、对相关算法的要求和举例 三、习题选讲. 第 1 章 绪论 . 1. 数据结构的基本概念 数据元素:是数据的基本单位,可以是 数据对象:是数据的子集,是性质相同的数据元素的集合 数据结构 : 是相互之间存在一种或多种特定关系的数据元素的集合,数据元素间的关系称为结构. 一个数据项 多个数据项复合组成. 第 1 章 绪论 . 逻辑结构:数据元素间的逻辑(抽象)关系,与计算 机无关,同一种逻辑结构可以有不同的存
E N D
“数据结构”复习指导 2009.6
一、各章节主要知识点选讲 二、对相关算法的要求和举例 三、习题选讲
第1章 绪论 1.数据结构的基本概念 • 数据元素:是数据的基本单位,可以是 • 数据对象:是数据的子集,是性质相同的数据元素的集合 • 数据结构:是相互之间存在一种或多种特定关系的数据元素的集合,数据元素间的关系称为结构 一个数据项 多个数据项复合组成
第1章 绪论 • 逻辑结构:数据元素间的逻辑(抽象)关系,与计算 机无关,同一种逻辑结构可以有不同的存 储结构(物理结构 例:链式 顺序) • 物理结构:数据的逻辑结构在计算机中的表示 (数据元素的表示和关系的表示) • 4种基本结构: 集合 线性(一对一) 树形(一对多) 图状(多对多)
第1章 绪论 2.算法的基本概念 • 算法的5个特性:(有穷性、确定性、可行性、零个或 多个输入、一个或多个输出) • 时间复杂度:评估算法的重要标准之一,能较好的体现算 法本身的时间效率,与计算机硬件无关 (基本操作、问题的规模、基本操作的频度是 问题规模的函数) 例: n个数中找最大的
第2章 线性表 1.线性表的逻辑结构 • 前驱、后继 • 一对一的关系 2.线性表的顺序存储结构(使用连续的存储空间) • 顺序表 特点:可以随机访问 • 插入:若有n个元素的顺序表,在第i个元素之前插入,也即插入元素作为第i个元素 i=n+1时移动元素次数为0; i=1时移动元素次数为n; 一般情况n-i+1; 等概率情况下平均n/2.
第2章 线性表 • 删除 i=1时 移动元素次数为n-1; i=n时移动元素次数为0; 一般情况移动次数n-i; 等概率平均情况(n+1)/2. • 插入、删除的基本操作为元素移动 时间复杂度为O(n)
第2章 线性表 3.线性表的链式存储结构(存储空间可以连续也可以不连续) • 链表(结点、头指针、尾结点、带头结点的链表) 特点:不能随机访问
第2章 线性表 4.单向链表 • 静态法(说明变量)建立链表 • 尾插法建立链表(头指针、q始终指向尾结点、p生成新结点) • 头插法建立链表(头指针、q始终指向头结点、p生成新结点) • 插入(在第i个结点前插入新结点,p生成新结点,q指向第 i-1个结点…) • 删除(删除第i个结点,q指向第i个结点的前驱(第i-1个结 点),p指向第i个结点) • 四种操作都必须知道操作位置结点的前驱结点的指针
第2章 线性表 5.单向循环链表 • 特点:从任一结点开始可以访问到表中其它结点,但 不能随机访问 • 由单向链表构造单向循环链表 • 如何判断单向循环链表 • 把两个单向循环链表链成一个 单向循环链表(给定两个链表的尾指针,由尾指针 可以得到链表的头指针) 6.双向循环链表 • 存储结构 • 特点 • 插入、删除
第3章 栈和队列 1.栈 • 栈是运算受限的线性表 插入、删除限定在表的尾部进行(栈顶) • 栈顶、栈底、空栈、栈顶元素 • 顺序栈(连续的存储空间) 用结构体变量实现的顺序栈 结构体变量 规定:栈底为数组下标为0的一端 溢出:栈顶指针(下标)为-1时为空,栈顶为MaxSize-1时 栈满 上溢(满)、下溢(空) 数组(栈元素) 整型变量(栈顶指针)
第3章 栈和队列 • 链栈(用链式存储结构实现的栈) • 可以用不带头结点的单向链表实现链栈 • 存储结构struct node *top; • 基本操作:初始化、判栈空、进栈、出栈(与不带头 结点的单向链表的头部插入、头部删除相同) 链栈只有空和非空两种状态,没有栈满的情况
第3章 栈和队列 2.队列 • 队列是运算受限的线性表 允许在队尾插入,在队头删除 • 队头、队尾、空队列 顺序队列(顺序存储的队列) 用结构体变量实现的顺序队列 结构体变量 数组(队元素) 整型变量1:front(队头指针) 整型变量2:rear(队尾指针)
第3章 栈和队列 队列初始化:队头指针、队尾指针均置为0 队头指针front指向队头元素 队尾指针rear指向队尾元素的下一个位置 队列为空时front=rear 队列满时rear=MaxSize 上溢:队列已满进行入队操作 假上溢:队列未满,但尾指针已超越存储空间上界 下溢:队列已空,要进行出队操作 操作:初始化、判队空、入队、出队、取队头元素
第3章 栈和队列 3.循环队列 • 为解决“假上溢”问题 • 设想队列为一个首尾相接的圆环 • 为了区别循环队列的队满和队空规定少用一个存储空间 尾指针加1等于头指针时为队满 即: (rear+1)% MaxSize=front 当front=rear时为队空
第3章 栈和队列 4.链队列 • 可以用一个带头结点的单向链表存储队元素, 在表头删除,在表尾插入 • 存储结构: struct node *front,*rear; • 基本操作 初始化、判队空、入队、出队
第4章 串 1.C语言中‘A’表示字符A,“A”表示字符串A,‘A’占一个字节,“A”占两个字节,“ABC”占四个字节。 2.串的存储结构有顺序和链接存储两种 3.字符串的输入输出函数中“%s” 字符的输入输出函数中“%c” 4.串的运算函数 求串长、串的连接、串的比较等
第5章 数组和广义表 1.数组的顺序存储结构(一维数组) 按行优先、按列优先 C语言的数组下标从0开始(使用时可有用户确定开始位置) 2.矩阵的压缩存储 • 对称矩阵: 用一维数组存储,例a5,3:1+2+3+4=10,a5,3是第13号元素,(第5行元素的序号为11-15) 若一维数组a从0开始存储,则a5,3对应a【12】 从1开始存储,则对应a【13】 • 稀疏矩阵 用三元组存储非零元素(行,列,数组元素)
第6章 树和二叉树 1.树的基本术语 叶结点(终端结点)、分支结点(非叶结点) 结点的度(引出结点的个数) 孩子结点、双亲结点、兄弟结点 结点的层数、树的深度 2.树的性质 P90性质1-性质3,建议与二叉树对照 树的逻辑结构:一对多(例一本书的目录) A B C D E F G I H
第6章 树和二叉树 3.二叉树的基本概念和性质 性质1 二叉树上终端结点数等于双分支结点数加1,(哈夫曼树中除叶结点外全是双分支结点) 要求:在结点总数、叶结点数、双分支结点数、单分支结点数之间能进行相关计算 A B C D E
第6章 树和二叉树 • 性质2 二叉树上第i层至多有2i-1个结点 • 性质3 深度为h的二叉树最多有2h-1个结点 1+2+4+8=24-1=15
第6章 树和二叉树 性质4 二叉树中顺序编号为i的结点 左孩子:2i 右孩子:2i+1 术语:满二叉树 完全二叉树
第6章 树和二叉树 • 要求:完全二叉树总结点数、层数、最高层的结点数之间的计算
第6章 树和二叉树 4.二叉树的存储结构 • 顺序存储 树的序号与一维数组的下标对应 • 链接存储结构 left data right
第6章 树和二叉树 5.二叉树的遍历 • 递归定义:二叉树或者是一棵空树,或者是一棵由一个根结点和互不相交的分别称为根的左子树和右子树所组成的非空树(左、右子树可以为空树),左、右子树也同样是一棵二叉树 A B C
第6章 树和二叉树 • 遍历:按照一定次序访问每个结点一次且仅一次 • 遍历规则:(先左后右,以访问根的次序区分遍历方法) 先序:根、左子树、右子树 中序:左子树、根、右子树 后序:左子树、右子树、根 • 递归算法程序(p97) • 手工遍历 例 后序遍历: 5,4,2,6,9,8,7,3,1 1 2 3 4 6 7 8 5 9
第6章 树和二叉树 例中序遍历:CBDAEGF 先序遍历:ABCDEFG 后序遍历:CDBGFEA • 二叉树的非递归遍历算法(了解) • 二叉树的其它运算(了解) A B E C D F G
第6章 树和二叉树 6.哈夫曼树 • 结点的带权路径长度(路径长×结点的权) • 树的带权路径长度 WPL= WiLi 所有叶结点的带权路径长度之和: 4x3+2x2+1x1=… 1 2 4
第6章 树和二叉树 • 哈夫曼树(最优树) n个带权叶结点的所有二叉树中,WPL最小的树 性质:除叶结点外其余结点全为双分支结点(要求掌握哈夫曼树总结点数、叶结点数、分支结点数之间的计算) • 构造Huffman树和Huffman编码
第6章 树和二叉树 例:权重:a, b, c, d, e 3, 5, 6, 7, 9 a:000 b:001 c:10 d:11 e:01 0 30 0 1 17 13 0 1 0 1 8 9 6 7 0 1 5 3
第6章 树和二叉树 7.由遍历序列确定二叉树 • 先序 中序(先序确定根结点,中序划分左右子树) • 后序 中序(后序确定根结点,中序划分左右子树) 例 先序遍历序列为stuwv,中序遍历序列为uwtvs 由先序:s是根, 由中序:左子树uwtv,右子树为空 由先序:t是左子树根,由中序:左子树uw,右子树v 由先序:u是左子树根,由中序:左子树空,右子树w s t v u w
第6章 树和二叉树 例:后序遍历:efcdb,中序ecfbd 由后序:b为根 由中序:左子树ecf,右子树d 由后序:c为根 由中序:左子树e,右子树f 前序:bcefd b c d f e
第6章 树和二叉树 例:先序遍历:bfdec,中序fbedc 由先序:b为根 由中序:左子树f,右子树edc 由先序:d为根 由中序:左子树e,右子树c 后序:fecdb b f d c e
第7章 图 1.图的基本概念 • 顶点的度 无向图的度:以该顶点为一个端点的边数 • 图的逻辑结构 多对多的关系(例:交通图) • 有关术语 权:边权(数值) 网:带权图(边上带权) 树权:(图中所有边上的权值总和) • 其它术语(略)
第7章 图 2.图的基本定理 • 图的边数等于所有顶点度数(之和)的一半(隐含度数为偶数) 3.图的存储结构 • 邻接矩阵 • 邻接表
第7章 图 4.图的遍历 • 遍历:从某一初始点出发,按一定搜索方法访问所有顶点一次且仅一次 • 深度优先搜索遍历: 能走则走,不能走退回一步再走,结果不唯一 A.a,b,e,c,d,f (错) B.a,e,d,f,c,b (对) a c b e f d
第7章 图 广度优先搜索遍历(类似于树的层次遍历) 访问初始点,及其所有邻接点(次序可任意) 再按上述访问结点的次序进行广度搜索遍历(按序层层搜索,地毯式) • A.a,b, c,e, d,f (错) • B.a,b,c,e,f,d (对) a c b e f d
第7章 图 5.图的生成树和最小生成树 • 树是连通而不含回路的图,n个顶点的树必含有n-1条边 • 对一个连通图G,取全部顶点和一部分边组成一个子图G’,若G’是一棵树,称它为G的一棵生成树 • 连通图一定存在生成树,同一个连通图可以有不同的生成树 • 连通网(连通带权图)可以有不同的生成树 • 对于一个带权连通图,其中具有最小权的生成树称为最小生成树 E A B C D
第7章 图 6.图的相关算法(了解) • 求最小生成树 • 最短路径(从一个顶点到其余各顶点的最短路径) • 拓扑排序
第8章 查找 1.基本概念 • 名词 查找表:同一类型记录的集合 关键字:记录中的某个数据项(的值).可以用以确 定识别记录 主关键字:记录中的某个数据项(的值).可以用以 确定唯一的一个记录 次关键字:记录中的某个数据项(的值).可以用以 确定多个记录
第8章 查找 • 平均查找长度 查找的基本操作是“比较” ASL= CiPi: Ci是查找到第i个记录的比较次数 Pi是查找第i个记录的概率
第8章 查找 2.线性表的查找 • 顺序查找:等概率条件下 ASL=1/n i=(n+1)/2 • 改进的顺序查找(顺序表末尾设一个监视哨),查找不成功比较n+1次 • 折半查找和折半查找对应的判定树 要求:查找表(顺序存储)中记录相应的关键字值必须有序(升序或降序) 例:查找表6,14,20,21,38,56,68,78,85,85,100 序号 0 1 2 3 4 5 6 7 8 9 10
第8章 查找 (1)画出折半查找的判定树 (2)查找到68要进行多少次元素间的比较(3次) (3)要查32,经多少次查找确定查不到(4次) (4)等概率条件下,平均查找长度 ASL=(1X1+2X2+3X4+4X4)/11=… 判定树: 56 5 20 85 2 8 21 68 85 6 0 3 6 9 100 78 14 38 1 4 10 7
第8章 查找 3.分块查找 • 查找表分块:块间有序、每块无序 • 索引表:索引表中一个记录对应一块 • 查找步骤:折半查找确定块,块内顺序查找 块内最大关键字 块中第一个记录的位置(地址指针) 索引表记录
第8章 查找 4.树表的查找 • 二叉排序树 三要素: (a)根结点大于左子树上所有结点的值(或等于) (b)根结点小于右子树上所有结点的值(或等于) (c)左、右子树也分别是一棵二叉排序树 例:二叉排序树的充分必要条件是其任一结点的值均大于其左孩子的值、小于其右孩子的值(x) 4 3 5 2 5 1 6
第8章 查找 • 二叉排序树的插入操作(也可用来构造二叉排序树) 例:(1)给定序列{9,18,6,10,22,11,8,20,7},依次取序 列中的数构造一棵二叉排序树 (2)给出中序遍历的序列 6,7,8,9,10,11,18,20,22 9 6 18 8 10 22 7 11 20
第8章 查找 • 对二叉排序树进行中序遍历所得的序列是有序序列 (由小到大) • 二叉排序树的删除操作(分4种情况,了解) • 删除原则是删除后使得到的树是二叉排序树
第8章 查找 5.哈希表及其查找 • 相关名词 哈希函数:记录的关键字 存储地址 哈希表:存放查找表中记录的序列,存储位置是以关键字为自变量由哈希函数计算所得到的数值 哈希查找(散列查找)原理: 在待查记录的关键字值与该记录的存储位置之间建立确定的对应关系 • 哈希函数构造法、处理冲突的方法(了解)
第9章 排序 1.基本概念 • 排序 • 稳定的排序方法 关键字相等的记录经排序后保持它们原来的前后关系 • 不稳定的排序方法 关键字相等的记录经排序后可能改变它们原来的前后关系
第9章 排序 2.插入排序 • 直接插入排序:每一趟从无序子表中将一个待排的记 • 录按其关键字大小放到已排好序的子序列的适当位置 例 47,83,41,53,68 47 47,83 41 47 83 41 47 53 83 41 47 53 68 83