数据结构基础讲义全
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Date:13 August 2020
4.6 树转化为二叉树
IT Education & Training
•左孩子右兄弟表示法可以将一颗多叉树转化为一颗二 叉树。
Date:13 August 2020
4.7 满二叉树和完全二叉树
IT Education & Training
Date:13 August 2020
Date:13 August 2020
5.1 查找的概念
IT Education & Training
•根据给定的某个值,在查找表中确定一个其关键字等 于给定值的记录或数据元素,若表中存在这样的一个记 录,则称查找是成功的。
Date:13 August 2020
5.2 编程实战
• 顺序查找 • 二分查找
4.7 二叉树的链式存储
IT Education & Training
二叉链存储
Date:13 August 2020
4.7 二叉树的链式存储
IT Education & Training
三叉链存储
Date:13 August 2020
4.8 二叉树的遍历
IT Education & Training
1.1 讨论的范畴
问题
构建数学模型
程序实现
算法+数据结构 = 程序设计
IT Education & Training
处
给
理
出
问
问
题
题
的
的
策
数
略
学
模
型
处编
理制
问出
题 用
的
计指
算令
机集
Date:13 August 2020
1.1 讨论的范畴
IT Education & Training
• 例1 求小红C语言和数据结构两门语言的考试的平均成 绩成绩和总成绩。全省的呢?
Date:13 August 2020
4.1 树的定义
IT Education & Training
•定义:
- 由一个或多个结点组成的有限集合T,有且仅有一个结点称为 根,其余的结点分为m个互不相交的有限集合T1, T2,…,Tm。 每个集合本身又是棵树,被称作这个根的子树。
•树的特点:
–非线性结构,有一个直接前驱,但可能有多个直接后继(1:n) –树的定义具有递归性,树中还有树 –树可以为空,即节点个数为0
• 栈的特殊之处在于限制了这个线性表的插入和 删除的位置,它始终只在栈顶进行。
Date:13 August 2020
3.2 编程实战
• 栈的顺序存储
利用一组地址连续的的存储单元依次存放 自栈底到栈顶的数据元素,同时附设指针 top只是栈顶元素在顺序表中的位置。
IT Education & Training
Date:13 August 2020
IT Education & Training
4.2 树的术语
专业术语
含义
根
也叫根结点(没有前驱)
叶子
也叫终端结点(没有后继)
森林
指m棵不相交的树的集合(例如删除A后的子树个数)
有序树
结点各子树从左至右有序,不能互换(左为第一)
无序树
结点各子树可互换位置
双亲
即上层的那个结点(直接前驱) parent
• 栈的链式存储
Date:13 August 2020
3.4 队列的特点
IT Education & Training
• 队列为一种可以实现“先进先出”(FIFO)的存储 结构。
• 队列是一种特殊的受限制的线性表,只允许在 一端进行插入操作,而在另一端进行删除操作 的线性表,队列不允许在中间部位进行操作。
a. 在解决问题时可能遇到的典型的逻辑结构(数据结构) b. 逻辑结构的存储映象(存储实现) c. 数据结构的相关操作及其实现。(算法)
通俗点讲,数据结构研究的是数据的存储和操作。
Date:13 August 2020
1.3 三个方面
数据的逻辑结构
数据的存储结构
IT Education & Training
• 算法是特定问题求解步骤的描述,在计算机中 表现为指令的有限序列,算法是独立存在的一 种解决问题的方法和思想。对于算法而言,语 言并不重要,重要的是思想。
• 数据结构和算法的关系:数据结构是专门研究 数据的存储问题,而对存储后的数据进行相应 的操作就是算法。
Date:13 August 2020
结点的层次
从根到该结点的层数(根结点算第一层)
终端结点
即度为0的结点,即叶子
分支结点
除树根以外的结点(也称为内部结点)
树的深度(或高度)
指所有结点中最大的层数(从根节点到最低层的结点层数)
Date:13 August 2020
4.3 树的表示法
IT Education & Training
Date:13 August 2020
线性结构
线性表 栈 队列
非线性结构
顺序存储 链式存储
树形结构 图形结构
数据的运算:查找、排序、插入、删除、修改等
Date:13 August 2020
1.3 逻辑和物理结构
IT Education & Training
逻辑结构
123 4 65
1
2
3
56
7
1 2
4
3
线性结构
树形结构
图形结构
物理结构
12345
O(n2)
5log2n+20
2n+3nlog2n+19 6n3+2n2+3n+4
O(logn) O(nlogn) O(n3)
2n
O(2n)
非正式术语 常数阶 线性阶 平方阶 对数阶
nlogn阶 立方阶 指数阶
Date:13 August 2020
1.6 时间复杂度举例
• 线性阶:O(n)
IT Education & Training
• Q1. 假设以带头结点的循环链表表示队列,并又只设一个指针指向队 尾元音结点(注意不设头指针),试编写相应的队列初始化、入队列和 出队列的算法。
• Q2. 假设称正读和反读都相同的字符序列为“回文”,例如,”aba” 和”abcba”是回文,”abcde”和”ababab”则不是回文。试写一个算法判 别读入的一个以“@”为结束符的字符序列是否是“回文”。
4.7 树的顺序存储
•多叉树顺序存储的缺陷
IT Education & Training
Date:13 August 2020
4.7 完全二叉树的顺序存储
IT Education & Training
完全二叉树存储
非完全二叉树存储缺点:
①浪费空间;②插入、删除不便
Date:13 August 2020
孩子
即下层结点的子树 (直接后继) child
兄弟
同一双亲下的同层结点(孩子之间互称兄弟)sibling
堂兄弟
即双亲位于同一层的结点(但并非同一双亲)cousin
祖先
即从根到该结点所经分支的所有结点
子孙
即该结点下层子树中的任一结点
结点
也叫节点,即树的数据元素
结点的度、树的度
结点挂接的子树数、所有结点度中的最大值
• 例2 酒店管理中的客房分配问题。 • 例3 煤气管道的铺设问题。 • 等等……
例子中的ugust 2020
1.2 定义
IT Education & Training
• 数据结构是一门讨论"描述现实世界实体的数学模 型及其上的操作在计算机中如何表示和实现"的学 科。
4.4 树的表示法
IT Education & Training
Date:13 August 2020
4.5 二叉树的概念
IT Education & Training
•二叉树由一个根结点加上两棵分别称为左子树和右子 树的互不相交的树组成:
–每个结点最多只有两棵子树(不存在度大于2的结点) –左子树和右子树次序不能颠倒(有序树)
Date:13 August 2020
数据结构
IT Education & Training
传智播客
--肖兴贵
Date:13 August 2020
主要内容
• 1 概要 • 2 线性表 • 3 栈和队列 • 4 树和二叉树 • 5 查找和排序
IT Education & Training
Date:13 August 2020
第1天 习题
IT Education & Training
• Q1. 创建两循环单向链表并将它们合为一各链表? • Q2. 头指针和头节点有什么区别?头结点和其他节点有什么区别?
Date:13 August 2020
3.1 栈的特点
IT Education & Training
• 栈为一种可以实现“先进后出”的存储结构, 凡是对数据的处理具有“后进先出(LIFO)”的 特点,都可以用栈这种数据结构来操作。
• 单向链表
头指针 (a)
头指针
a0
a1
…
an-1
(b)
Date:13 August 2020
2.3 编程实战
IT Education & Training
• 经典双向链表
主要操作:初始化头结点、添加、删除、获取元素、遍历
头指针 (a)
头指针
a0
a1
…
an- 1
(b)
Date:13 August 2020
• 遍历是指按某条搜索路线遍访每个结点且不重复(又 称周游),遍历是树结构插入、删除、修改、查找和 排序运算的前提,是二叉树一切运算的基础和核心。
• 牢记一种约定,对每个结点的查看都是“先左后右”。
遍历方式
特点
先序遍历(先根遍历,DLR) 根 -> 左子树 -> 右子树
中序遍历(中根遍历,LDR) 左子树 -> 根 -> 右子树
后序遍历(后根遍历,LRD) 左子树 -> 右子树 -> 根
Date:13 August 2020
4.8 二叉树的遍历
IT Education & Training
Date:13 August 2020
4.8 编程实战
• 二叉树的动态创建和释放 • 二叉树的递归遍历 • 计算二叉树叶子节点数目 • 计算二叉树高度
• 线性表是零个或者多个数据元素的有限序列,数据元素之间是有 顺序的,数据元素个数是有限的,数据元素的类型必须相同
Date:13 August 2020
2.1 编程实战
IT Education & Training
• 动态数组
数组到底应该有多大才合适,通常不得而知。所以希 望能够在运行时具有改变数组大小的能力。(基本操 作:创建、销毁、插入、删除、遍历打印)
顺序存储
1
3
52
4
链式存储
Date:13 August 2020
1.4 相关概念
• 数学模型 • 集合和关系 • 数据和信息 • 数据元素 • 数据项 • 关键码 • 抽象数据类型
IT Education & Training
Date:13 August 2020
1.5 算法的定义
IT Education & Training
Date:13 August 2020
3.5 编程实战
• 队列的顺序存储
IT Education & Training
Date:13 August 2020
3.6 编程实战
• 队列的链式存储
IT Education & Training
Date:13 August 2020
第2天 习题
IT Education & Training
IT Education & Training
A
B
C
D
E
F
G
H
I
Date:13 August 2020
第3天 习题
IT Education & Training
• Q1 编写递归算法,在二叉树中求位于先序序列中第A个位置的结点的值。 • Q2 编写递归算法,计算二又树中叶子结点的数目。 • Q3 编写递归算法,将二叉树中所有结点的左、右子树相互交换。
1.5 算法效率的度量
IT Education & Training
• 我们通过大O表示法来表示算法的效率:时 间复杂度、空间复杂度。规则如下:
(1)只关注最高次项,常数项和次要项忽略; (2)时间复杂度是指最坏时间复杂度; (3)只有常数项记做1。
执行次数函数
阶
12
O(1)
2n+3
O(n)
3n2+2n+1
• 平方阶: O(n2)
Date:13 August 2020
1.6 空间复杂度举例
• 空间复杂度:O(n)
IT Education & Training
Date:13 August 2020
2.1 线性表概念
IT Education & Training
• 线性结构的基本特点是节点之间满足线性关系。数组、链表、栈、 队列都属于线性结构。他们的共同之处,是节点中有且只有一个 开始节点和终端节点。他们分别属于几种不同的抽象数据类型实 现,它们之间的区别,主要就是操作的不同。
IT Education & Training
Date:13 August 2020
5.3 排序的概念
IT Education & Training
•排序是计算机内经常进行的一种操作,其目的是将一 组“无序”的数据元素调整为“有序”的数据元素。排 序是高效查询的前提。