收藏 分享(赏)

C增量之数据结构与算法PPT课件.ppt

上传人:Facebook 文档编号:3833822 上传时间:2018-11-20 格式:PPT 页数:89 大小:1.15MB
下载 相关 举报
C增量之数据结构与算法PPT课件.ppt_第1页
第1页 / 共89页
C增量之数据结构与算法PPT课件.ppt_第2页
第2页 / 共89页
C增量之数据结构与算法PPT课件.ppt_第3页
第3页 / 共89页
C增量之数据结构与算法PPT课件.ppt_第4页
第4页 / 共89页
C增量之数据结构与算法PPT课件.ppt_第5页
第5页 / 共89页
点击查看更多>>
资源描述

1、封面,数据结构与算法,姜学锋 西北工业大学计算机学院,参考教材:清华大学数据结构,1.1 概述,算法+数据结构=程序设计N.Wirth,1.1.1 基本概念和术语,数据(data) 客观事物的符号表示,是所有能输入到计算机中并被计算机程序处理的符号的总称。 数据元素(data element) 数据的基本单位,在计算机程序中通常作为一个整体进行考虑和处理,一个数据元素可由若干个数据项组成。数据项是数据的不可分割的最小单位。 数据对象(data object) 性质相同的数据元素的集合,是数据的一个子集。,数据结构(data structure) 相互之间存在一种或多种特定关系的数据元素的集合.

2、 数据元素之间的关系称为结构,通常有四类基本结构.集合 线性结构 树形结构 图状结构,1.1.1 基本概念和术语,1.1.1 基本概念和术语,数据的逻辑结构抽象地描述数据元素逻辑关系。 数据的物理结构(存储结构)数据结构在计算机中的表示。,10,20,30,10,20,30,顺序映像用相对位置表示数据元素间的逻辑关系,非顺序映像用指针表示数据元素间的逻辑关系,D= 1 , 2 , 3 , 4R=(1,2) , (1,3) , (1,4) , (2,3)(3,4) , (2,4) D= 1 , 2 , 3 R= , , , 例 1: 英文26个字母表的数据结构是一个线形表,可表示为:B=D,R

3、D= a , b, c, ,x ,y ,zR=(a,b),(b,c),,(y,z)此例数据元素是简单项。,1. 数据的逻辑结构,2. 数据的存储结构,3. 数据的运算:检索、排序、插入、删除、修改等。,A . 线性结构,B . 非线性结构,A . 顺序存储,B . 链式存储,线性表,栈,队,树形结构,图形结构,数据结构的三个方面,反映数据元素之间的逻辑关系,数据元素在计算机内部的组织方式,1.1.2 算法描述,算法(algorithm)对特定问题求解步骤的一种描述,它是指令的有限序列。 算法的特性有穷性、确定性、可行性、输入、输出。 算法设计的要求正确性、 可读性、 健壮性、 效率。,1.1.

4、2 算法描述,算法的时间复杂度: 以算法中基本操作重复执行的次数作为算法的时间度量。例2: (a) x=x+1; O(1)(b) for (i=0;in;i+)x=x+1; O(n)(c) for (i=1;in;i+) for (j=1;ji;j+) x=x+1; O(n2),算法的空间复杂程度,1.2 线性表和数组 1.2.1 线性表及其顺序存储结构,一、线性表的逻辑结构 线性表由n(n0)个数据元素a1,a2,.,an构成的有限序列记作: L( a1, a2, ., an ) 其中,a1称为首元素,an称为尾元素。表的长度(表长)线性表中数据元素的数目。空表不含数据元素的线性表(n=0)

5、 。,一、 线性表的逻辑结构,线性表(a1, a2, .,an)的特征: 直接前驱ai1在ai之前,称ai1是ai的直接前驱(1in) 直接后继ai1在ai之后,称ai1是ai的直接后继(1in) a1没有前驱 an没有后继。 ai(1in)有且仅有一个直接前驱和一个直接后继,一、 线性表的逻辑结构,线性表L(a1,a2,.,an)的运算 1) initiate(L) 初始化L为空表 2) length(L) 求长度 3) get(L,i) 取元素ai 4) prior(L,elm) 求前驱函数 5)next(L,elm) 求后继函数 6)locate(L,x) 定位函数 7)insert(L

6、,i,x) 在元素ai之前插入新元素 8) delete(L,i) 删除第i个数据元素 9) empty(L) 判空表函数 10)clear(L) 表置空函数,二、线性表的顺序存储结构,序号 存储状态 存储地址 b1 a1 b+k 2 a2 . . . . . b+(i-1)*k i ai b+(n-1)*kn an /b+(maxlen-1)*k maxlen/ ,其中: b: 表的首地址(基地址), 即元素 a1 的首地址; K: 每个数据元素占有的存储单元的个数; Maxlen:线性表的最大长度, 为某个常数。,二、线性表的顺序存储结构,插入一个元素 2 4 1720253540 1 2

7、 3 4 5 6 7 8 9 | | 插入 8 n 2 4 1720253540 1 2 3 4 5 6 7 8 9 | |插入 8 n 2 4 8 1720253540 1 2 3 4 5 6 7 8 9 | |插入 8 之后 n,二、线性表的顺序存储结构,算法分析 假设在线性表的第个位置插入一个元素的概率为Pj,是线性表的长度, 1n,那么每插入一个元素所需移动元素数目的期望值(平均数目)是:其中,n-j+1 表示在第个元素之前插入一个新元素必须移动n-j+1个元素。假定在表的任意位置(1jn )插入元素的概率相等, 即1/n,那么移动元素的期望值为:,二、线性表的顺序存储结构,(2) 假

8、设在线性表的第个位置删除元素的概率为, n是线性表的长度, 1n,那么每删除一个元素所需移动元素数目的期望值(平均数目)是: 其中,n-j 是表示删除表中第(1jn)个元素必须移动 n-j 个元素。假定在表中任意位置( 1jn )删除元素的概率相等,即1/n,那么移动元素的期望值为: 缺点:平均要移动表中约半数的元素。,二、线性表的顺序存储结构,顺序存储结构的评价(1) 优点a) 存取结构简单,存取任意元素的时间是一个常数,存取速度快b) 不使用指针,存储密度大。(2) 缺点a) 需请求分配一个连续存储块;b) 插入可能发生溢出;c) 为了防止溢出,需保留一个较大的连续存储块,造成浪费;d)

9、插入和删除需移动大量数据元素。,1.2.2 线性表的链式存储结构 一、单链表,单链表的结点结构data结点类型说明:struct node element ;struct node *next;,1.2.2 线性表的链式存储结构 一、单链表,单链表的一般形式:若 headNULL,则为非空单链表;若 headNULL,则为空单链表。,1.2.2 线性表的链式存储结构 一、单链表,思考: 若删除尾结点C情况如何?,1.2.2 线性表的链式存储结构 一、单链表,1.2.2 线性表的链式存储结构 一、单链表,1.2.2 线性表的链式存储结构 一、单链表,1.2.2 线性表的链式存储结构 一、单链表,

10、带表头结点的单链表的一般形式若 head-nextNULL,则为非空单链表;若 head-nextNULL,则为空单链表。,1.2.2 线性表的链式存储结构 一、单链表,带表头结点的循环单链表的一般形式若 head-nexthead,则为非空循环单链表;若 head-nexthead,则为空循环单链表。,二、双向链表,双向链表的结点结构结点类型说明:struct nodedou element data;struct nodedou *llink;struct nodedou *rlink;,二、双向链表,带表头结点的双向链表(1) 非空表(首结点的左指针为空,尾结点的右指针为空) h a1

11、an 头指针 表头结点 首结点 尾结点 (2) 空表 h 头指针 表头结点,1.2.3 数组及其顺序存储 一、组和数组的运算,对数组的运算: (1)给定一个有定义的下标组,访问与其对应的数组元素。 (2)给定一个有定义的下标组,存取或修改与其对应的数组元素。,1.2.3 数组及其顺序存储 一、组和数组的运算,例 二维数组: 11 12 21 22 31 32 41 42 (1) 以行序为主序的顺序存储方式: 1112212231324142 序号: 1 2 3 4 5 6 7 8 (2) 以列序为主序的顺序存储方式: 1121314112223242 序号: 1 2 3 4 5 6 7 8,1

12、.3 栈和队列 1.3.1 栈,定义和术语(1)栈(stack): 只允许在表的一端插入和删除元素的线性表。 (2)栈顶(top): 线性表中允许进行插入和删除的一端。 (3)栈底(bottom): 线性表中不允许进行插入和删除的一端。 (4)栈顶元素: 位于栈顶的元素。 (5)栈底元素: 位于栈底的元素。 (6)空栈: 不含元素的栈。 (7)进栈( push, 下推 , 压入 ): 插入一个新元素到栈中。 (8)退栈( POP, 弹出 ): 删除栈顶元素。,(9)栈中元素的进出原则: 后进先出( Last In First Out)。 (10)栈的别名: “后进先出表”或“LIFO”表退栈进

13、栈 4top 3 栈顶元素 2bottom 1 栈底元素栈的图示,1.3.1 栈 一、栈的定义,栈的基本操作 (1) init(s) 初始化,将栈设置为空栈 (2) empty(s) 判断栈是否为空栈 (3) push(s,x) 将元素压入栈中 (4) pop(s) 弹出栈的顶元素 (5) gettop(s) 读取栈顶元素 (6) clear(s) 栈置空操作 (7) length(s) 求当前栈中元素的个数,一、栈的定义,例 由输入(A,B,C), 得输出( C,B,A )的操作 A,B,C C,B,A 退栈进栈 3 top3 C 3 2 2 B 2 1 1 A 1 top0 top0 空栈

14、 A,B,C 进栈后 C,B,A 退栈后 push(s,A); pop(s); push(s,B); pop(s);push(s,C); pop(s);,二、栈的存储结构,s1n s1n s1n n n top n an n-1 n-1 n-1 . . . . . . . . . 3 3 3 a3 2 top 2 a2 2 a2 1 1 a1 1 a1 top 0 空栈 0 非空栈 满栈 (下溢) (上溢),二、栈的存储结构,链式栈 设链式栈的栈顶指针为 top,指向位于栈顶的结点:data next top B 栈顶 data next topNULL top A 栈顶 A 栈底 (栈底)

15、(1) 置为空栈 (2) 压入元素 A之后 (3) 压入元素 B之后,1.3.2 队列 一、定义和术语,(1)队列: 只允许在表的一端删除元素,在另一端插入元素的线性表 (2)空队列: 不含元素的队列 (3)队首: 队列中只允许进行删除元素的一端 (4)队尾: 队列中只允许进行插入的一端 (5)队首元素: 处于队首的元素 (6)队尾元素: 处于队尾的元素 (7)进队: 插入一个元素 (8)出队: 删除一个元素 (9)队列中元素的进出原则: 先进先出( First In First Out )。 (10)队列的别名: 先进先出表,FIFO 表,队列示例 出队 A B C 进队 head tail

16、 (队首指针) (队尾指针),1.3.2 队列 一、定义和术语,队列的的基本操作 (1) init(q) 初始化,将队列q设置为空队列 (2) empty(q) 判断队列q是否为空队列 (3) insert(q,x) 入队操作,将插入队列q尾部 (4) delete(q) 出队操作,取队列q首元素 (5) gethead(q) 读取队列q首元素 (6) clear(q) 队列q置空操作 (7) length(q) 求当前队列q中元素的个数,二、链队列,如果采用单向链,设两个指针head指向队首tail指向队尾空队列head=tail=NULL;有一个元素的队列 data next headA

17、首(尾)结点 tail,一般队列data next headA 首结点 B tailC 尾结点 ,二、链队列,head p A tail headA 首结点 tailB 尾结点 pC ,入队算法if (head=NULL) head=p; else tail-next=p; tail=p;,二、链队列,head A tail headA 首结点 B tailC 尾结点,出队算法if (head=NULL) /* 空队列 */ else p=head;head=head-next;if (head=NULL)tail=NULL; ,三、循环队列,如果采用数组q6,设两个指针head指向队首tai

18、l指向队尾空队列 head=tail- - 0 1 2 3 4 5 H T (带头结点链表?) 插入 A,B,C,D,E 之后- ABCDE-0 1 2 3 4 5 H T,删除 A,B,C 之后- DE - 0 1 2 3 4 5 H T 插入F发生假“溢出”. - DE F - 0 1 2 3 4 5 H T,三、循环队列,循环队列插入F tail=(tail+1)%6 - F DE - 0 1 2 3 4 5 T H插入G,H,队列满 (tail+1)%6=head - FGH DE - 0 1 2 3 4 5 T H,tail 0 5 F 1E4 D 23 head,0 5 F 1E

19、G4 D H 2 tail3 head,1.4 树 1.4.1 树及存储结构,一、树的基本概念 定义 树是一个或多个结点的有穷集合T,其中有且仅有一个指定的称为树根(root)的结点,除树根之外的其余结点被分为 m ( m 0 )个互不相交的集合T1,T2,.,Tm, 每一个Ti(i = 1,2,.,m)又都是树,并且称为根的子树。例1. 一个结点的树 T A ,1.4.1 树及存储结构 一、树的基本概念,例2. 12 个结点的树 1 T A, B, C, D, E, F, G, H, I, J, K, L 2 T1 B, E, F, J . 第1层 3 T11 E 4 T12 F, J 5

20、T121 J 第2层 6 T2 C 7 T3 D, G, H, I, K, L 8 T31 G, K, L . 第3层 9 T311 K 10 T312 L 11 T32 H . 第4层 12 T33 I 一棵树的图示,1.4.1 树及存储结构 一、树的基本概念,基本术语 (1)结点的度: 结点 X 的子树数称为结点 X 的度( degree ) (2)树的度: 树 T 中各结点的度的最大值称为树 T 的度。度为 d 的树称为 d 度树 (3)叶子: 树中度为 0 的结点称为叶子(leaf)或终端结点 (4)分枝结点( 非终端结点、非叶子 ): 树中度不为 0 的结点 (5)双亲和孩子: 若树

21、中结点 P 的一棵子树的根是结点 C,则称结点 P是结点 C 的双亲或父母( parent );反之,称结点 C是结点 P 的孩子( child ) (6)结点的层: 规定树的根结点的层( level )为 1,其余任一结点的层等于它的双亲的层加1 (7)树的深度: 树 T 中各结点的层的最大值称为树 T 的深度或高度 (8)兄弟和堂兄弟: 同一个双亲的孩子之间互称为兄弟( sibling ),其双亲在同一层的结点互为堂兄弟 (9)祖先和子孙: 一个结点的祖先是指从树的根到该结点所经分枝上的所有结点,一个结点的子树的所有结点称为该结点的子孙 (10)有序树和无序树: 如果树 T 中任一结点的各

22、棵子树规定从左至右是有次序的,即不能互换位置,则称树 T 为有序树;否则树 T 为无序树 (11)森林: n(n=0)棵互不相交的树的集合称为森林,1.4.1 树及存储结构 一、树的基本概念,例3.有序树和无序树 两棵不同的有序树 两棵相同的无序树 例4. 森林 F T1, T2, T3 T1 T2 T3,1.4.2 二叉树及其存储结构 一、二叉树的基本概念,二叉树的递归定义二叉树是有限个结点的集合,它或者为空集,或者是由一个根结点和两棵互不相交的且分别称为根的左子树和右子树的二叉树所组成。若二叉树为空集,则称之为空二叉树。 二叉树的 5 种基本形态 (1) (2) (3) (4) (5) 空

23、二叉树 只有根结点 有根结点 有根结点 有根结点 左、右子树 左子树非空 左子树为空 左子树非空 为空二叉树 右子树为空 右子树非空 右子树非空,一、二叉树的基本概念,二叉树和 2 度树的区别(1)二叉树的度小于等于 2;而 2 度树的度等于 2。(2)二叉树的左子树和右子树是有序的;而 2 度树可以不规定各子树之间的次序,即可以是有序树,也可以是无序树。 例. T1 T2 T4 T5 T1、T2是两棵不同的二叉树,但不是 2 度树。 T4、T5是两棵不同的二叉树;是相同的无序 2 度树。,一、二叉树的基本概念,具有 3 个结点的不同形态的二叉树 T1 T2 T3 T4 T5,一、二叉树的基本

24、概念,性质 1:在任意二叉树的第层上,最多有i-1个结点(1)。例. . 第 1 层 1-1 1 . 第 2 层 2-1 2 第 3 层 3-1 4 . 第 4 层 4-1 8,二、二叉树的性质,性质 2:深度为 k 的二叉树最多有 2k 1 ( k 1 )个结点。 由性质 1 知,深度为的二叉树的结点总数最多为: k k i1 (第层上结点的最多数目) 2 i=1 i=1例. T4 T1 T2 T3 2111 2213 2317 24115,二、二叉树的性质,性质3:对于任一非空二叉树,如果它的叶子数目为0,度为 2 的结点数目为2,则有: 02 (2n2+1=n0+n2) 例 T1 T2

25、T3 T4 01 02 04 05 20 21 23 24,三、特殊二叉树,特殊二叉树 满二叉树、完全二叉树、顺序二叉树(1) 满二叉树: 深度为 k 的具有 2k 1 个结点的二叉树称为满二叉树 ( k 1 ). 例:T1 T2 T3 T4 k1 k2 k3 k4 21 11 22 13 23 17 24 115,三、特殊二叉树,顺序编号的满二叉树: 从根结点开始,从上至下;同层的结点从左至右;n 个结点的满二叉树, 依次用 1,2,n 顺序编号。 例.顺序编号的满二叉树 T1 T2 T3 n1 n3 n7 满二叉树的结点个数与树的深度之间的关系:具有 n 个结点的满二叉树的深度为 log2(n1)。 依定义,一棵深度为 k 的满二叉树有 2k 1 个结点),有:2k 1 n,三、特殊二叉树,(2) 完全二叉树若二叉树的任一结点的度为 0 或者为 2,则称该二叉树为完全二叉树。例.完全二叉树T1 T2 T3 T4 一棵满二叉树同时又是一棵完全二叉树;反之,一棵完全二叉树不一定是一棵满二叉树。当且仅当一棵深度为 k 的完全二叉树具有 2k 1 个结点时,称该完全二叉树为满二叉树。,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 中等教育 > 小学课件

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报