数据结构java版课件
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
树型结构
存在一个根结点 (无前驱) 存在多个叶子结点 (无后继) 其它结点 (一个前驱(双亲)、 多个后继(孩子)) 元素之间存在“一对多”的 关系 27
第5章 树与二叉树第一讲 ——主要要掌握的知识点
2. 二叉树的定义和性质
问
1.具有n个结点的二叉树,其深度 ? ? n 的最大值是: 最小值是:log2n +1
2. 二叉树的遍历方法
(先根、中根、后根遍历) 3. 二叉树遍历的实现算法 (重点掌握非递归算法)
29
第5章 树与二叉树第二、三讲 ——主要要掌握的知识点
4. 二叉树遍历的应用(重点和难点) (1)二叉树上的查找; (2)求二叉树上的结点或叶子结点的个数; (3)求二叉树的深度; (4)判断两棵二叉树是否相等; (5)两棵二叉树的复制; 5.二叉树的建立(重点和难点) (1)根据给定的标明空子树的完整先根遍历序 列建立一棵二叉树; (2)根据给定的先根遍历序列和中根遍历序列 或后根遍历序列和中根遍历序列建立一棵二叉树。
m
n
k
in ) L
(i1×m2×...×mn+ i2 ×m3×...×mn+… +in-1×mn+ in) ×L
24
第4章 串与数组第二讲数组 ——主要要掌握的知识点
2.特殊矩阵压缩存储时,数组元素的地址计算; (1) 对称矩阵 i*(i+1)/2+j (i>=j,0≤i,j≤n-1) K= j*(j+1)/2+i (i<j, 0≤i,j≤n-1) K=0,1,…,n(n+1)/2-1 (2) 下三角矩阵 K= i*(i+1)/2+j (i>=j,0≤i,j≤n-1) K=0,1,…,n(n+1)/2-1 空 (i<j,0≤i,j≤n-1) (3) 对角(带状)矩阵(d为半带宽) K= i*(2d+1)+d+(j-i) 其中:K=0~n(2d+1) 0≤i,j≤n-1
23
第4章 串与数组第二讲数组 ——主要要掌握的知识点
1.多维数组顺序存储时,数组元素的地址计算公式;
Loc(i1 , i2 ,in ) Loc(0,0,0) ( i j
其中: ( i j
j 1 n 1
n 1 j 1
k j 1
m
n
k
in ) L
k j 1
3
第1章 绪论第二讲 ——主要要掌握的知识点
思考题:计算下面程序段中带标注语句的 语句频度及程序段的时间复杂度。
void sort (int a[], int n){ if (n>1){ //语句1 for (int i=0; i<n-1; i++) //语句2 答案: (a[i]>a[n-1]){ if //语句3 语句1频度为:1+1+…+1=n int temp=a[i]; a[i]=a[n-1]; 语句2频度为:0+2+3+…+1=(n-1)(n-2)/2 a[n-1]=temp; 语句3频度为:0+1+2+…+n=n(n-1)/2 } 语句4频度为:0+1+…+1=n-1 sort(a, n-1); //语句4 } 算法时间复杂度:O(n2)
(2) 便于随机存取表中任一元素。 其缺点是: 不便于进行插入和删除操作 ?
10
第2章 线性表第二讲 抢答题——主要要掌握的知识点
3.在顺序表中判断空间是否为满的条件是: ? curLen>=listElem.length 4.在顺序表上的插入操作insert(int i,Object x) 中i的限制条件是: 0≤i≤n ? 5.将当前顺序表中第i(0≤i≤n-1)元素后移一个位 置的语句是: listElem[i+1]=listElem[i] ? 6.在顺序表中的最后一个数据元素之前插入一个新 ? 元素,其操作的时间复杂度是: O(1) 删除顺序表中第0个数据元素的时间复杂度是:? O(n)
16
第2章 线性表第四讲 ——主要要掌握的知识点
在单链表上实现删除操作的主要步骤(书 P46) 1.判断单链表是否为空; 2.确定待删除位置(注意要找到其前驱); 3.修改指针,使被删结点从链表中脱离出 来。
17
第3章 栈与队列第一讲 ——主要要掌握的知识点
1. 栈的特性是什么? “先出后出”或“后进先出” 2.顺序栈的判空和判满条件? 判空条件:top==0; 判满条件:top==stackElem.length; 3.顺序栈的入栈和出栈操作步骤及实现算法 (参考P72-73算法3.1与算法3.2); 关键语句:入栈 stackElem[top++]=x 出栈 return stackElem[--top]
在单链表上实现插入操作的步骤(书P43) 1.确定待插入位置(注意要找到其前 驱); 2.创建新的结点; 3.修改指针,将新结点插入到指定位置。
13
第2章 线性表第三讲 抢答 ——主要要掌握的知识点
在单链表中P指针所指的结点之后插入一 个新结点S,其修改链的语句是: ?
① S.setNext(P.getNext()); ② P.setNext(S); P
25
第4章 串与数组第二讲数组 ——主要要掌握的知识点
3.稀疏矩阵的存储方式。 三元组顺序表 十字链表
26
第5章 树与二叉树第一讲 ——主要要掌握的知识点
1. 线性结构与树型结构的逻辑特点
线性结构
第一个数据元素 (无前驱) 最后一个数据元素 (无后继) 其它数据元素 (一个前驱、 一个后继) 元素之间存在“一对一” 的关系
第3章 栈与队列第二讲 ——主要要掌握的知识点
第3章 栈与队列第二讲 ——主要要掌握的知识点
3.循环顺序队列的入队和出队操作步骤及实现算法 (参考P92算法3.6与算法3.7); 关键语句: 入队: queueElem[rear]=x; //x入队 rear=(rear+1)%queueElem.length;//尾指针下移 出队: Object t=queueElem[front]; //读取队首元素 front=(front+1)%queueElem.length;//首指主要要掌握的知识点
1. 哈夫曼树和哈夫曼编码的建立
例如:设A.B.C.D.E.F六个字母出现的的概率为{7,12, 4,6,32,3}试写出为这六个字母设计的huffman编码并 画出对应的hufffman树。
2. 树、森林与二叉树之间的转换 (1)树与二叉树之间的转换规则: 左孩子右兄弟
4.在顺序表上实现查找操作的方法及实
现算法。
6
第2章 线性表第二讲 ——主要要掌握的知识点
在顺序表上实现插入操作的步骤(书P34) 1.空间及参数合法性判断; 2.确定插入位置; 3.将插入位置及其之后的所有元素后移 一位; 4.将待插入的元素插入到指定位置 5.修正表长:表长加1 实现插入操作的算法可参考书P35/算法2.1 7
第2章 线性表第二讲 ——主要要掌握的知识点
在顺序表上实现删除操作的步骤(书P36) 1.参数合法性判断; 2.确定删除位置; 3.将删除位置之后的所有元素前移一位; 4.修正表长:表长减1
实现删除操作的算法可参考书P36/算法2.2
8
第2章 线性表第二讲 ——主要要掌握的知识点
在顺序表上实现查找操作的方法
11
第2章 线性表第三讲 ——主要要掌握的知识点
1.单链表结点类和单链表类的描述;
2.在单链表上实现按位序号和按值查找
操作的方法及实现算法(参考P42算
法2.4和算法2.5);
3.在单链表上实现插入操作的步骤及实
现算法。(参考P43算法2.6)。
12
第2章 线性表第三讲 ——主要要掌握的知识点
第1章 绪论第一讲 ——主要要掌握的知识点
1.数据结构课程研究的内容包括哪三个
方面?
2.按数据元素的逻辑关系来分,数据结 构分为哪四类? 3.存储结构通常有哪四种?最常用是哪 两种?
1
第1章 绪论第二讲 ——主要要掌握的知识点
1.何谓算法?算法与程序有何区别? 2.什么叫抽象数据类型?在教材中抽象
ai-1
②
ai
S
x
①
14
第2章 线性表第三讲 抢答 ——主要要掌握的知识点
在单链表中插入操作和查找操作的时间复 杂度是: ? O(n)
15
第2章 线性表第四讲 ——主要要掌握的知识点
1.在单链表上实现册除操作的步骤及实
现算法(参考P46算法2.8);
2.循环链表的特点; 3.双向链表上的插入和删除操作,主要 掌握其修改指针的语句;
? 2.具有10个结点的完全二叉树,其深度是:4 叶子结点的个数是: ? 5
3.深度为5完全二叉树,其结点的个数的最 小值: ?16 最大值是: ? 31
28
第5章 树与二叉树第二、三讲 ——主要要掌握的知识点
1. 二叉树的存储结构
顺序存储(适应于满及完全二叉树)
链式存储(二叉及三叉链式存储)
21
第3章 栈与队列第二讲 ——主要要掌握的知识点
4. 不带头结点的链队列的判空条件? front==rear==null 5.链队列的入队和出队操作步骤及实现算法 (参考P94-95); 修改链的关键语句: 入队: rear.setNext(p); rear=p; 出队: front=front.getNext();
18
第3章 栈与队列第一讲 ——主要要掌握的知识点
4. 链栈的判空条件? top==null 5.链栈的入栈和出栈操作步骤及实现算法 (参 考P75算法3.4与算法3.5); 修改链的语句: 入栈:p.setNext(top); top=p; 出栈:top=top.getNext();
19
1. 队列的特性是什么? “先出先出” 2.循环顺序队列存储结构的描述及循环顺序队列的判 空和判满条件? 三种不同方法对应三种不同的判断条件: (1)少用一个空间: 判空条件: front==rear; 判满条件: front==(rear+1)%queueElem.length; (2)设置标志变量(flag,入队时为1,出队时为0): 判空条件: front==rear&&flag==0; 判满条件: front==rear&&flag==1; (3)设置计数变量(num): 判空条件: front==rear&&num==0或 num==0; 20 判满条件: front==rear&&num>0或num==queueElem.length;
4
第2章 线性表第一讲 ——主要要掌握的知识点
1.什么叫线性表?线性表的逻辑特性是 什么? 2.什么叫顺序存储?顺序存储的特点是 什么?
5
第2章 线性表第二讲 ——主要要掌握的知识点
1.顺序表类的描述
2.在顺序表上实现插入操作的步骤及实
现算法。
3.在顺序表上实现删除操作的步骤及实
现算法。
22
第4章 串与数组第一讲串 ——主要要掌握的知识点
1.串的抽象数据类型定义中各操作的含义; 2.在顺序存储结构下串的基本操作(如求串的长
度length,串的插入insert、删除delete,截
子串substring,串的比较compareTo和串逆 置reverse等)实现算法; 3.利用串的基本操作实现其它串的操作,如串的 替换repleace,子串的定位indexOf等。
数据类型是通过什么进行描述的?
3.算法的复杂度是从哪两个方面进行分
析的?
4.什么叫语句频度?如何进行时间复杂
度的估算?
2
第1章 绪论第二讲 ——主要要掌握的知识点
4.计算下面程序段中语句”x=x+1”的语句 频度及程序段的时间复杂度。
for(i=1;i<=n-1;i++) for(j=i+1;j<=n;j++) x=x+1; 答案: 语句频度为:(n-1)+(n-2)+…+1=n(n-1)/2 程序段的时间复杂度:O(n2)
方法:从顺序表的第0个元素开始依次将数据 元素值与待查找的元素值进行比较。注意查找成功 与查找不成功两种查找结果的鉴定条件。
实现查找操作的算法可参考书PP37
9
第2章 线性表第二讲 抢答题——主要要掌握的知识点
1.在顺序表的第i(0≤i≤n)个位置上插入一个新的 数据元素,会引起 n-i 个数据元素的移动;删除 ? 顺序表的第i(0≤i≤n-1)个元素又会引起 n-i-1个 ? 数据元素的移动; 2.线性表用顺序存储的优点是:(1) 存储密度高 ?