数据结构与算法
比卡丘不皮
一个热爱学习与热爱分享的有志青年
展开
-
数据结构与算法 c++描述 目录与源码
时间过的很快,数据结构部分写到了一定的文章了,后面的部分我会慢慢更新,这里记录了当前一个小节点。本人使用的是vs2015,对应的书是《数据结构与算法 c++描述 第三版》本人把自己写的代码,都写在了一个工程里面,方便记录与查找如下图:代码上传到git 仓库:码云仓库没有码云的小伙伴我上传到了我的百度云盘:链接:云盘连接提取码:36al有了代码可以看对应的博客链接:数据结构c++描述(一)---线性表数组表达https://blog.csdn.net/weixin_421...原创 2020-08-03 17:20:09 · 2409 阅读 · 0 评论 -
数据结构之排序4---(中位数和顺序统计学,希尔排序)
中位数和顺序统计学中位数和顺序统计学 0、在一个由n个元素组成的集合中,第i个顺序统计量是该集合中第i小的元素 1、中位数是它所在集合的“中点元素”;当n为奇数时,中位数是唯一的,出现在i=(n+1)/2处;当n为偶数时,存在两个中位数,分别出现在i=n/2处和i=n/2+1处 2、找出集合中的最大和最小元素需要比较多少次? 找出集合中的最大元素的比较上界是n-1次,最小元素也是一样 3、如果要找出最大和最小元素,看起来需要2n-2次;事实上至多3(n/2)次比较就足以同时找到最大和最小元素:原创 2020-09-08 14:30:55 · 562 阅读 · 0 评论 -
数据结构之排序3 ---(计数排序,基数排序,桶排序)
计数排序:计数排序是通过外设一个数组,以所排列的元素的值做为数组的下标来记录所有等于该值的元素的个数,最后根据需求正反输出 特别适用于元素值之间跨度不大的数组的排序(如果元素值之间跨度不大、但元素值特别大的情况可以通过所有元素减去某统一值的方法来削减空间开销) 时间复杂度:O(n) 空间复杂度:O(x) //x为元素中最大的数void CountingSort(int ary[], int size, int max) //算法导论上的{ int *temp = new in...原创 2020-09-04 15:46:55 · 215 阅读 · 0 评论 -
数据结构之排序2 ---(归并排序,堆排序,快速排序)
数据结构之排序目录归并排序:堆排序:快速排序:归并排序:归并排序采用分治法,将元素递归分成若干组,排好序后再逐级合并(Merge过程最坏情况下的比较次数为2n-1) 归并排序最好、最坏、平均复杂度都一样,比较占用空间,但却是稳定高效的排序算法,仅次于QuickSort 时间复杂度:O(nlgn) 空间复杂度:O(n) stable:是void merge(int *array, int first, int center, int end){ int n1 = c..原创 2020-09-03 13:17:36 · 834 阅读 · 0 评论 -
漫画B-tree 与B+tree
这一次我们来介绍 B+ 树。一个m阶的B树具有如下几个特征:1.根结点至少有两个子女。2.每个中间节点都包含k-1个元素和k个孩子,其中 m/2 <= k <= m3.每一个叶子节点都包含k-1个元素,其中 m/2 <= k <= m4.所有的叶子结点都位于同一层。5.每个节点中的元素从小到大排列,节点当中k-1个元素正好是k个孩子包含的元素的值域分划。一个m阶的B+树具有如下几个特征:1.有k个子树的中间节点包含有k个元素(B树中转载 2020-09-02 16:14:44 · 181 阅读 · 0 评论 -
c++ 版本 排序目录与代码
为了方便,这里生成了一个项目工程,记录排序的代码,同时更新到码云上,大家需要的话,可以关注与下载下来。建立的工程图:码云的连接:排序例子的连接文章目录数据结构之排序1 ---(冒泡,选择,插入)https://blog.csdn.net/weixin_42126427/article/details/108357934未完待续。。。。...原创 2020-09-02 14:12:58 · 262 阅读 · 0 评论 -
数据结构之排序1 ---(冒泡,选择,插入)
本文章,开始记录些排序,也就是常用的排序。冒泡排序:用循环使数组元素按顺序两两比较,通过数值互换将比较大的逐渐向下沉 如果共有n个数,那么将进行n-1趟比较;而第j趟比较将进行n-j次两两比较; 时间复杂度:O(n*n) 空间复杂度:O(1)void BubbleSort(int ary[], int size){ for (int i = 0; i < size - 1; ++i) //共进行size-1趟比较 { for (int j = 0; j <.原创 2020-09-02 11:01:29 · 194 阅读 · 0 评论 -
(1小时数据结构)数据结构c++描述(三十)--- 图(Dijkstra算法 与 Floyd算法 )
单源最短路径问题是:给定带权的有向图,对于给定的源点v0,求从v0到其余所有顶点的最短路径。 所有顶点之间的最短路径问题:给定带权的有向图,求出所有的定点的最短路径如果解决的问题:Dijkstra算法:Dijkstra算法就是解决单源最短路径问题:步骤:产生从源点v0到它自身的路径,其长度为0,将源点v0加入最短路径S中。这些通过以下代码就可以实现: mark[v0] = true; path[v0] = -1; curShortLen[v0] ...原创 2020-08-17 11:04:05 · 206 阅读 · 0 评论 -
(1小时数据结构)数据结构c++描述(二十九)--- 图(最小生成树)
最小代价生成树: 一个无向连通图的生成树是一个极小连通子图,它包括图中全部顶点,并且有尽可能少的边。遍历一个连通图得到图的一棵生成树。图的生成树不是唯一的,采用不同的遍历方法,从不同的顶点出发可能得到不同的生成树。 一棵生成树的代价是各条边上的代价之和。一个网络的各生成树中,具有最小代价的生成树称为该网络的最小代价生成树。约定来简化定义: 必须是一个无向的连通图,生成的最小生成树的结果是不一样的。著名的求最小代价生成树有2种方法:Prim算法...原创 2020-08-17 10:16:19 · 500 阅读 · 0 评论 -
(1小时数据结构)数据结构c++描述(二十八)--- 图(强连通分量)
强连通分量定义: 如果两个顶点v和w是互相可达的,则称它们为强连通的。也就是说,既存在一条从v到w的有向路径,也存在一条从w到v的有向路径。如果一幅有向图中的任意两个顶点都是强连通的,则称这幅有向图也是强连通的。上面的有向图中,就是一个联通分量。应为也是一个图,所以也是连通图。此图,所有用灰色标记的就是对应的连通分量,{1},{0,2,3,4,5},{6},{7,8},{9,10,11,12}.在有向图中,强连通性其实是顶点之间的一种等价关系,因为它有以下性质...原创 2020-08-13 13:49:26 · 915 阅读 · 0 评论 -
(1小时数据结构)数据结构c++描述(二十七)--- 图(拓扑排序)
AOV图定义: 在一个表示工程的有向图中,用顶点表示活动,用弧表示活动之间的优先关系,这样的有向图为顶点表示活动的网,我们称为AOV网。(Activity On Vertex)如下图:必须有个先后的顺序,C0 在 C2的前面。拓扑排序: 设G=(V,E)是一个具有n个顶点的有向图,V中的顶点序列v1,v2,...,vn,满足若从顶点vi到vj有一条路径,则在顶点序列中顶点vi必在vj之前,则我们称这样的顶点序列为一个拓扑序列。由定义我们采用了两种方式来解决这个问...原创 2020-08-11 17:03:24 · 543 阅读 · 0 评论 -
(1小时数据结构)数据结构c++描述(二十六)--- 图(判断图是否有环)
有关图的定义,与代码程序的定义在上个章节中:传送们,图的定义与遍历依旧是这个图,我们可以看到图是有环的。那代码中我们如何去判断是否有环呢?图的环跟点链表是不同的,不能采用“时钟法” 来判断.那我们用什么办法呢,其实很简单,原理就是DFS遍历思想,在遍历的时候记录,每个节点是false,遍历到了该成true ,当下个节点是true就说明了是环。有关DFS遍历是上一章的知识点,不知道的同学们请看前一章。如:1 - 2 -5 - 8 -3 - 5 发现有重复的环。...原创 2020-08-11 09:34:49 · 971 阅读 · 0 评论 -
(1小时数据结构)数据结构c++描述(二十五) --- 图(BFS遍历 与 DFS遍历)
图的基本概念:简单地说,图(graph)是一个用线或边连接在一起的顶点或节点的集合。如下图:其中a 是无向图,c是有向图。完全图:权和网的含义 在某些实际场景中,图中的每条边(或弧)会赋予一个实数来表示一定的含义,这种与边(或弧)相匹配的实数被称为"权",而带权的图通常称为网。如图 3 所示,就是一个网结构:子图:指的是由图中一部分顶点和边构成的图,称为原图的子图。图的常见存储结构: 无向图和有向图最常用的描述方法都是基于邻接的方式:邻接...原创 2020-08-07 14:55:22 · 525 阅读 · 0 评论 -
(1小时数据结构)数据结构c++描述(二十四)--- 红黑树
本章的红黑树,在《数据结构与算法c++描述》 中只是提了相关知识点,但是没有细讲相关内容,本人结合此书,与其他参考书籍与网上相关博客,记录一下红黑树的数据结构,与其对应的代码:红黑树定义:红黑树是一种二叉搜索树,并且相对于二叉搜索树做了一定的改进。书的节点包括5个属性:key 、color、p、left、right。红黑树具有下列五种性质:根节点黑色。 每个节点为红色/黑色。 每个叶节点(NIL)是黑的。 红色节点下两个节点必为黑色。 从任一节点到其叶子节点的所有...原创 2020-07-31 18:07:52 · 490 阅读 · 1 评论 -
(1小时数据结构)数据结构c++描述(二十三) --- AVL树(均衡二叉树)
AVL树基本概念 当确定搜索树的高度总是 O ( logn)时,能够保证每个搜索树操作所占用的时间为 O ( logn)。高度为O ( logn)的树称为平衡树(balanced tree)。 1962年, Adelson - Velskii 和Landis 提出了一种现在非常流行的平衡树——AVL树(AVL tree)。 通俗的讲解:空二叉树是AV L树;如果T是一棵非空的二叉树, TL 和TR 分别是其左子树和右子树,那么当T满足以下条件时, T是一棵AV L树: 1) T...原创 2020-07-28 14:26:05 · 297 阅读 · 0 评论 -
(1小时数据结构)数据结构c++描述(二十二) --- 二叉搜索树
二叉搜索树定义:二叉搜索树(binary search tree)是一棵可能为空的二叉树,一棵非空的二叉搜索树满足以下特征:每个元素有一个关键值,并且没有任意两个元素有相同的关键值;因此,所有的关键值都是唯一的。 根节点左子树的关键值(如果有的话)小于根节点的关键值。 根节点右子树的关键值(如果有的话)大于根节点的关键值。 根节点的左右子树也都是二叉搜索树。如图:其中a 不是二叉搜索树, b, c 都是。BSTree类定义:由于BSTree 是从BinaryTree 派...原创 2020-07-23 16:01:04 · 202 阅读 · 1 评论 -
(1小时数据结构)数据结构c++描述(二十一) --- 竞赛树及其装箱应用
赢者树概念: 对于n 名选手,赢者树是一棵含n 个外部节点, n-1个内部节点的完全二叉树,其中每个内部节点记录了相应赛局的赢家。图型解析: 为决定一场比赛的赢家,假设每个选手有一得分且赢者取决于对两选手得分的比较。在最小赢者树(min winner tree)中,得分小的选手获胜;同理,在最大赢者树(max winner tree)中,得分大的选手获胜。有时,也可用左孩子对应的选手代表赢家节点。图 10-2a 给出含8名选手的最小赢者树,而图10-2b 给出含5名选手的最...原创 2020-07-22 18:11:49 · 458 阅读 · 3 评论 -
(1小时数据结构)数据结构c++描述(二十)--- 堆应用(堆排序)
堆排序算法到这里就很好理解了,首先先了解最大堆的定义,这里堆排序使用了它。传送们:最大堆的实现 利用堆来实现 n 个元素的排序,所需时间为 O( nlogn)。可先将要排序的n 个元素初始化为一个最大堆,然后每次从堆中提取(即删除)元素。各元素将按递减次序排列。初始化所需要的时间为 (n),每次删除所需要的时间为O ( logn) ,因此总时间为O (nl ogn);图形过程:对应代码:/*数组结构中 堆应用,堆排序对应书中代码:数据结构算法与应用c++描述...原创 2020-07-22 10:03:54 · 163 阅读 · 0 评论 -
(1小时数据结构)数据结构c++描述(十九) --- 最大左高树
定义 [最大H B LT ] 即同时又是最大树的HBLT; [最小HBLT ] 即同时又是最小树的HBLT。 有关最大树的定义在上一章节有解析:传送门 堆树的定义最大左高树合并:(重要知识点)上图是,合并的过程:a b c 是一组,当没有左子树的时候,要把右边的树给变到左边。 d e 是一组,当节点小于root节点,先放到右边,这个时候左边有节点,不变。 f g h 是一组, i j k 是一组,上面的过程就是合并的过程代码部分...原创 2020-07-21 17:57:34 · 496 阅读 · 0 评论 -
(1小时数据结构)数据结构c++描述(十八)---堆与最大堆(优先队列)
首先来了解一些概念:最大树(最小树): 每个节点的值都大于(小于) 或等于其子节点(如果有的话)值的树。如下图:虽然这些树都是二叉树,但最大树不必是二叉树,最大树或最小树节点的子节点个数可以大于 2。最大堆(最小堆):最大(最小)的完全二叉树。 图9-1b所示的最大树并不是最大堆(max heap),另外两个最大树是最大堆。图 9-2b 所示的最小树不是最小堆(min heap),而另外两个是。代码部分/*数组结构中 最大堆 完全二叉树对应...原创 2020-07-21 14:10:07 · 248 阅读 · 0 评论 -
(1小时数据结构)数据结构c++描述(十七) --- 树与二叉树
树(tree) t 是一个非空的有限元素的集合,其中一个元素为根(root),余下的元素(如果有的话)组成t 的子树(subtree)。如下图:二叉树(binary tree) t 是有限个元素的集合(可以为空)。当二叉树非空时,其中有一个称为根的元素,余下的元素(如果有的话)被组成 2个二叉树,分别称为t的左子树和右子树。二叉树图:树与二叉树的区别:二叉树可以为空,但树不能为空。 二叉树中每个元素都恰好有两棵子树(其中一个或两个可能为...原创 2020-07-20 15:40:31 · 382 阅读 · 0 评论 -
(1小时数据结构)数据结构c++描述(十六)-- -散列表(hash)
理想散列 字典的另一种描述方法就是散列(hash),它是用一个散列函数(hash function)把关键字映射到散列表(hash table)中的特定位置。方法 当关键字的范围太大,不能用理想方法表示时,可以采用比关键字范围小的散列表以及把多个关键字映射到同一位置的散列函数。虽然有多种函数映射方法,但最常用的还是除法映射。除法散列函数的形式如下: 其中k 为关键字, D是散列表的大小(即位置数), %为求模操作符。散列表中的位置号从0到D-1,每一个位置称...原创 2020-07-20 10:14:46 · 185 阅读 · 0 评论 -
(1小时数据结构)数据结构c++描述(十五) 跳表
跳表: 在一个使用有序链表描述的具有 n 个元素的字典中进行搜索,至多需进行 n 次比较。如果在链中部节点加一个指针,则比较次数可以减少到 n/ 2 + 1。搜索时,首先将欲搜索元素与中间元素进行比较。如果欲搜索的元素较小,则仅需搜索链表的左半部分,否则,只要在链表右半部分进行比较即可。如图: 该链表有一个头节点和一个尾节点。节点中的数是该节点的值。对该链表的搜索可能要进行七次比较。当有多链表的时候,就可以减少查找的时间。有点像数组的二分查找,这里只是...原创 2020-07-17 17:16:28 · 214 阅读 · 0 评论 -
(1小时数据结构)数据结构c++描述(十四) --- 字典
字典: 字典(dictionary)是一些元素的集合。每个元素有一个称作 key 的域,不同元素的key 各不相同。有关字典的操作有:插入具有给定关键字值的元素。 在字典中寻找具有给定关键字值的元素。 删除具有给定关键字值的元素。 字典节点类的声明E : 元素类型 K: 键值/*数组结构中 字典对应书中代码:数据结构算法与应用c++描述程序编写:比卡丘不皮编写时间:2020年7月17日 10:15:16*/#pragma once#inclu...原创 2020-07-17 13:34:40 · 619 阅读 · 0 评论 -
(1小时数据结构)数据结构c++描述(十三)--- 队列应用(电路布线/ 迷宫最短路径)代码详细解析
首先有关队列的定义在上节中已经定义:链表描述本章的应用使用的是队列的链表描述,若大家不想使用自己定义的,可以将代码使用STL中的queue来代替。电路布线/迷宫最短路径 如图,我们想从a到b,要如何到达b呢,产生一个最短路径就是今天教大家的这个用法,方法采用了:深度优先探索法,与回溯法。 听着方法很高端,其实很简单的.我们在初始位置的上,下,左,右,分别加1,遇到黑色的障碍不加,有数的不加,然后从下个位置开使重复的动作,知道遇到终点,就是最短路径了,这就是深度...原创 2020-07-16 17:25:21 · 515 阅读 · 0 评论 -
(1小时数据结构)数据结构c++描述(十二) --- 队列(数组与链表表示)
队列概念 像堆栈一样,队列也是一种特殊的线性表。队列的插入和删除操作分别在线性表的两端进行,因此,队列是一个先进先出(first-in-first-out, FIFO)的线性表。 队列(quene)是一个线性表,其插入和删除操作分别在表的不同端进行。添加新元素的那一端被称为队尾( rear ),而删除元素的那一端被成为队首 ( front )。图像解析 :书中给了三种公式描述:公式一:对应的图:公式二:对应图:公式三:...原创 2020-07-16 11:56:56 · 358 阅读 · 0 评论 -
(1小时数据结构)数据结构c++描述(十一)--- 堆栈应用 (火车车厢重排)
本章使用的是堆栈的链表来解决问题的,传送门:堆栈表示火车车厢重排如同图中一样通过,这三个缓冲铁轨,来让火车车厢来排出来顺序。每个缓冲都是一个堆栈。中间状态,这样就可以把数放入。满足:• 车厢可以从入轨的前部(即右端)移动到一个缓冲铁轨的顶部或出轨的左端。• 车厢可以从一个缓冲铁轨的顶部移动到出轨的左端。也会存在铁轨不足,跳出false;代码:先写上两个函数的声明:/*数组结构中的 堆栈 火车车厢重拍对应书中代码:数据结构算法与应用c++描述...原创 2020-07-15 15:50:59 · 951 阅读 · 0 评论 -
(1小时数据结构)数据结构c++描述(十)--- 堆栈应用 (括号匹配与汉罗塔)
有关堆栈的c++描述在上一章有详细代码:c++描述堆栈本章开始堆栈常见的应用,书中是比较简单的是括号匹配,与汉罗塔。其他的应用会在下章中写出来。括号匹配:问题描述: 在这个问题中将要匹配一个字符串中的左、右括号。例如,字符串 ( a * ( b + c ) + d )在位置1和4有左括号,在位置 8和11有右括号。位置1的左括号匹配位置 11的右括号,位置 4的左括号匹配位置8的右括号。对于字符串 ( a + b ) ) (,位置6的右括号没有可匹配的左括号,位置 7的左括号没...原创 2020-07-14 17:31:29 · 342 阅读 · 0 评论 -
(1小时数据结构)数据结构c++描述(九)--- 堆栈
堆栈定义: 堆栈数据结构是通过对线性表的插入和删除操作进行限制而得到的(插入和删除操作都必须在表的同一端完成),因此,堆栈是一个后进先出(last-in-first-out, LIFO)的数据结构。图像表示:下面来看c++公式化描述 类定义:/*数组结构中的 堆栈对应书中代码:数据结构算法与应用c++描述程序编写:比卡丘不皮编写时间:2020年7月9日 11:03:12*/#pragma once#include <i...原创 2020-07-14 11:53:52 · 334 阅读 · 0 评论 -
(1小时数据结构)数据结构c++描述(八) --- 稀疏矩阵 (链表)
链表描述 上一章,中我们使用了数组的形式来表达了稀疏矩阵的使用的方法: 传送门:数据结构c++ 稀疏矩阵 数组表示这一章我们开始链表描述: 用一维数组来描述稀疏矩阵所存在的缺点是:当我们创建这个一维数组时,必须知道稀疏矩阵中的非 0元素总数。虽然在输入矩阵时这个数是已知的,但随着矩阵加法、减法和乘法操作的执行,非0元素的数目会发生变化,因此如果不实际计算,很难精确地知道非0元素的数目。正因为如此,只好先估计出每个矩阵中的非 0元素数目...原创 2020-07-13 13:19:51 · 1027 阅读 · 1 评论 -
(1小时数据结构)数据结构c++描述(七) --- 稀疏矩阵 (数组)
基本概念: 如果一个m×n 矩阵中有“许多”元素为0,则称该矩阵为稀疏矩阵(sparse)。不是稀疏的矩阵被称为稠密矩阵(dense)。在稀疏矩阵和稠密矩阵之间并没有一个精确的界限。 n×n 的对角矩阵和三对角矩阵都是稀疏矩阵,二者都有 O (n)个非0元素和O (n2)个0元素。一个n×n 的三角矩阵是稀疏矩阵吗?它至少有 n(n- 1 ) / 2个0元素,最多有n(n+ 1 ) / 2个非0元素。在本节中我们规定若一个矩阵是稀疏矩阵,则其非 0元素的数目应小于n2 / 3,在有些情况下应小...原创 2020-07-11 13:42:04 · 1095 阅读 · 1 评论 -
(1小时数据结构)数据结构c++描述(六) --- 矩阵
矩阵Matrix 类定义:/*数组结构中的 矩阵,对角,三角矩阵 对应书中代码:数据结构算法与应用c++描述程序编写:比卡丘不皮编写时间:2020年7月9日 17:53:30*/#pragma once#include <iostream>#include "all_error.h"using namespace std;template<class T>class Matrix{public: Matrix(int r = 0, int原创 2020-07-09 17:59:38 · 377 阅读 · 1 评论 -
(1小时数据结构)数据结构c++描述(五) --- 数组
本篇简单记录一维数组,比较简单,大家看看就可以了实现基本数组的对比的+ - *等功能:下面我们来看看吧:/*数组结构中的数组对应书中代码:数据结构算法与应用c++描述程序编写:比卡丘不皮编写时间:2020年7月9日 11:03:12*/#pragma once#include <iostream>#include "all_error.h"using namespace std;template<class T>class Array1D原创 2020-07-09 11:12:50 · 208 阅读 · 0 评论 -
(1小时数据结构)数据结构c++描述(四)--- 应用 箱子排序(桶排序)
箱子排序 箱子排序也叫桶排序,本例子是根据 数据结构与算法 c++描述中的应用箱子排序,基于书本对代码进行改编,使用的模板类封装了不单单可以使用类型int 节点,也可以使用 float ,double这样的类型,其他类型还需大家封装吧,毕竟时间有限。源图解析: 给出了一个箱子排序的例子,图中的链表含有 1 0个节点。该图仅列出了每个节点的姓名域和分数域。第一个域为姓名,第二个域为分数。为简便起见,假定每个姓名为一个字符,分数则介于 0到5之间。需...原创 2020-07-08 10:12:51 · 588 阅读 · 0 评论 -
(1小时数据结构)数据结构c++描述(三)--- 线性表间接寻址
线性表间接寻址目录类定义:构造函数与析构函数 :查找Find(int k, T & x):寻找 Search(const T & x):插入 Insert(int k, const T & x):输出函数:测试函数:测试结果:声明代码来看下间接寻址的基本概念吧: 间接寻址(indirect addressing)是公式化描述和链表描述的组合。采用这种描述方法,可以保留公式化描述方法的许多优点——可以根据索引在 ( 1 ...原创 2020-07-06 11:38:06 · 971 阅读 · 2 评论 -
数据结构与算法单链表python描述
今天刚用c++写完数据结构单链表描述,然后无聊的情况下,编写了python版本,当然里面很多功能我没有完全实现,只是写了些简单的单链表那让我们看看吧. 链表结构c++版本 基础理论这里就不讲解了,让我们上代码吧:#定义了节点class Node(): __slots__ = ['_item','_next'] def __init__(self,item): self._item = item self....原创 2020-07-03 17:32:47 · 184 阅读 · 0 评论 -
(1小时数据结构)数据结构c++描述(二)---线性表单链表
本例子是《数据结构与算法c++描述》中的线性表中单向链表(singly linked list)单链表原理图: first 为头节点 ,由于第一个节点 e1 的指针指向第二个节点 e2, e2 的指针指向e3 ,. . .,最后一个节点链接域为 N U L L (或0 ),故这种结构也被称作链(chain)。单链表定义:/*数组结构中的线性表链表样式对应书中代码:数据结构算法与应用c++描述程序编写:比卡丘不皮编写时间:2020年6月30日 17:...原创 2020-07-03 11:17:34 · 714 阅读 · 1 评论 -
(1小时数据结构)数据结构c++版本(一)--- 线性表数组表达
本例子是《数据结构与算法c++描述》中的线性表中抽象数据类型 (abstract data type, ADT):目录基本概念:构造函数与析构函数:是否为空:Find函数:查找函数:删除数据:插入函数:输出函数与重构 << 符号输出:题目部分函数:changeSize函数:Reverse函数:复制构造函数:操作函数:线性交叉函数:Merge函数:Split函数:测试程序:基本概念:先看基本类型吧: ..原创 2020-06-29 10:59:54 · 1215 阅读 · 0 评论 -
算法导论中最大子序列4种解法
算法导论看到了第4章的分治策略,里面讲述到了最大子序列的分治求法,下面我用代码实现出来吧:同时后面的习题,这个博客轻松解答:分治法我们先看书中给的伪代码与思想:当最大的跨越中间的一点,分别找左右的值最大值,然后在加起来。当不是跨越的时候使用左右各自使用分治。代码如下://分治法class Solution{public: int maxSubArray(vector<int> &nums) { //类似寻找最大最小值的题目,初始值一定原创 2020-06-02 17:48:47 · 338 阅读 · 0 评论 -
数据结构之动态规划
动态规划一些题目,简单有趣,个人感觉是为了减少不必要的重复问题,提供了一个思路: 如上图一样,使用了常用方法递归法,得到了非常慢的程序,其复杂度到2^n从下图的分治图可以看出来这里出现大量的重复的部分,于是采取了后面部分,使得每次都只出现一次,这样便可以快速的计算了于是代码就出来了:#include <iostream>using ...原创 2020-04-18 10:36:07 · 302 阅读 · 0 评论