北京邮电大学-数据结构讲义课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《北京邮电大学-数据结构讲义课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 北京邮电 大学 数据结构 讲义 课件
- 资源描述:
-
1、数据结构数据结构题型题型(1)p基本概念基本概念40n选择和判断,20个左右p简答或给定实例执行算法简答或给定实例执行算法30(5-65-6个题目)个题目)n概念或者某些数据结构的性质n例如:p霍夫曼编码霍夫曼编码p直接插入直接插入/冒泡冒泡/快速快速/选择选择/堆排序等算法的执行堆排序等算法的执行p链地址法哈希表装填链地址法哈希表装填p根据二叉树遍历结果画出树根据二叉树遍历结果画出树p关于图的算法执行,等等关于图的算法执行,等等题型题型(2)p算法设计题算法设计题30n常见题型的范围(2-3题目)p简单题目(数组,单层或双层循环,条件判断)简单题目(数组,单层或双层循环,条件判断)p单向链表
2、或双向链表操作(插入单向链表或双向链表操作(插入/删除删除/转置转置/合并)合并)p二分查找,简单排序算法的实现二分查找,简单排序算法的实现p二叉树(复制,相等,相似等,使用简单递归算法)二叉树(复制,相等,相似等,使用简单递归算法)第一章第一章 绪论绪论基本概念基本概念学习数据结构的意义学习数据结构的意义p是为研究和解决如何有效地组织和处理是为研究和解决如何有效地组织和处理非数值数据非数值数据而而产生的理论、技术和方法。产生的理论、技术和方法。p是计算机科学中的一门综合性的专业基础课。是计算机科学中的一门综合性的专业基础课。涉及计算机软件、硬件以及数学等涉及计算机软件、硬件以及数学等基本术语
3、基本术语p数据数据 被计算机加工处理的对象。p数据元素数据元素(记录记录、表目表目)数据的基本单位,是数据集合中的一个有意义的个体。p数据项数据项 一个数据元素可由若干个数据项数据项组成。组合项组合项年 月 日学 号姓 名班 号性别出生日期入学成绩原子项原子项基本基本术语术语2 2p数据对象数据对象 是性质相同的数据元素的集合,是数据的一个子集。学号 姓名 班号 性别 出生日期 入学成绩 001 刘影 01 女 19840417 623 002 李恒 01 男 19831211 679 003 陈诚 02 男 19840910 638 p数据结构数据结构 具有结构的数据元素的集合。它包括数据元
4、素的逻辑结构逻辑结构、存储结构存储结构和相适应的运算运算。数据元素 数据元素之间的逻辑关系,与计算机无关。可用一个二元组表示:Data_Structure=(D,R)D:数据元素的有穷集合,R:集合D上关系的有穷集合。例例 设有数据结构 B=(D,R),其中 D=d1,d2,d3,d4,d5,d6,R=r,r=,,试画出其逻辑结构图。d1d2 d3 d4d5 d6逻辑结构逻辑结构(以班级学生关系为例)(1)集合结构集合结构 数据元素除了“属于同一集合”的联系之外,没有其它的关系。(2)线性结构线性结构 数据元素之间存在一对一的关系。(3)树型结构树型结构 数据元素之间存在一对多的关系。(4)图
5、状结构图状结构或网状结构网状结构 数据元素之间存在多对多的关系。成员关系长幼关系管理关系朋友关系四种基本的逻辑结构四种基本的逻辑结构数据的逻辑结构数据的逻辑结构存储结构存储结构:数据的逻辑结构在计算机中如何表示。p数据元素的映象数据元素的映象 用二进制位(bit)的位串表示数据元素。每个数据元素的映象称为每个数据元素的映象称为结点结点 每个数据项的映象称为每个数据项的映象称为数据域数据域p关系的映象关系的映象两种基本方法及其组合使用。两种基本方法及其组合使用。n顺序映象顺序映象:以相对的存储位置表示关系以相对的存储位置表示关系n链式映象链式映象:以附加信息:以附加信息(指针指针)表示关系表示关
6、系p注意:数据的逻辑结构和存储结构的关系n可以用数组等线形存储的方式存储逻辑上的树形结构可以用数组等线形存储的方式存储逻辑上的树形结构n也可以用树状的复杂的存储结构来存储逻辑上的集合关系以达也可以用树状的复杂的存储结构来存储逻辑上的集合关系以达到提高检索速度的目的到提高检索速度的目的数据的存储结构数据的存储结构 数据的逻辑结构+运算的定义-面向用户,需求分析 (抽象数据类型)概念层 数据的存储结构+运算的实现-面向计算机 实现层数据的逻辑结构与存储结构数据的逻辑结构与存储结构抽象数据类型抽象数据类型p抽象数据类型(ADT)n一个数学模型以及定义在该模型上的一组操作一个数学模型以及定义在该模型上
7、的一组操作n“抽象抽象”是指数据类型的数学抽象特性,其定义仅仅取是指数据类型的数学抽象特性,其定义仅仅取决于它的一组逻辑特性,而与在计算机内部的表示和决于它的一组逻辑特性,而与在计算机内部的表示和实现无关实现无关算法和算法分析算法和算法分析算法的概念算法的概念 建立在数据结构基础上的、求解问题的一系列确切的步骤。一个算法必须满足以下一个算法必须满足以下五五个重要特性个重要特性p有穷性:对任何合法输入执行有穷步后能结束。p确定性:每条指令必须有确切的含义。p可行性:算法的每一条指令均能执行。p输入:有零个或多个输入。p输出:有一个或多个输出。算法的概念算法的概念和特性和特性p正确性(最重要的标准
8、)n算法应满足具体问题的需求算法应满足具体问题的需求n对于典型的、苛刻而带有刁难性的一组对于典型的、苛刻而带有刁难性的一组有效输入有效输入得到正确的得到正确的结果结果p健壮性n算法应具有容错处理。当输入算法应具有容错处理。当输入非法数据非法数据时,算法应对其作出时,算法应对其作出反应,而不是产生莫名其妙或随机的输出结果反应,而不是产生莫名其妙或随机的输出结果p可读性n算法应该好读。以有利于阅读者对程序的理解和维护算法应该好读。以有利于阅读者对程序的理解和维护p高效性:时间复杂度n算法执行占用的算法执行占用的CPU时间,随问题规模时间,随问题规模n的变化函数的变化函数p高效性:空间复杂度n算法执
9、行占用的内存总量,随问题规模算法执行占用的内存总量,随问题规模n的变化函数的变化函数评价算法优劣的基本标准评价算法优劣的基本标准算法效率的度量算法效率的度量时间复杂度空间复杂度算法执行的时间算法执行的时间p事后统计的方法n先运行依据算法的程序先运行依据算法的程序n所得时间的统计量依赖于计算机的硬件、软件等环境所得时间的统计量依赖于计算机的硬件、软件等环境因素因素n收集此算法的执行时间和实际占用空间的统计资料。收集此算法的执行时间和实际占用空间的统计资料。p事前分析估算的方法n求出该算法的一个时间界限函数;求出该算法的一个时间界限函数;时间复杂度时间复杂度pnn问题规模,一般为数据的输入量问题规
10、模,一般为数据的输入量pf(n)n算法中算法中基本操作基本操作重复执行的次数重复执行的次数频度频度n是问题规模是问题规模n n的某个函数的某个函数p算法的算法的时间量度、时间量度、时间复杂度时间复杂度n算法中各语句的频度之和算法中各语句的频度之和T(n)nT(n)=O(f(n)n随问题规模的增大,执行时间的增长率和随问题规模的增大,执行时间的增长率和f(n)的增长率相同的增长率相同时间复杂度曲线时间复杂度曲线p常见的时间复杂度:O(1),O(log2n),O(n),O(n log2n),O(n2),O(n3),O(2n)pO(1)data=e;s-next=p-next;p-next=s;带头
11、结点单链表的删除算法带头结点单链表的删除算法p具体操作存储池 p q带头结点单链表的删除算法带头结点单链表的删除算法p删除p节点之后的节点 q=p-next;if(q!=NULL)p-next=q-next;free(q);不带头单链表的转置不带头单链表的转置 pre=NULL;p=head;while(p!=NULL)t=p-next;p-next=pre;pre=p;p=t;head=pre;单链表的缺点单链表的缺点p获取节点P的前驱的算法p删除节点p的算法p替换节点p的算法p在节点p之前插入新节点的算法线性表的双向链式存储线性表的双向链式存储双向链表双向链表双链表的定义:每个节点有两个指
12、针typedef struct DuLNode ElemType data;struct DuLNode*prior;struct DuLNode*next;DuLNode,*DuLinkList;p结点的物理表示带头结点双向循环链表的插入带头结点双向循环链表的插入p将新元素e插入到双向链表中p节点前s=(DuLNode*)malloc(sizeof(DuLNode);s-data=e;s-prior=p-prior;p-prior-next=s;s-next=p;p-prior=s;.LPS带头结点双向循环链表的删除带头结点双向循环链表的删除p删除节点删除节点p p-prior-next=p
13、-next;p-next-prior=p-prior;free(p);第三章第三章 栈和队列栈和队列插入和删除操作受限的线性表插入和删除操作受限的线性表p栈和队列都是线性表,只是在操作上做了限制p栈(stack)n后进先出后进先出(LIFO:Last In First Out)的线性表的线性表n表头端称为栈底(表头端称为栈底(bottom)n表尾端称为栈顶(表尾端称为栈顶(top)n插入和删除都在栈顶进行插入和删除都在栈顶进行p队列(queue)n先进先出先进先出(FIFO:First In First Out)的线性表的线性表n表头端称为队头(表头端称为队头(front)n表尾端称为队尾(表
14、尾端称为队尾(rear)n插入在队尾进行,而删除则在队头进行插入在队尾进行,而删除则在队头进行栈的定义和基本操作栈的定义和基本操作 栈的基本操作栈的基本操作nInitStack(&s)初始化堆栈nStackEmpty(s)判断堆栈是否空npush(s,e)将元素e压入堆栈npop(s,&e)弹出栈顶元素栈的存储结构栈的存储结构p两种方式n顺序表方式(常用)顺序表方式(常用)n链表方式链表方式p顺序表方式的堆栈类型定义#define STACK_SIZE 128ElemType stackSTACK_SIZE;int top;n堆栈容量的设计:根据算法需要,分析算法的空间复杂度堆栈容量的设计:根
15、据算法需要,分析算法的空间复杂度n编号系统编号系统 0(n-1),top记载下个空位位置,或者说,记载下个空位位置,或者说,元素个数元素个数n栈满和栈空(栈满和栈空(“上溢上溢”与与“下溢下溢”)顺序表方式的堆栈操作顺序表方式的堆栈操作#define InitStack()top=0#define StackEmpty()(top=0)Status push(elemType e)if(top=STACK_SIZE)return ERROR;stacktop+=e;return OK;顺序表方式的堆栈操作顺序表方式的堆栈操作Status pop(elemType&e)if(top=0)retu
16、rn ERROR;e=stack-top;return OK;栈的链式存储结构以及操作栈的链式存储结构以及操作p存储结构设计n不带头的单链表不带头的单链表p类型定义struct NODE ElemType data;struct NODE*next;struct NODE*stack;p操作算法nInitStacknClearStack:释放所有节点释放所有节点n其他操作:其他操作:Push,Pop,StackEmpty队列队列队列的定义队列的定义p 队列是一种特殊的线性表p 限定插入和删除操作分别在表的两端进行p 具有先进先出(FIFOFirst In First Out)的特点。队列的操作
17、队列的操作p 主要操作n 增加(入队)增加(入队)EnQueue(Q,e);n 删除(出队)删除(出队)DeQueue(Q,&e);n 判断队列是否为空判断队列是否为空 QueueEmpty(Q)p 其他操作n 初始化队列初始化队列InitQueue(Q)n 获取队列长度获取队列长度 QueueLength(Q)n 清除队列中的所有元素清除队列中的所有元素 ClearQueue(Q)队列的队列的存储结构和实现存储结构和实现p 链表方式p 顺序表方式链式队列链式队列链式队列的链式队列的其它算法其它算法n存储结构单链表,双向循环链表,带头节点n插入算法,删除算法n求队列长度n遍历队列中现有所有元素
18、使用顺序表方式实现队列使用顺序表方式实现队列循环循环队列队列(1)1)p 存储结构n 使用静态的数组或者动态申请的连续存储空间(顺序表)p 队列描述n 队头队尾p 基本算法n 增加元素:“假溢假溢”现象,解决方法:循环队列现象,解决方法:循环队列n 删除元素01234567rearfront01234567rearfrontACBA01234567rearfrontCG01234567rearfrontG01234567rearfrontHIJ循环队列循环队列(2)2)p“上溢”与“下溢”的条件:队列满和队列空的表示方法n 方法一:浪费一个存储空间,以(rear+1)%N=front判断队列满
19、n 方法二:设置队列中的数据元素计数或者队满标志第五章第五章 数组和广义表数组和广义表数组数组数组的顺序表示和实现数组的顺序表示和实现p二维数组的顺序存储方式n行优先顺序行优先顺序n列优先顺序列优先顺序n根据数组下表根据数组下表(i,j)检索顺序表中元素检索顺序表中元素K的方式的方式数组的顺序存储方式(续)数组的顺序存储方式(续)p多维数组n行优先顺序行优先顺序p规定为先排最右的下标,从右到左,最后排最左下标:n列优先顺序列优先顺序p规定为先排最左下标,从左向右,最后排最右下标。p数组的顺序存储特点n只要已知开始结点的存放地址(即基地址)、数组维数、每维的上、只要已知开始结点的存放地址(即基地
20、址)、数组维数、每维的上、下界,和每个数组元素所占用的单元数,就可以将数组元素的存放地下界,和每个数组元素所占用的单元数,就可以将数组元素的存放地址表示为其下标的线性函数;址表示为其下标的线性函数;n数组中的任一元素可以在相同的时间内存取,即顺序存储的数组是一数组中的任一元素可以在相同的时间内存取,即顺序存储的数组是一个个。p例:数组:ElemType Amn;addr(Aij)=Base(A)+(i*n)+j)*sizeof(ElemType);addr(Aij)=Base(A)+(j*m)+i)*sizeof(ElemType);稀疏矩阵稀疏矩阵p稀疏矩阵n非零元素很少,分布没有规律;非零
21、元素很少,分布没有规律;n设矩阵设矩阵A中有中有s个非零元素,若个非零元素,若s远远小于矩阵元素的总数(即远远小于矩阵元素的总数(即smn),),则称则称A为稀疏矩阵;为稀疏矩阵;n令令e=s/(m*n),称,称e为矩阵的稀疏因子。通常认为为矩阵的稀疏因子。通常认为e0.05时时称之为稀疏矩阵;称之为稀疏矩阵;n在压缩存储时需要同时存储非零元素的下标和值;在压缩存储时需要同时存储非零元素的下标和值;n可用三元组存储(行号,列号,值)。可用三元组存储(行号,列号,值)。0 12 0 0 0 0 1 0 0 0 3 0 0 0 0 5 0 0 0 0 0 0 0 0 0 2 0 0 0 6i j
22、v1 2 122 1 12 5 33 4 55 2 25 6 6A广义表广义表 广义表的定义广义表的定义p广义表n又称列表,其每一个元素的结构都可能是不同的;又称列表,其每一个元素的结构都可能是不同的;n是是n(n0)个元素个元素a1,a2,a3,an的有限序列,其中的有限序列,其中ai或者是原子项,或者是一个广义表;或者是原子项,或者是一个广义表;n通常记作通常记作LS=(a1,a2,a3,an)pLS是广义表的名字,n为它的长度。若ai是广义表,则称它为LS的子表。p第一个元素a1称为表LS的表头(head),由余下元素组成的表(a2,a3,.,an)称为LS的表尾(tail)。广义表中括
23、号的重数称为广义表的深度。广义表广义表的长度和深度的长度和深度n(),(e),(a,(b,c,d),(f,g)n长度4,深度3 广义表广义表操作操作p广义表的长度和深度(P108,p113)n(),(e),(a,(b,c,d),(f,g)n长度4,深度3phead与与tail操作操作(p108)nA=(a,(b,c)nHead(A)anB=Tail(A)(b,c)nC=Head(B)(b,c)nTail(B)()nHead(C)bnD=Tail(C)(c)nHead(D)cnTail(D)()nL=(a,b,c),(e,f,g)取出元素fpHead(Tail(Head(Tail(L)nL=(a
24、,b,c),x,(u,t,w)取出元素tpHead(Tail(Head(Tail(Tail(L)第六章第六章 树和二叉树树和二叉树树的定义和基本术语树的定义和基本术语树的定义树的定义p树是一类重要的非线性数据结构,是以分支关系定义的层次结构;p树是n(n0)个结点的有限集,非空树满足:n有且仅有一个特定的称之为有且仅有一个特定的称之为(root)的结点;的结点;n除根以外的其余结点可分为除根以外的其余结点可分为m(0 m1,则i的双亲是i/2。p若2in,则i无左孩子;否则,i的左孩子是2i。p若2i+1n,则i无右孩子;否则,i的右孩子是2i+1。12 34 5 6 712 34 5 6 7
25、8 9 10二叉树的存储二叉树的存储结构结构(1)(1)p顺序存储结构n按完全二叉树存储按完全二叉树存储(可以用数组这样线性的存储结构(可以用数组这样线性的存储结构存储一个非线性的数据结构)存储一个非线性的数据结构)#define MaxTreeSize 128typedef TElemType SqBiTreeMaxTreeSize;SqBiTree bt;A B C DE F1 2 3 4 5 6 7ABDEFC二叉树的存储二叉树的存储结构结构(2)(2)p顺序存储结构n用父母指针存储用父母指针存储p存储结点数据和其父结点的序号ABC DEF0112331 2 3 4 5 6ABDEFC#
展开阅读全文