北京工业大学 数据结构 期末复习

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
^| A |^ B ^|B | ^| C | | E |^ ^|D|^ A
五个分别带权值为9,2,5,7,12
的叶子
结点构造Huffman树,进行编码,并写出
31
该树的带权外部路径长度WPL。
给定关键码序列,创建二叉搜索树
,并删除某个结点(按照教材中的 改进算法),求ASL
堆排序:
给定关键码序列,建初堆。
插入、删除结点后,调整为堆
第6 章

树与森林定义、ADT定义、基本操作 树(森林)周游(深度优先、广度优先)

C++引入模板概念,是想突出数据的逻辑结构而忽略 其具体的数据类型
声明、定义和使用 C++类模板(2)
类模板:描述了一组相关的类,它们只能通过类型来区分 1、类模板声明:仅提供了类的名称和类的模板参数 template <class Elem> //类模板 Array 可接受任何类型作为参数 class Array { Elem* data; int size; //声明类模板Array的类数据 public: Array( int sz ) ; //函数成员 int GetSize( ) ; }; 2、函数成员定义 template <class Elem> Array<Elem>::Array( int sz ) { size = sz; data = new Elem[size];} template <class Elem> int Array<Elem>::GetSize( ){ return size; } 3、类模板的用法 Array<int> int_array(100); //Array接收int作参数, //int_array为长100的int型数组对象
/ < < > > < > <
( < < < < < 错 <
) > > > > = >
# > > > > 错 > =
a/(b-c)+d*e# abc-/de*+
输入 a / ( b c ) + d * e # 动作 输出a />#,入栈 入栈 输出b - > ( ,入栈 输出c -出栈输出,直至( )==( ,出栈不输出 +</, /出栈输出 +>#,入栈 输出d *>+,入栈 输出e 连续出栈输出 栈内容 # #/ #/( ab 后缀表达式 对应算法步骤 a 1 4.2 2 1 4.2 1 3.2 3.2 4.1 4.2 1 4.2 1 5
数据的抽象
算法的抽象

类模板代表一类类,不代表具体的类 类模板的定义格式:
ADT定义类模板
template<class Type> //类型参数Type,使用时用具体数据类型代替 class className{ private: Type dataList; … public: methodName( ); … };
考试题型
单选:5题,共10分 填空:5题,共10分 简答题:5题,共45分 算法阅读:15分 算法设计:20分
考试要求:闭卷
第1章 概论

DS描述“按一定逻辑关系组织的数据元素的表示及相关
操作

数据逻辑结构:线性结构、树形结构和图形结构

数据存储结构:顺序方法、链接方法、索引方法、散列

顺序表优点


存储紧凑(逻辑结构由存储相对位置体现,没使用指针,不 用花费附加开销 ) 随机访问(给定下标,常量时间可定位) 不限定长度(无需事先了解线性表的长度,允许线性表的长 度有很大变化 ) 不必移动,仅需改指针即可插删(能够适应经常插入删除内 部元素的情况 ) 不能确定长度上限、频繁插删:用链式存储结构
第2 章
线性表
清楚线性表定义、理解类定义及抽象数据 类型中定义的各个基本操作含义 存储形式:顺序存储结构、链式存储结构 顺序存储结构的特点:
1.逻辑结构与物理结构一致; 2.属于随机存取方式 缺点:插入\删除元素需要移动,平均约一半的元素, 限制了长度变化
链式存储结构的特点:
1.逻辑结构与物理结构不一致; 2.属于顺序存取方式
先根次序周游森林 后根次序周游森林
= 前序周游二叉树
= 中序周游二叉树
树(森林)与二叉树的等价转换 树与森林的链式存储结构
动态“左子/右兄”二叉链表表示法
森林与二叉树的等价转换



森林由3部分组成: 森林中第一棵树的根结点 森林中第一棵树的子树森林 森林中其它树构成的森林
动态“左子/右兄”二叉链表表示法
#/(#/( #/ # #+ abc abcabc-/ abc-/d
#+*
abc-/de abc-/de*+
后缀表达式求值

循环:依次分析输入序列:

1.输入是操作数:则入栈; 2.输入是运算符:则两次出栈,取操作数2和 操作数1,按照运算符进行计算。将结果入栈。

重复,直至遇到结束符“=”
O(1)<O(logn)<O(n)<O(nlogn)<O(n2) 常数阶 对数 线性 对数乘积 平方 <O(n3)<….<O(2n)<O(n!) 立方 指数 阶乘 T 常数:g(n) = 1 2n 对数:g(n) = logn 线性增长: g(n) = n 二阶增长: g(n) = n2 g(n) = nlog(n), n <= nlog(n)增长率 <= n2 指数增长: g(n) = an
此时栈顶值就是输入表达式的值。
第 4 章 字符串(了解)

基本概念 存储结构(顺序、标准类)

基本操作的含义
第5 章
二叉树
定义、性质、存储结构(相应的类定义) 满二叉树、完全二叉树及扩充二叉树 抽象数据类型定义中的基本操作含义 深度周游(递归与非递归),广度周游 二叉搜索树插入、删除(改进)与检索算法;

用最后结点替换被删结点,自上至下调整成堆 (最后结点>被删结点,只影响其子树的最小堆性质) 12 14 26 19 12 12
15
19
15 22
19
15
20 17 18 26 24 22
20 17 18
20 17 18
24 22 26
24 26
删除14 1426
2619
2622
外部路径长度li 扩充二叉树从根到每个外部结点的路径长度之和 外部路径长度最小的二叉树:是完全二叉树 带权外部路径长度(weighted external path)最小的 二叉树:Huffman树 要求给出一个具有n个外部结点的扩充二叉树 每个外部结点 Ki有一个 wi与之对应,作为该外部 结点的权 此扩充二叉树的叶结点带权外部路径长度总和最 n 1 小 w i li i 0 注意:不管内部结点,也不用有序 特点:权越大的叶结点离根越近
2.1.2 线性表的存储结构

逻辑结构存储空间 的映射


数据存储单元 建立映射 关系存储单元之间关系 建立映射

1.
线性表2类存储结构 顺序存储(定长的一维数组结构、向量型顺序存储结构


为整个元素动态分配连续空间 特点:逻辑相邻物理也相邻 按需分配(插入:分配一个结点/删除:回收一结点) 特点:逻辑相邻物理不一定相邻
具有n个结点的满二叉树,其叶子结点
的个数为____________。(如果一棵二叉树的
任何结点,或者是树叶,或者恰有两棵非空子树,则此二 叉树称作满二叉树 ,性质3.任何一棵二叉树,n0 = n2+1)
某棵二叉树的前序序列为ABDEFC,
中序序列为DBFEAC,则该二叉树对 应的后序序列的结果为___________。
5.6 Huffman树及其应用

a: 0001
建树
0 0
100 0 42
1
b:10 c:1110
19
11
23
f 6
0 29
b 2
58 1 29 14
e 5
d:1111 f:01
1
g:0000
h:001
8
1
15 0 7
c 3
d 4
h 8
3
g 7
5
a下标:1
8
与算法有关的典型例题
已知一棵二叉树的前序和中序(后 序和中序)遍历序列,构造对应的 二叉树 通过二叉树,获得对应的树与森林 的相关信息 深度周游与广度周游二叉树
2.
链式存储(变长的线性表存储结构)


链表—单向、循环、双向
不特殊说明,均带头结点(避免对空表的特殊处理) 算法:(时间复杂性) 在有序表中插入/删除结点 给定元素位臵,插入/删除相应结点
注意: 对循环链表操作时,尾部的判断 双向链表的插入/删除结点 删除结点一定要释放空间
2.4 线性表实现方法的比较

常见上限g(n)的种类(用于比较各算法优劣)
n2
n
log
n
题型举例
算法指的是( A. 计算机程序 C. 排序算法 列 )。 B. 解决问题的计算方法 D. 解决问题的有限运算序
将长度为 n 的单链表接在长度为 m 的单链表之 后的算法时间复杂度为 ( ) 。 A. O( n ) B. O( 1 )
第3 章
栈与队列
栈与队列的定义、ADT定义及基本操作。
栈的应用:会跟踪递归函数执行过程
深度(纵向)周游
表达式求值(中缀后缀求值)
队列的应用:按层周游
注意:熟悉ADT的操作形式,会直接调用抽 象数据类型中定义的操作
算符优先关系表
右 左
+ * / ( ) #
+ > > > > < > <
- * > < > < > > > > < < > > < <
20 35
40
85
88
有左子树(改进)
若p(50)有左子树,则在左子树里找中序 周游的最后一个结点s(40),删除s,用s 的左子树代替s,用s代替被删p
这种方法可以降低二叉树的高度。
50 30 20 40 80 90 20 30 35 40 80 90
35
32
85
88
32
85
88
已知序列72,73,71,23,94,16,05,68 建堆

链表优点



适用


按位置频繁进行读取、数据域占用空间小于指针域:用顺序 存储结构
题型举例
有序的顺序表与无序的顺序表相比,其操作优 势是( )。 A. 删除快
C. 生成快
B. 插入快
D. 查找快。
若对线性表进行的主要操作是按下标存取,且
很少插入和删除,则应该采用的存储结构是 _____ ;若需要频繁地对线性表进行插入和删 除时,则应该采用的存储结构是 。
72
最小堆的插入

插入过程:插入点追加到最后,自下而上 依次比较父与子,直到满足堆的定义
12 14 12 12 15 13
15
14
15
19
20 17 18 19
13 17 18 19
14 17 18
24 22 26 13
24 22 26 20
24 22 26 20
插入13
2013
1413
最小堆的删除
源自文库
必须能够跟踪执行过程;求ASL。 堆概念、建堆、筛选、插、删的相关算法(过程) Huffman树构造及Huffman编码
深度优先周游二叉树(递归实现)
1. 2.
3. 4.
5.
6. 7. 8. 9.
template<class T> void BinaryTree<T>::PreOrder (BinaryTreeNode<T>* root) { if(root!=NULL){ Visit(root->value( )); //前序 DepthOrder(root->leftchild()); //访问左子树
方法


抽象数据类型ADT
算法4个特性:通用性、有效性、确定性、有穷性 算法分析:T(n)、S(n)算法分析的相关概念;最差、最 佳与平均情况的意义
ADT的定义




三元组表示 ADT=(D,R,P) ADT 抽象数据类型名 { 数据对象D:<数据对象的定义> 数据关系R :<数据关系的定义> 基本操作P:<基本操作的定义> } ADT 抽象数据类型名 用C++类模板的声明表示ADT
Visit( root ) //中序
DepthOrder(root->rightchild());//访问右子树 }
Visit( root ) //后序
10.

生成二叉搜索树 45,53,12,37,3,100,61,24,90,78 12 3 24 37
45 53 100 61 78 90
二叉搜索树的删除
在二叉搜索树里删除结点时,不是把以这个
结点为根的子树都删除掉,只是删除一个结 点,并且还要保持二叉搜索树的性质。
删除过程分为两种情况:
没有左子树 有左子树
没有左子树
若结点p没有左子树,则用右子树的根代替被删除 的结点p。
50
30
20 35 32 40
80
90 85 88 32
50
30 90
相关文档
最新文档