![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
薛定谔式炼丹
这个作者很懒,什么都没留下…
展开
-
C++ 刷题 必备STL函数
【代码】C++ 刷题 必备STL函数。原创 2024-06-28 00:25:59 · 424 阅读 · 0 评论 -
ACM模式刷题常用
刷题时整理的常用函数原创 2024-06-28 00:23:57 · 212 阅读 · 0 评论 -
最短路径djikstra算法
算法好难,费了九牛二虎之力,一点点照着敲了下来,方便理解。#include<iostream>using namespace std;#include<queue>typedef int vertextype; //顶点类型typedef int edgetype; //边上的权值类型#define max 100 //最大顶点数#define INF 65535 //65535代表正无穷class mgraph{public: vertextype原创 2020-05-10 00:13:47 · 310 阅读 · 1 评论 -
图——邻接矩阵的DFS,BFS
邻接矩阵由于是二维数组,DFS,BFS时间复杂度O(n2)。 深度优先适合目标比较明确,以找到目标为主要目的的情况。 广度优先搜索更适合在不断扩大遍历范围时找到相对最优解情况。一、BFS的介绍BFS(广度优先搜索,也可称宽度优先搜索)是连通图的一种遍历策略。使用队列保存未被检测的结点。结点按照宽度优先的次序被访问和进出队列。广度优先搜索(BFS)类似于二叉树的层序遍历算法,是一种分层...原创 2020-05-06 22:15:00 · 1377 阅读 · 0 评论 -
最短路径 Floyd算法
核心算法: 复杂度O(n3)#include<iostream>using namespace std;#define max 100#define INF 65535class mgraph {public: int vex[max]; //顶点表 int arc[max][max]; //边的权值,邻接矩阵 int numvexes; //顶点数 int numedges; //边数};void creat(mgraph &G) //构建图{原创 2020-05-10 16:02:18 · 177 阅读 · 0 评论 -
归并排序
归并排序的思想:将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是有序的。然后再把有序子序列合并为整体有序序列。归并排序是建立在归并操作上的一种有效排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。时间复杂度:O(nlogn)空间复杂度:O(n)稳定性:稳定#include<iostream>using namespace std;//将有序的arr[s..m]和arr[m+1..n]归并成有序的T原创 2020-05-22 17:29:12 · 125 阅读 · 0 评论 -
堆排序
学到了堆排序,并将重要代码都注释了,有需要的可以白嫖,欢迎纠正。堆排序的基本思想:将待排序序列构造成一个大顶堆,此时,整个序列的最大值就是堆顶的根节点。将其与末尾元素进行交换,此时末尾就为最大值。然后将剩余n-1个元素重新构造成一个堆,这样会得到n个元素的次大值。如此反复执行,便能得到一个有序序列了步骤:a.将无需序列构建成一个堆,根据升序降序需求选择大顶堆或小顶堆;b.将堆顶元素与末尾元素交换,将最大元素"沉"到数组末端;c.重新调整结构,使其满足堆定义,然后继续交换堆顶元素与当前末尾元素,反原创 2020-05-20 20:23:03 · 137 阅读 · 0 评论 -
简单排序——插入、冒泡、选择
插入排序:基本原理 :直接插入排序是一种简单的插入排序法,其基本思想是:把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中,直到所有的记录插入完为止,得到一个新的有序序列,算法适用于少量数据的排序,时间复杂度为O(n^2)。步骤:a、 从第一个元素开始,该元素可以认为已经被排序b、 取出下一个元素 在已经排序的元素序列中从后向前扫描c、 如果该元素(已排序)大于新元素,将该元素移到下一位置d、 重复c步骤直到找到已排序的元素小于或者等于新元素的位置e 、将新元素插入到该位置原创 2020-05-19 13:24:54 · 186 阅读 · 0 评论 -
fibonacci查找
#include<iostream>using namespace std;#define MAXSIZE 20//f斐波那契数列 {0,1,1,2,3,5,8,13,21,34}//编写fibonacci数列,返回数组int* fibonacci(){ int * f = new int[MAXSIZE]; f[0] = 1; f[1] = 1; for (int i = 2; i < MAXSIZE; i++) f[i] = f[i - 1] + f[i -原创 2020-05-17 16:08:07 · 152 阅读 · 0 评论 -
HashTable代码实现
#include<iostream>using namespace std;#define NULLKEY -32768#define HASHSIZE 12; //定义散列表长为数组长度class HashTable{public: int *elem; //动态数组 int count; //数据个数 };int m = 0; //散列表表长,全局变量bool InitHashTable(HashTable &H) //散列表初始化{ int i =原创 2020-05-17 14:20:52 · 201 阅读 · 0 评论 -
拓扑排序
拓扑排序的实现步骤在有向图中选一个没有前驱的顶点并且输出从图中删除该顶点和所有以它为尾的弧(白话就是:删除所有和它有关的边)重复上述两步,直至所有顶点输出,或者当前图中不存在无前驱的顶点为止,后者代表我们的有向图是有环的,因此,也可以通过拓扑排序来判断一个图是否有环。#include<iostream>#include<stack>#include<vector>#include<algorithm>using namespace std;#原创 2020-05-10 20:31:32 · 157 阅读 · 0 评论 -
并查集
1、什么是并查集并查集(Union Find)是一种用于管理分组的数据结构。它具备两个操作:(1)查询元素a和元素b是否为同一组 (2) 将元素a和b合并为同一组。注意:并查集不能将在同一组的元素拆分为两组。2、并查集的结构并查集可以使用树来实现。使用树形结构来表示以后,每一组都对应一棵树,然而我们就可以将这个问题转化为树的问题了,我们看两个元素是否为一组我们只要看这两个元素的根是否一致。显然,使用树形结构将问题简单化了。合并时是我们只需要将一组的根与另一组的根相连即可。3、并查集的实现转载 2020-05-09 13:52:44 · 95 阅读 · 0 评论 -
kruskal算法 并查集思想
对于稀疏图来说,用Kruskal写最小生成树效率更好,加上并查集,可对其进行优化。Kruskal算法的步骤:1.对所有边进行从小到大的排序。2.每次选一条边(最小的边),如果形成环,就不加入(u,v)中,否则加入。那么加入的(u,v)一定是最佳的。并查集如何实现:我们可以将每个集合视作一棵树,用这棵树的根的编号代表这个集合,最开始所有点都属于不同的集合,即每个点为其所在的树的根。在合并集合时,我们可以将其中一个集合的根的父亲设为另一个集合的根的父亲,找父亲操作我们可以通过从当前点往其父亲跳来实现原创 2020-05-08 23:09:35 · 338 阅读 · 0 评论 -
图——邻接表的DFS,BFS
邻接表做存储结构时,找邻接点所需的时间取决于顶点和边的数量,DFS,BFS时间复杂度为O(n+e)。1、邻接表2、邻接表 DFS:从起点出发,走过的点要做标记,发现有没走过的点,就随意挑一个往前走,走不了就回退,此种路径搜索策略就称为“深度优先搜索”,简称“深搜”。其实称为“远度优先搜索”更容易理解些。因为这种策略能往前走一步就往前走一 步,总是试图走得更远。所谓远近(或深度),就是以...原创 2020-05-06 20:28:50 · 4414 阅读 · 0 评论 -
二叉排序树(BST)的构建与删除
二叉排序树(BST)的构建,插入,查找与删除二叉排序树的删除结点分为三种情况(1)叶子结点这种情况最简单,由于删除叶子结点不会破坏整棵树的结构,只需要修改其双亲结点的指针即可(2)要删除的结点只求左子树或者右子树相对而言也比较简单,只需要删除结点后,将它的左子树或右子树整个移动到删除节点的位置即可。#include<iostream>using namespace std...原创 2020-04-29 14:05:54 · 274 阅读 · 0 评论 -
中序线索二叉树
c++ 中序线索二叉树二叉树原理不难,可是一到编程,问题好多。代码一小时,bug一整天。#include<iostream>using namespace std;typedef char elemtype;class BiThrNode {public: elemtype data; struct BiThrNode *lchild, *rchild; int L...原创 2020-04-27 12:45:32 · 257 阅读 · 0 评论 -
二叉树的创建与遍历(递归和非递归)
最近学到了二叉树,把二叉树的实现算法记录下来#include<iostream>using namespace std;#define maxsize 20typedef char elemtype;int num = 0;class binode {public: elemtype data; binode * right; binode * left;};t...原创 2020-04-24 18:08:46 · 236 阅读 · 0 评论 -
二叉树的基础知识
一、 二叉树简介1、二叉树的定义二叉树是每个结点最多有两个子树的树结构。它有五种基本形态:二叉树可以是空集;根可以有空的左子树或右子树;或者左、右子树皆为空。2、二叉树的相关概念深度,节点层数,高度,路径,叶节点,分支节点,根节点,父节点,左节点,右节点,兄弟节点,祖先节点,子孙节点,左子树,右子树。3、二叉树的性质性质1:二叉树第i层上的结点数目最多为2i-1(i>=1)性质...转载 2020-04-24 18:06:29 · 531 阅读 · 0 评论 -
多种方式学习kmp算法
苦涩难懂kmp算法文章只为记笔记,借鉴了其他博客的文章,勿怪。1、漫画理解KMP算法::https://blog.csdn.net/qq_39213969/article/details/1034720122、B站天勤视频:https://www.bilibili.com/video/BV17i4y1t76L?p=343、博客:https://blog.csdn.net/qq_379694...原创 2020-04-22 22:55:24 · 106 阅读 · 0 评论 -
队列的链式存储 c++
队列的链式存储队列的链式存储结构,其实就是线性表的单链表,只不过它只能尾进头出,我们把它简称为链队列。队头指针指向链队列的头结点,队尾指针指向终端节点。#include<iostream>using namespace std;template<class T>class node{public: T data; node<T> * nex...原创 2020-04-19 19:34:17 · 286 阅读 · 0 评论 -
循环队列 c++ 模板实现
循环队列 c++ 模板实现#include<iostream>using namespace std;template<class T>class sqqueue {private: T *data; int front;// 头指针 int rear;// 尾指针 int maxsize;public: sqqueue(int n); /...原创 2020-04-19 17:42:27 · 200 阅读 · 0 评论 -
单链表的定义和基本操作 c++
单链表 c++(数据结构 ) 链表是一种动态数据结构,它的特点是用一组任意的存储单元(可以是连续的,也可以是不连续的)存放数据元素。 链表中每一个元素成为“结点”,每一个结点都是由数据域和指针域组成的,每个结点中的指针域指向下一个结点。Head是“头指针”,表示链表的开始,用来指向第一个结点,而最后一个指针的指针域为NULL(空地址),表示链表的结束。 链表很基础,很重要!!!头文件:函...原创 2020-04-17 22:50:06 · 576 阅读 · 0 评论 -
栈的链式存储(数据结构) c++
c++数据结构 ——栈的链式存储栈是用的很多的一个数据结构,这里写用链表实现的方法。栈是先进后出,能解决很多问题,例如:括号匹配,后缀表达式等。这里我定义了一个模板类,令我的栈的链式存储可以处理各种数据类型。#include<iostream>using namespace std;template<class T>class node {public...原创 2020-04-17 22:24:24 · 288 阅读 · 0 评论 -
共享栈 (数据结构)
两个栈共享空间 利用一个数组来存储两个栈;让一个栈底为数组的首端;一个栈底为数组的末端.每个栈都向数组中间延伸,以此来充分利用数组的空间。 只适用于两个相同的数据类型#include<iostream>using namespace std;#define maxsize 10template<class T>class sqdoublestack {p...原创 2020-04-16 18:38:23 · 218 阅读 · 0 评论 -
栈的顺序存储 c++
栈的顺序存储c++#include<iostream>using namespace std;template<class T>class sqlist {public: sqlist(int n); //创建 ~sqlist(); void travel_sqlist();//遍历 int len_sqlist(); bool isempty();...原创 2020-04-16 12:38:25 · 134 阅读 · 0 评论