基本数据结构
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
常用的堆栈运算:
◦ 压栈(Push),将新的元素放入堆栈 ◦ 弹栈(Pop),从堆栈顶端取走元素
堆栈可以使用数组或链表实现
应用:计算器、编译器、程序设计、数制转换
某些计算器使用逆波兰表达式( Reverse Polish Notation )进行工作
1920年由J. Lukasiewicz发明 完成数学公式的计算,可以不用括号 例如: (3+4)*5,成为RPN以后:
数据的组织是一个非常重要的计算机科学问题
数据结构是指计算机存储数据的方式,以便它可以 有效地使用
◦ 不同的数据结构有不同的访问属性和选择合适的数据结构 提高算法效率上发挥很大作用。
◦ 一维数组,或者向量(vector),是一个非常简单的数据 结构用于保存序列数据。它有什么访问属性?
有些数据可以使用表来保存,(也可以称为二维数 组或矩阵)
计算机科学中常用的树称为“二叉树( binary tree )” ◦ 二叉树的每个节点上最多有2个孩子
有一个完美的二叉树在每个深度上具有最大的节点数量 (深度n是什么意思?)
应用:数据压缩,文件存储,游戏树
Root的值为14 该二叉树有4片叶子,13, 37, 12, 38
该树不是完美的(也不完整)
队列可以使用数组或链表实现
应用:打印机、仿真、网络(路由器)
一组n个候选者, 排列成环状,所有第m个人都会被 淘汰,只有一位幸运者被选上
1. 将队列Q中,所有人按1到n编号 2. 当队列不空,做以下动作:
a. 做以下m-1次 i. x=Dequeue Q
ii. Enqueue Q(x) b. x=Dequeue Q 3. 输出X作为最后的幸运者
为了使用链表,我们只需要知道其中的第一个数据 值存储在那里
使用链表保存数列[4, 9, 17, 23, 29]
一维有序数组
实际上,我们可能要移动数据集合,为新的数值腾 地方,当然,这取决于我们要在哪里插入(例如: 12)
利用数组的优势在哪里?
利用链表的优势又在哪里?
对于每个节点,在显示 其自身之前,先显示其 有其左侧的节点,最后 再显示其右侧的 节点
堆(Max-heaps,最大堆)是一棵二叉树,而且: ◦ 堆是一棵完整的二叉树:
所谓完整二叉树,就是在树的每一层上,都有 实际可能最大化数量的节点,除了最后一层上, 可能只有左接或右接的节点
◦ 对于堆中的每个节点,其值比它的所有孩子都 大
邻接表
邻接矩阵
邻接表
请举出现实生活中具有权图性质的案例
邻接矩阵
邻接表
Minimal Spanning Tree (MST)
在图G中查找树T,该树组成的最小集合的边连接了 所有节点,且不构成环,并总成本最低。 算法:
如何使用raptor实现链表和基本运算(加入、删除、 输出);
◦ 提示(使用平行数组), ◦ 但在实际上基本没有优势。(想一想,为什么?) ◦ 回顾:计算思维中“计算的能力与限制”
堆栈是一种特殊的数据结构,基本的工作方式是, 后入先出(Last In First Out, LIFO)
◦ LIFO: 最后放入堆栈的数据最先被取走
34+5*
计算逆波兰表达式
队列是一种特殊的数据结构,基本的工作方式是, 先入先出(First In First Out, FIFO)
◦ FIFO: 最先放入队列的数据最先被取走
常用的队列运算:
◦ 入队( Enqueue ),将新的元素放入堆栈 ◦ 出队(Dequeue),从堆栈顶端取走元素
每一个单元格可以使用两个下标,分别表示数据所 在单元格的索引值
对一个矩阵内的所有元素进行累加求和 输入M,一个5X5的整数矩阵
另一种线性的存储了序列数据值数据结构是链表
链表中的数据值并不一定要存储在相邻的存储单元
为了适应保存序列数据的功能,每个数据值都有一 个额外的“指针”,表示表中下一个数据值是在计 算机内存中的某个地方
常见的二叉树对节点的描述,与链表做法相同
◦ 但不是next指针,而是left和right指针
也可以使用数Βιβλιοθήκη Baidu实现
Binary Search Trees(BST) 二叉搜索树定义了一种节点的次序,典型的:
◦ 任何节点左侧的节点中的值小于该节点的
◦ 任何节点右侧的节点中的值大于该节点的
图是一个数据结构,它由节点(node)集合和连接 节点对的边(edges)的集合组成 ◦ 一个图本身没有根
◦ 使用边,一个节点可以连接到任何数量的其他 节点 一条边可能是双向的(无向的),或有向的(单向)
◦ 边可有权重 ,表明在该图中通过该边的成本
应用:计算机网络,交通运输系统,社会关系
邻接矩阵
请跟踪第1步和2b执行后的情况, 在6取3的情况下: 约瑟夫环上的哪个位子是幸运位?
如何使用Raptor来构架:
◦表 ◦ 链表 ◦ 堆栈 ◦ 队列
的基本结构和运算
《计算概论-8》
树是一种层次性(通常是非线性)数据结构 ◦ 每棵树都有一个根节点(root node) ◦ 每个节点都有一或多个“孩子( children )” ◦ 没有孩子的节点称为叶子(leaf)
对于每个要插入到二叉搜索树的数据值:
◦ 开始在根节点比较新的数据值
◦ 如果是小于,向下左移动。如果大于,向右下 移动
◦ 对根节点的孩子重复比较,直到在没有节点的 位置上结束
◦ 在这个空位置插入一个新的节点
插入: 84, 41, 96, 24, 37, 50, 13, 98
树排序
从根节点开始,
将新的数据插入下一个可以使用的位置 交换数据的父辈(如有必要)
直到把树重新整理成堆
移除根节点(最大值) 用最底层的“最后一个” 的节点值替代
将数据与比它大的孩子 交换(如有必要), 直到树重新恢复成堆
哪个的设计用途是方便搜索?
哪个的设计是为了快速检索最大值?
堆的要求是完整而不是完美( complete but not perfect )树,那么二叉搜索树 又如何?
◦ 压栈(Push),将新的元素放入堆栈 ◦ 弹栈(Pop),从堆栈顶端取走元素
堆栈可以使用数组或链表实现
应用:计算器、编译器、程序设计、数制转换
某些计算器使用逆波兰表达式( Reverse Polish Notation )进行工作
1920年由J. Lukasiewicz发明 完成数学公式的计算,可以不用括号 例如: (3+4)*5,成为RPN以后:
数据的组织是一个非常重要的计算机科学问题
数据结构是指计算机存储数据的方式,以便它可以 有效地使用
◦ 不同的数据结构有不同的访问属性和选择合适的数据结构 提高算法效率上发挥很大作用。
◦ 一维数组,或者向量(vector),是一个非常简单的数据 结构用于保存序列数据。它有什么访问属性?
有些数据可以使用表来保存,(也可以称为二维数 组或矩阵)
计算机科学中常用的树称为“二叉树( binary tree )” ◦ 二叉树的每个节点上最多有2个孩子
有一个完美的二叉树在每个深度上具有最大的节点数量 (深度n是什么意思?)
应用:数据压缩,文件存储,游戏树
Root的值为14 该二叉树有4片叶子,13, 37, 12, 38
该树不是完美的(也不完整)
队列可以使用数组或链表实现
应用:打印机、仿真、网络(路由器)
一组n个候选者, 排列成环状,所有第m个人都会被 淘汰,只有一位幸运者被选上
1. 将队列Q中,所有人按1到n编号 2. 当队列不空,做以下动作:
a. 做以下m-1次 i. x=Dequeue Q
ii. Enqueue Q(x) b. x=Dequeue Q 3. 输出X作为最后的幸运者
为了使用链表,我们只需要知道其中的第一个数据 值存储在那里
使用链表保存数列[4, 9, 17, 23, 29]
一维有序数组
实际上,我们可能要移动数据集合,为新的数值腾 地方,当然,这取决于我们要在哪里插入(例如: 12)
利用数组的优势在哪里?
利用链表的优势又在哪里?
对于每个节点,在显示 其自身之前,先显示其 有其左侧的节点,最后 再显示其右侧的 节点
堆(Max-heaps,最大堆)是一棵二叉树,而且: ◦ 堆是一棵完整的二叉树:
所谓完整二叉树,就是在树的每一层上,都有 实际可能最大化数量的节点,除了最后一层上, 可能只有左接或右接的节点
◦ 对于堆中的每个节点,其值比它的所有孩子都 大
邻接表
邻接矩阵
邻接表
请举出现实生活中具有权图性质的案例
邻接矩阵
邻接表
Minimal Spanning Tree (MST)
在图G中查找树T,该树组成的最小集合的边连接了 所有节点,且不构成环,并总成本最低。 算法:
如何使用raptor实现链表和基本运算(加入、删除、 输出);
◦ 提示(使用平行数组), ◦ 但在实际上基本没有优势。(想一想,为什么?) ◦ 回顾:计算思维中“计算的能力与限制”
堆栈是一种特殊的数据结构,基本的工作方式是, 后入先出(Last In First Out, LIFO)
◦ LIFO: 最后放入堆栈的数据最先被取走
34+5*
计算逆波兰表达式
队列是一种特殊的数据结构,基本的工作方式是, 先入先出(First In First Out, FIFO)
◦ FIFO: 最先放入队列的数据最先被取走
常用的队列运算:
◦ 入队( Enqueue ),将新的元素放入堆栈 ◦ 出队(Dequeue),从堆栈顶端取走元素
每一个单元格可以使用两个下标,分别表示数据所 在单元格的索引值
对一个矩阵内的所有元素进行累加求和 输入M,一个5X5的整数矩阵
另一种线性的存储了序列数据值数据结构是链表
链表中的数据值并不一定要存储在相邻的存储单元
为了适应保存序列数据的功能,每个数据值都有一 个额外的“指针”,表示表中下一个数据值是在计 算机内存中的某个地方
常见的二叉树对节点的描述,与链表做法相同
◦ 但不是next指针,而是left和right指针
也可以使用数Βιβλιοθήκη Baidu实现
Binary Search Trees(BST) 二叉搜索树定义了一种节点的次序,典型的:
◦ 任何节点左侧的节点中的值小于该节点的
◦ 任何节点右侧的节点中的值大于该节点的
图是一个数据结构,它由节点(node)集合和连接 节点对的边(edges)的集合组成 ◦ 一个图本身没有根
◦ 使用边,一个节点可以连接到任何数量的其他 节点 一条边可能是双向的(无向的),或有向的(单向)
◦ 边可有权重 ,表明在该图中通过该边的成本
应用:计算机网络,交通运输系统,社会关系
邻接矩阵
请跟踪第1步和2b执行后的情况, 在6取3的情况下: 约瑟夫环上的哪个位子是幸运位?
如何使用Raptor来构架:
◦表 ◦ 链表 ◦ 堆栈 ◦ 队列
的基本结构和运算
《计算概论-8》
树是一种层次性(通常是非线性)数据结构 ◦ 每棵树都有一个根节点(root node) ◦ 每个节点都有一或多个“孩子( children )” ◦ 没有孩子的节点称为叶子(leaf)
对于每个要插入到二叉搜索树的数据值:
◦ 开始在根节点比较新的数据值
◦ 如果是小于,向下左移动。如果大于,向右下 移动
◦ 对根节点的孩子重复比较,直到在没有节点的 位置上结束
◦ 在这个空位置插入一个新的节点
插入: 84, 41, 96, 24, 37, 50, 13, 98
树排序
从根节点开始,
将新的数据插入下一个可以使用的位置 交换数据的父辈(如有必要)
直到把树重新整理成堆
移除根节点(最大值) 用最底层的“最后一个” 的节点值替代
将数据与比它大的孩子 交换(如有必要), 直到树重新恢复成堆
哪个的设计用途是方便搜索?
哪个的设计是为了快速检索最大值?
堆的要求是完整而不是完美( complete but not perfect )树,那么二叉搜索树 又如何?