![](https://img-blog.csdnimg.cn/20190918140053667.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
《数据结构、算法与应用——C++语言描述》
文章平均质量分 90
《数据结构、算法与应用 —— C++语言描述》
coding-hwz
生前何必久睡
展开
-
《数据结构、算法与应用 —— C++语言描述》学习笔记 — 分支定界
《数据结构、算法与应用 —— C++语言描述》学习笔记 — 分支定界一、算法思想二、货箱装载一、算法思想分支定界是一种系统地搜索解空间的方法。它与回溯发的主要区别在于扩展节点的扩充方式。每个活动节点仅有一次机会变成扩展节点。当一个节点变为扩展节点时,从该节点移动一步即可到达的节点是生成的新节点。在省城的节点中,那些不可能导出最优可行解的节点被舍弃,剩余节点加入活动节点列表,然后从表中选择下一个节点作为下一个扩展节点。将选择的节点从表中删除,然后扩展。这种扩展股哟成一直持续到一个解找到了或活动表称为空表。原创 2021-12-01 13:51:31 · 1260 阅读 · 0 评论 -
《数据结构、算法与应用 —— C++语言描述》学习笔记 — 回溯法
《数据结构、算法与应用 —— C++语言描述》学习笔记 — 回溯法一、算法思想二、货箱装载1、问题描述2、回溯算法一、算法思想回溯法是搜索问题解的一种系统方法。前面我们做的迷宫老鼠应用使用了这种技术。回溯法首先需要定义问题的一个解空间。这个空间至少包含问题的一个最优解。在迷宫老鼠问题中,我们可以把从入口到出口的所有路径定义为解空间。在 n 个对象的0/1背包问题中,可以把2n2^n2n个长度为 n 的0/1向量集合定义为解空间。这个集合代表着向量 x 曲志伟0或1的所有可能。回溯法求解的下一步是组织解原创 2021-12-01 13:12:28 · 666 阅读 · 0 评论 -
《数据结构、算法与应用 —— C++语言描述》学习笔记 — 动态规划(二)
《数据结构、算法与应用 —— C++语言描述》学习笔记 — 动态规划(二)一、所有顶点对之间的最短路径1、问题描述2、动态规划公式3、迭代求解一、所有顶点对之间的最短路径1、问题描述所有顶点对之间的最短路径问题是指在有向图G中,寻找每一对顶点之间的最短路径。当边上的权都不是负值的时候,所有顶点对之间的最短路径可以用 dijkstra 算法求解,每次选择 n 个顶点中的一个顶点作为源点。这个过程的时间复杂度为O(n3)O(n^3)O(n3)。使用动态规划求解该过程的算法称为 Floy 算法。Floy原创 2021-11-30 12:33:33 · 569 阅读 · 1 评论 -
《数据结构、算法与应用 —— C++语言描述》学习笔记 — 动态规划(一)
《数据结构、算法与应用 —— C++语言描述》学习笔记 — 动态规划一、算法思想一、算法思想动态规划和贪婪法一样,对一个问题的解释一系列抉择的结果。在贪婪法中,我们依据贪婪准则做出的每一个抉择都是不可撤回的。而在动态规划中,我们要考察一系列抉择,以确定一个最优抉择序列是否包含最优抉择子序列。当最优抉择包含最优抉择子序列时,可以建立动态规划递归方程。对于背包问题,最优选择序列由最优选择子序列构成。假设 f(i, y)表示剩余容量为 y,剩余物品为 i,i + 1,···,n 的被曝问题的最优解的值,即原创 2021-11-28 16:22:57 · 588 阅读 · 0 评论 -
《数据结构、算法与应用 —— C++语言描述》学习笔记 — 分治算法 — 排序
《数据结构、算法与应用 —— C++语言描述》学习笔记 — 分治算法 — 排序一、归并排序1、排序方法2、伪代码及最小复杂度分析一、归并排序1、排序方法可以应用分而治之来设计排序算法,把 n 个元素按非递减顺序排列。这种排序算法常用的结构式:==若 n 为1,则算法终止;否则,将序列划分为 k 个子序列(k 是不小于2的整数)。先对每一个子序列排序,然后将有序子序列归并为一个序列。将 n 个元素的序列仅仅划分为两个子序列,称为二路划分。一种二路划分是把前面 n-1 个元素放到第一个子序列中(称为A)原创 2021-11-23 12:58:19 · 474 阅读 · 0 评论 -
《数据结构、算法与应用 —— C++语言描述》学习笔记 — 分治算法 — 残缺棋盘
《数据结构、算法与应用 —— C++语言描述》学习笔记 —分治算法一、 残缺棋盘1、问题描述2、求解策略一、 残缺棋盘1、问题描述残缺棋盘是一个有2k∗2k2^k*2^k2k∗2k个方格的棋盘,其中恰有一个方格残缺,如图为两个 k=2 的残缺棋盘:在残缺期盼中,要求用三格板覆盖残缺棋盘。在覆盖中,任意两个三格板不能重叠,任意一个三个班不能覆盖残缺方格,但三格板必须覆盖其他所有方格。在这种限制条件下,所需的三格板总数为(22k−1)/3(2^{2k}-1)/3(22k−1)/3。四种三格板的形状如图原创 2021-11-17 13:49:45 · 2766 阅读 · 0 评论 -
《数据结构、算法与应用 —— C++语言描述》学习笔记 — 贪婪算法(二)
《数据结构、算法与应用 —— C++语言描述》学习笔记 — 贪婪算法(二)一、单源最短路径1、问题描述2、贪婪法求解一、单源最短路径1、问题描述给定一个加权有向图G,它的每条边 (i,j) 都有一个非负的成本 a[i][j]。一条路径的长度是该路径所有边的成本之和。寻找一条从一个给定的源顶点出发到达其他任意一个顶点的最短路径。2、贪婪法求解dijkstra算法本质上就是一种贪婪算法,可以分步产生最短路径。在每一步中,该算法都会选找一个到达新的目的顶点的最短路径。其所依据的贪婪准则如下:从一条最短路原创 2021-11-15 11:30:13 · 1220 阅读 · 0 评论 -
《数据结构、算法与应用 —— C++语言描述》学习笔记 — 贪婪算法(一)
《数据结构、算法与应用 —— C++语言描述》学习笔记 — 贪婪算法一、思想二、拓扑排序1、问题描述2、贪婪求解一、思想在贪婪算法中,我们要逐步构造一个最优解。每一步,我们都在一定的标准下,作出一个最优决策。在每一步作出的决策,在以后的步骤中都不可更改。做出决策所依据的标准贪婪准则。前面我们学习过的箱子装载问题的几个常见解决方法都使用了贪婪算法,只是所依据的贪婪准则不同。二、拓扑排序1、问题描述一个复杂的工程,经常可以分解成一组简单一些的任务,这些任务完成了,整个工程也就完成了。例如,汽车装配工原创 2021-11-09 12:12:39 · 86 阅读 · 0 评论 -
《数据结构、算法与应用 —— C++语言描述》学习笔记 — 图 — 遍历
《数据结构、算法与应用 —— C++语言描述》学习笔记 — 图 — 遍历一、广度优先搜索常用的图遍历的算法有两种:广度优先搜索和深度优先搜索。两种算法都是将顶点分为待搜索顶点和已搜索顶点,并通过不断将待搜索顶点集合中的点加入已搜索顶点集合中来完成遍历。二者的区别在于加入的顺序。一、广度优先搜索广度优先搜索是对于每个已搜索结合中的顶点,遍历与之邻接的顶点。这种搜索方法可以用队列实现。同时,我们注意到,这种遍历方式所需要的所有接口都在抽象类 Graph 中提供。因此我们可以直接在 Graph 中实现此方法原创 2021-11-06 13:31:20 · 563 阅读 · 0 评论 -
《数据结构、算法与应用 —— C++语言描述》学习笔记 — 图
《数据结构、算法与应用 —— C++语言描述》学习笔记 — 图一、基本概念1、顶点和边2、方向和权3、路径二、特性三、抽象数据类型1、边及迭代器2、图接口四、无权图的描述1、邻接矩阵一、基本概念1、顶点和边图是一个用线或边连接在一起的定点或节点的集合。严格地说,图是有限集V和E的有序对,即G=(V,E)G=(V,E)G=(V,E),其中V的元素称为顶点,E的元素称为边。每一条边连接两个不同的顶点,而且用元组(i,j)来表示,其中 i 和 j 是边所连接的两个顶点。带方向的边是有向边,不带方向的边叫无原创 2021-11-04 13:18:59 · 170 阅读 · 0 评论 -
《数据结构、算法与应用 —— C++语言描述》学习笔记 — 平衡搜索树 — B树
《数据结构、算法与应用 —— C++语言描述》学习笔记 — 平衡搜索树 — B树一、索引顺序访问方法一、索引顺序访问方法当字典足够小,可以整个驻留在内存中时,AVL树和红黑树都能够保证良好的时间性能。对于那些必须存储在磁盘上的大型字典(外部字典或文件),需要度数更高的搜索树来改善字典操作的性能。我们先学习以下外部字典的索引访问顺序方法(ISAM)。在ISAM中,可用的磁盘空间被划分为很多块。块是在磁盘空间中用来输入或输出的最小单位。块一般具有和磁道一样的长度,而且可以在一次搜索和延迟中完成输入或输出。原创 2021-10-30 13:52:26 · 294 阅读 · 0 评论 -
《数据结构、算法与应用 —— C++语言描述》学习笔记 — 平衡搜索树 — 红黑树
《数据结构、算法与应用 —— C++语言描述》学习笔记 — 平衡搜索树 — 红黑树一、基本概念一、基本概念红黑树是这样的一棵二叉搜索树:树中每一个节点的颜色或者是红色或者是黑色。红-黑树的其他特征可以用相应的扩充二叉树来说明:① 根节点和所有外部节点都是黑色。② 在根至外部节点路径上,没有连续两个节点是红色。③ 在所有根节点至外部节点的路径上,黑色节点的数目相同。红黑树还有另一种等价,它取决于父子节点间的指针颜色。从父节点指向黑色孩子的指针是黑色,从父节点指向红色孩子的指针是红色。另外还有:①原创 2021-10-24 11:52:57 · 139 阅读 · 0 评论 -
《数据结构、算法与应用 —— C++语言描述》学习笔记 — 平衡搜索树 — AVL 树
《数据结构、算法与应用 —— C++语言描述》学习笔记 — 平衡搜索树一、AVL 树1、定义2、高度3、描述4、搜索5、插入一、AVL 树如果搜索树的高度总是O(logn)O(logn)O(logn),我们就能保证查找、插入和删除的时间为O(logn)O(logn)O(logn)。最坏情况下的高度为O(logn)O(logn)O(logn)的树称为平衡树。比较流行的一种平衡树是 AVL 树。1、定义一棵空的二叉树是 AVL 树;如果 T 是一个非空的二叉树,TLT_LTL和TRT_RTR分别是其原创 2021-10-14 11:09:57 · 212 阅读 · 0 评论 -
《数据结构、算法与应用 —— C++语言描述》学习笔记 — 二叉搜索树
《数据结构、算法与应用 —— C++语言描述》学习笔记 — 二叉搜索树一、二叉搜索树1、二叉搜索树特征2、索引二叉搜索树二、二叉搜索树实现一、二叉搜索树前面我们学习了抽象数据类型 dictionary,使用散列实现的字典操作(查找、插入和删除)所需要的平均时间为O(1)O(1)O(1)。而这些操作在最坏情况下的时间与字典的元素个数呈线性关系。对于以下操作,散列并不具备哦较好的平均性能:(1)升序输出字典元素(2)升序找到第 k 个元素(3)删除第 k 个元素。为了执行操作(1)需要从表中收集数据原创 2021-09-30 10:59:26 · 184 阅读 · 0 评论 -
《数据结构、算法与应用 —— C++语言描述》学习笔记 — 竞赛树 — 应用 — 箱子装载
《数据结构、算法与应用 —— C++语言描述》学习笔记 — 竞赛树 — 应用 — 箱子装载一、问题描述二、近似算法三、赢者树和最先适配法一、问题描述在箱子装载问题中,箱子的数量不限,每个箱子的容量为 binCapacity,待装箱的物品有 n 个。物品 i 需要占用的箱子容量为 objectSize[i],0≤objectSize[i]≤binCapacityobjectSize[i],0 \le objectSize[i] \le binCapacityobjectSize[i],0≤objectSi原创 2021-09-27 13:45:39 · 328 阅读 · 0 评论 -
《数据结构、算法与应用 —— C++语言描述》学习笔记 — 竞赛树
《数据结构、算法与应用 —— C++语言描述》学习笔记 — 竞赛树一、赢者树二、二叉树的数组描述(补充)1、声明2、实现一、赢者树假定有 n 个选手参加一次网球比赛。比赛规则是“突然死亡法”:一名选手只要输掉一场球,就被淘汰。一对一对选手进行比赛,最终只剩下一个选手保持不败。我们使用二叉树来描述这个比赛过程。每个外部节点表示一名选手,每个内部节点表示一场比赛,该内部节点的孩子表示比赛的选手。同一层的内部节点代表一轮比赛,可以同时进行:如图,第一轮比赛,b 和 c 的胜者为 b, d 和 e 的胜者为原创 2021-09-25 19:38:01 · 325 阅读 · 0 评论 -
《数据结构、算法与应用 —— C++语言描述》学习笔记 — 优先级队列 — 应用 — 霍夫曼编码
《数据结构、算法与应用 —— C++语言描述》学习笔记 — 优先级队列 — 应用 — 霍夫曼编码一、原理及构造过程1、原理2、扩展二叉树与霍夫曼编码3、构造步骤二、实现1、类图2、公共常量和结构体3、基类定义4、霍夫曼树的构建5、生成映射关系6、压缩类定义7、压缩类实现8、解压缩类定义9、解压缩类实现10、FileReader 的修改11、测试代码12、总结一、原理及构造过程1、原理前面我们学习了基于 LZW 算法的文本压缩器,这种算法的依据是子串在文本中的重复出现。而霍夫曼编码是另外一种文本压缩算法原创 2021-09-22 19:19:36 · 171 阅读 · 0 评论 -
《数据结构、算法与应用 —— C++语言描述》学习笔记 — 优先级队列 — 应用
《数据结构、算法与应用 —— C++语言描述》学习笔记 — 优先级队列 — 应用一、堆排序一、堆排序堆可以用来实现 n 个元素的排序,所需时间为O(nlogn)O(nlog n)O(nlogn)。先用 n 个待排序的元素来初始化一个大根堆。然后从堆中逐个提取元素。结果,这些元素按非递增顺序排序。初始化的时间为O(n)O(n)O(n),每次删除的时间为O(logn)O(log n)O(logn),因此总时间为 O(nlogn)O(nlog n)O(nlogn)。#pragma once#include原创 2021-09-22 14:43:51 · 218 阅读 · 0 评论 -
《数据结构、算法与应用 —— C++语言描述》学习笔记 — 优先级队列 — 左高树
《数据结构、算法与应用 —— C++语言描述》学习笔记 — 优先级队列 — 左高树一、左高树1、外部节点2、高度优先左高树(1)定义(2)特性(3)HBLT 与 大小根树3、重量优先左高树一、左高树前面所学习的堆结构是一种隐式数据结构。用完全二叉树表示的堆在数组中式隐式存储的(即没有明确的指针或其他数据能够用来重塑这种结构)。由于没有存储结构信息,这种表示方法的空间利用率很高,它实际上没有浪费空间。而且它的时间效率也很高。尽管如此,它并不适合于所有优先级队列的应用,尤其是当两个优先级队列或多个长度不同的原创 2021-09-18 14:03:07 · 255 阅读 · 0 评论 -
《数据结构、算法与应用 —— C++语言描述》学习笔记 — 优先级队列 — 堆及其数组实现
《数据结构、算法与应用 —— C++语言描述》学习笔记 — 优先级队列一、定义二、抽象数据类型三、堆1、定义2、大根堆的插入3、大根堆的删除4、大根堆的初始化四、堆的实现一、定义优先级队列是0个或多个元素的集合,每个元素都有一个优先权或值,对优先级队列执行的操作有(1)查找一个元素;(2)插入一个新元素;(3)删除一个元素。与这些操作分别对应的函数是 top、push 和 pop。在最小优先级队列中,查找和删除的元素都是优先级最小的元素;在最大优先级队列中,查找和删除的元素都是优先级最大的元素。二、抽原创 2021-09-16 11:38:35 · 150 阅读 · 0 评论 -
《数据结构、算法与应用 —— C++语言描述》学习笔记 — 二叉树
《数据结构、算法与应用 —— C++语言描述》学习笔记 — 二叉树一、树二、二叉树1、二叉树的定义2、二叉树的特性三、二叉树数组描述四、二叉树接口一、树一棵树 t 是一个非空的有限元素的集合,其中一个元素为根,其余的元素组成 t 的子树。如图:每个元素代表一个节点。树根花在上面,其子树画在下面,在根与子树的根之间有一条边。同样的,每一颗子树也是根在其上,其子树在下在一棵树中,一个元素节点及其孩子节点之间用边连接。例如在上图中,ANN、Mary、John 是 Joe 的孩子,Joe 是他们的父母。有相原创 2021-09-08 15:19:58 · 181 阅读 · 0 评论 -
《数据结构、算法与应用 —— C++语言描述》学习笔记 — 字典 — 应用 — LZW压缩和解压缩
《数据结构、算法与应用 —— C++语言描述》学习笔记 — 字典 — 应用原创 2021-09-04 18:35:27 · 163 阅读 · 0 评论 -
《数据结构、算法与应用 —— C++语言描述》学习笔记 — 字典 — 散列实现
《数据结构、算法与应用 —— C++语言描述》学习笔记 — 字典 — 散列实现一、散列表1、理想散列2、散列函数和散列表(1)桶和起始桶(2)除法散列函数(3)冲突和溢出(4)一个好的散列函数(5)除法和非整型关键字3、线性查找二、线性查找散列表实现一、散列表1、理想散列字典的另一种表示方法是散列。它用一个散列函数把字典的数对映射到一个散列表的具体位置。如果数对 p 的关键字是 k,散列函数为 f,那么在理想情况下,p 在散列表中的位置为 f(k)。暂时假定散列表的每一个位置最多能够存储一个记录。为了原创 2021-08-29 15:50:27 · 248 阅读 · 0 评论 -
《数据结构、算法与应用 —— C++语言描述》学习笔记 — 字典 — 跳表实现
《数据结构、算法与应用 —— C++语言描述》学习笔记 — 字典 — 跳表实现一、跳表1、理想情况2、插入和删除3、级的分配二、跳表实现1、节点定义2、声明3、拷贝控制4、拷贝控制内部接口5、容量接口6、查找接口7、查找内部接口8、删除接口9、删除内部接口10、插入接口11、插入内部接口一、跳表1、理想情况在一个用有序链表描述的 n 个数对的字典中进行查找,至多需要 n 此关键字比较。如果在链表的中部节点加一个指针,则比较次数可以减少到 n2+1\frac{n}{2} + 12n+1。这是,为了查找原创 2021-08-27 21:48:19 · 181 阅读 · 1 评论 -
《数据结构、算法与应用 —— C++语言描述》学习笔记 — 字典 — 链表实现
《数据结构、算法与应用 —— C++语言描述》学习笔记 — 跳表和散列一、字典二、抽象数据类型三、链表描述1、节点2、接口声明3、拷贝控制接口4、容量接口5、修改接口虽然在n个元素的有序数组上二分查找所需要的时间为 O(logn)O(logn)O(logn),但是有序链表上查找所需要的时间为 O(n)O(n)O(n)。为了提高有序链表的查找性能,可以在全部或部分节点上增加额外的指针。在查找时,通过这些指针,可以跳过链表的若干个节点,不必从左到右连续查看所有节点。增加了额外的向前指针的链表叫做跳表。它采用原创 2021-08-27 21:31:53 · 1182 阅读 · 3 评论 -
《数据结构、算法与应用 —— C++语言描述》学习笔记 — 队列 —— 应用 —— 工厂仿真(二)
《数据结构、算法与应用 —— C++语言描述》学习笔记 — 队列 —— 应用 —— 工厂仿真(二)一、数据统计与展示1、声明2、实现二、测试代码1、实现2、测试文件3、输出三、总结一、数据统计与展示1、声明/*************************************************Author: coding-hwzDate:2021-08-23Description: 数据统计类,用于数据统计和展示***********************************原创 2021-08-23 22:04:09 · 230 阅读 · 0 评论 -
《数据结构、算法与应用 —— C++语言描述》学习笔记 — 队列 —— 应用 —— 工厂仿真(一)
《数据结构、算法与应用 —— C++语言描述》学习笔记 — 队列 —— 应用 —— 工厂仿真一、问题二级目录三级目录一、问题二级目录三级目录原创 2021-08-23 21:41:56 · 293 阅读 · 0 评论 -
《数据结构、算法与应用 —— C++语言描述》学习笔记 — 队列 —— 应用(一)
《数据结构、算法与应用 —— C++语言描述》学习笔记 — 队列 —— 应用(一)一、列车车厢重排1、求解策略2、实现二、电路布线1、求解策略2、抽象类Path3、实现4、界面逻辑修改一、列车车厢重排在学习栈时,我们考察过这个问题。这次,我们稍微修改下我们的需求。所有的缓冲轨道不再是后进先出,而是先进先出:1、求解策略首先我们需要重新明确题目要求和有解条件。仿照我们前面的表述:在重排车厢的过程中,仅允许以下移动:(1)车厢可以从入轨道的前端移动到一个缓冲轨道的顶部或出轨道的后端。(2)车厢可原创 2021-08-19 12:51:24 · 240 阅读 · 0 评论 -
《数据结构、算法与应用 —— C++语言描述》学习笔记 — 队列
《数据结构、算法与应用 —— C++语言描述》学习笔记 — 队列一、抽象数据类型二、数组描述1、描述队列是一个线性表,其插入和删除操作分别在表的不同端进行。插入元素的那一端称为队尾,删除元素的那一端称为队首。C++标准库中直接实现的类为双端队列,队列类为其适配器类。一、抽象数据类型队列的抽象类型如下:#pragma oncetemplate <typename T>class queue{public: virtual ~queue() {}; virtual bool em原创 2021-08-18 12:42:22 · 217 阅读 · 0 评论 -
《数据结构、算法与应用 —— C++语言描述》学习笔记 — 栈 —— 应用 —— 迷宫老鼠
《数据结构、算法与应用 —— C++语言描述》学习笔记 — 栈 —— 应用 —— 迷宫老鼠一、问题描述二、设计1、类图三级目录一、问题描述迷宫是一个矩形区域,有一个入口和一个出口。迷宫内部包含不能穿越的墙壁或障碍物。这些障碍物沿着行和列防止,与迷宫的边界平行。迷宫的如果在左上角,出口在右下角。我们可以使用一个 bool 矩阵来描述这个迷宫。当矩阵中某个位置有障碍时,其值为 ture,否则为 false。迷宫老鼠问题是要寻找一条从入口到出口的路径。路径是一个由位置组成的序列。每一个位置都没有障碍,而且原创 2021-08-15 20:05:06 · 414 阅读 · 5 评论 -
《数据结构、算法与应用 —— C++语言描述》学习笔记 — 栈 —— 应用(一)
《数据结构、算法与应用 —— C++语言描述》学习笔记 — 栈 —— 应用一、括号匹配二级目录三级目录一、括号匹配括号匹配是一个典型的用栈这种数据结构解决的问题。其基本原理是每一个右括号都应该与前面最后一个出现的左括号匹配。因此,我们只要以栈结构保存所有出现的左括号,然后每当遇到一个右括号就把栈顶的左括号取出,即可知道有哪些左括号或右括号没有匹配。LeetCode有一道题为此类问题的变形:这个问题本身并不复杂。我们只要抓住什么样的括号子串是有效的:可能是两个或多个匹配的括号对续接为一个合理的括号子原创 2021-08-14 17:03:16 · 338 阅读 · 1 评论 -
《数据结构、算法与应用 —— C++语言描述》学习笔记 — 栈
《数据结构、算法与应用 —— C++语言描述》学习笔记 — 栈一、抽象数据类型二、数组描述三级目录栈是一种特殊的线性表,其插入(也称为入栈或压栈)和删除(也成为出栈或弹栈)操作都在表的同一端进行。这一段称为栈顶,另一段成为栈底。我们可以使用前面实现过的基于数组和链表的线性表实现栈结构。通过类的派生,程序设计的难度大大降低了,但是代码执行的效率也明显降低了。因为栈是一个很基本的数据结构,许多程序都使用它,因此我们可以直接创建基于数组和链表的栈类。一、抽象数据类型栈的抽象类型如下:template<原创 2021-08-08 13:01:29 · 253 阅读 · 0 评论 -
《数据结构、算法与应用 —— C++语言描述》学习笔记 — 稀疏矩阵 — 多线性表
《数据结构、算法与应用 —— C++语言描述》学习笔记 — 稀疏矩阵 — 多线性表一、描述方式二、链表结构改进1、节点修改2、链表扩展3、扩展链表修改(1)内置元素插入(2)对外插入接口(3)拷贝、赋值三、稀疏矩阵实现1、接口2、输入输出3、矩阵转置4、矩阵相加四、测试代码这次我们使用多级链表(extendedChain)描述稀疏矩阵。一、描述方式我们使用一个二级的链表描述稀疏矩阵。第一级链表用于描述包含非0元素的行;第二级链表用于描述每行元素中非0元素的列和值:template<class原创 2021-08-07 12:36:58 · 299 阅读 · 0 评论 -
《数据结构、算法与应用 —— C++语言描述》学习笔记 — 稀疏矩阵 — 单线性表
《数据结构、算法与应用 —— C++语言描述》学习笔记 — 稀疏矩阵一、基本概念一、基本概念一个m*n的矩阵,如果大多数元素都是0,则成为稀疏矩阵;反之则称为稠密矩阵。在稀疏矩阵和稠密矩阵之间没有明确的界限。n*n的对角矩阵和三对角矩阵是稀疏矩阵。它们的非0元素是 O(n)O(n)O(n),0元素时O(n)O(n)O(n)...原创 2021-08-01 17:14:18 · 462 阅读 · 0 评论 -
《数据结构、算法与应用 —— C++语言描述》学习笔记 — 矩阵
《数据结构、算法与应用 —— C++语言描述》学习笔记 — 数组和矩阵一、类matrix1、声明二级目录三级目录一、类matrix我们这里使用一位数组存储矩阵。1、声明二级目录三级目录原创 2021-07-31 13:22:44 · 156 阅读 · 0 评论 -
《数据结构、算法与应用 —— C++语言描述》学习笔记 — 线性表 —— 链式描述 —— 应用
这里写目录标题一、箱子排序1、二级目录三级目录一、箱子排序考虑用一个链表保存一个班级学生的清单。我们简化节点的数据为:学生姓名和学生成绩。考虑到成绩范围是有限值,如果我们采用冒泡排序等方式,其时间复杂度都为O(n2n^{2}n2) 。这里我们使用桶排序可以得到对大量数据的更快速排序。桶排序的基本思想是选举与数据范围一致的个数的桶,然后将数据分别放在桶中,最后从桶中将数据重新放回容器中。使用链表实现的桶排序,其过程如下:1、逐步删除输入链表的节点,把删除的节点分配到相应的箱子里。2、把每一个箱子中的原创 2021-07-29 12:28:19 · 155 阅读 · 0 评论 -
《数据结构、算法与应用 —— C++语言描述》学习笔记 — 线性表 —— 链式描述
《数据结构、算法与应用 —— C++语言描述》学习笔记 — 线性表 —— 链式描述一、链表的节点二级目录三级目录一、链表的节点链表中存储数据的节点至少包含链域(指向相邻节点)和数据域(包含数据本身),其结构定义为:二级目录三级目录...原创 2021-07-19 15:29:55 · 211 阅读 · 0 评论 -
《数据结构、算法与应用 —— C++语言描述》学习笔记 — 线性表 — 数组描述
《数据结构、算法与应用 —— C++语言描述》学习笔记 — 线性表一、线性表接口规范二、线性表数组描述1、构造函数三级目录一、线性表接口规范线性表一般需要实现以下接口:template<class T>class linearList{public: virtual ~linearList() {}; virtual bool empty() = 0; virtual int size() const = 0; virtual T& get(int index) co原创 2021-07-06 13:15:08 · 183 阅读 · 0 评论