数据结构与算法
数据结构与算法
SpicyPeople
这个作者很懒,什么都没留下…
展开
-
堆排序
我写过一篇博客是如何建堆:点这里 https://blog.csdn.net/weixin_42949480/article/details/105707018建完堆之后一般进行堆排序堆排序就是不断将堆顶和最后一个元素交换顺序,然后再调整堆,循环len次#include <iostream>#include <algorithm>using namespa...原创 2020-04-23 16:11:33 · 116 阅读 · 0 评论 -
最大堆、最小堆的建立、插入和删除操作
堆数的定义堆树的定义如下:(1)堆树是一颗完全二叉树;(2)堆树中某个节点的值总是不大于或不小于其孩子节点的值;(3)堆树中每个节点的子树都是堆树。当父节点的键值总是大于或等于任何一个子节点的键值时为最大堆。 当父节点的键值总是小于或等于任何一个子节点的键值时为最小堆。如下图所示,上边为最大堆,下边为最小堆。建立最大(小)堆建立最大堆和最小堆的过程,就是对原有的数组中不断交换父亲...原创 2020-04-23 15:59:45 · 1815 阅读 · 0 评论 -
数据结构--最小生成树详解
前言 A wise man changes his mind,a fool never. Name:Willam Time:20...转载 2020-04-21 16:14:13 · 1291 阅读 · 1 评论 -
并查集详解(超级简单有趣~~就学会了)
转的一个超级有意思,好懂的并查集解释, 膜拜大神~~找了好久都没找到原帖大多都是转的 , 后来在某评论下看到原帖链接啦 点这里哦故事读完,并查集就会了~~~~~江湖上散落着各...转载 2020-04-16 10:57:21 · 240 阅读 · 0 评论 -
C++基于先序、中序和后序、中序遍历结果重建二叉树
前一篇博客写了,根据先序、中序求后序和后序、中序求前序,但是没有重建二叉树,这一篇主要写怎么根据遍历结果重建二叉树,上一篇博客地址:https://blog.csdn.net/weixin_42949480/article/details/105447729直接插代码:#include <iostream>#include <vector>#include <...原创 2020-04-13 11:29:14 · 301 阅读 · 0 评论 -
根据前序、中序、后序遍历还原二叉树
首先我们得知道概念:前序遍历:先访问当前节点,再访问当前节点的左子树,最后访问当前节点的右子树。对于二叉树,深度遍历与此同。规律:根在前;子树在根后且左子树比右子树靠前,且第一个就是根节点;中序遍历:先访问当前节点的左子树,然后访问当前节点,最后是当前节点的右子树,二叉树,中序遍历会得到数据升序效果。规律:根在中;左子树在跟左边,右子树在根右边,左边部分是根结点的左子树的中序遍历序列,右边部分...原创 2020-04-11 10:13:45 · 1166 阅读 · 0 评论 -
二叉搜索树
二叉搜索树的定义其左子树中所有结点的键值小于该结点的键值;其右子树中所有结点的键值大于等于该结点的键值;其左右子树都是二叉搜索树。...原创 2020-04-09 10:25:57 · 103 阅读 · 0 评论 -
Dijkstra算法图文详解(直接理解!!!)
算法介绍算法特点迪科斯彻算法使用了广度优先搜索解决赋权有向图或者无向图的单源最短 路径问题,算法最终得到一个最短路径树。该算法常用于路由算法或者作为其他图算法的一个子模块。算法思路定义一个Dis数组用来存起点s到所有点的最短距离,visited数组用来标记节点是否访问到,定义一个集合T中用来保存已经找到最短距离的节点。使用邻接表在存储每个边的长度。初始时DIs的每个值为Dis&...原创 2020-04-07 16:41:35 · 7577 阅读 · 2 评论 -
二叉树的遍历
前序遍历遍历顺序:根——>左儿子——>右儿子贴代码:void Previous(tr t){ if (t) { cout << t->date << " "; Previous(t->lchild); Previous(t->rchild); }}中序遍历遍历顺序:左儿子——>根——>右儿子贴代码...原创 2019-12-02 17:10:35 · 98 阅读 · 0 评论 -
二叉树的建立
树的建立树的建立采用递归算法,和遍历差不多,根据数据输入顺序决定贴代码void Creat_tree(tr &t){ char data, ch; cin >> data; ch = getchar(); if (data == '*') t = NULL; else if (ch == '\n') return; else { t = new tre...原创 2019-12-02 17:05:10 · 163 阅读 · 0 评论 -
最小生成树算法
图的最小生成树算法有普里姆(prim)算法,克鲁斯卡尔(kruskal)算法 等等kruskal 算法先贴代码bool cmp(const Edge &a, const Edge &b) //用于将带权值的边排序{ return a.weight < b.weight;}int Find(int *parent, int f){ while (parent...原创 2019-12-01 15:58:07 · 1501 阅读 · 0 评论 -
图的遍历
图有两种遍历,dfs(深度优先遍历)和bfs(广度优先遍历)深度优先遍历其实跟树的前中后遍历差不多,递归思想我直接贴代码void Graph_dfs(Graph G, int i){ EdgeNode *p; if (visit[i] == 0) { visit[i] = 1; cout << G.nodelist[i].ch << " "; }...原创 2019-12-01 12:10:19 · 120 阅读 · 0 评论 -
图的建立
图的存储方式图的存储方式有两种:一种邻接矩阵的方法,另一种是邻接表的方法各有千秋,根据题目输入决定使用哪种存储方式邻接矩阵方法邻接矩阵就是一个二维矩阵,存储的是图中个顶点的邻接关系,根据该矩阵可以很容易得到节点的入度和出度该方法建立图的代码void create(Graph &G){ cin >> G.node_num >> G.edge_num;...原创 2019-12-01 12:02:35 · 156 阅读 · 0 评论 -
拓扑排序
拓扑排序拓扑排序是指,将一个有向无环图(Directed Acyclic Graph简称DAG)进行排序进而得到一个有序的线性序列。例如,一个项目包括A、B、C、D四个子部分来完成,并且A依赖于B和D,C依赖于D。现在要制定一个计划,写出A、B、C、D的执行顺序。这时,就可以利用到拓扑排序,它就是用来确定事物发生的顺序的。在拓扑排序中,如果存在一条从顶点A到顶点B的路径,那么在排序结果中B出...原创 2019-12-01 11:47:49 · 279 阅读 · 0 评论 -
希尔排序
希尔排序就是分段的插入排序,原理就不多讲void shellsort(int arr[], int len){ int cre=len; //增量,下面的增量是3 do { cre = cre / 3 + 1; for (int i = cre; i < len; i += cre) //以下就是插入排序 { int insert_val = arr[i]; ...原创 2019-11-28 20:16:45 · 121 阅读 · 0 评论 -
选择排序
选择排序的基本思想:如果有N个元素需要排序,那么首先从N个元素中找到最小的那个元素与第0位置上的元素交换(说明一点,如果没有比原本在第0位置上的元素小的就不用交换了,后面的同样是),然后再从剩下的N-1个元素中找到最小的元素与第1位置上的元素交换,之后再从剩下的N-2个元素中找到最小的元素与第2位置上的元素交换,…直到所有元素都排序好(也就是直到从剩下的2个元素中找到最小的元素与第N-2位置上的...原创 2019-11-28 11:34:13 · 82 阅读 · 0 评论 -
插入排序
基本介绍:插入式排序属于内部排序法,是对于欲排序的元素以插入的方式找寻该元素的适当位置,以达到排序的目的。插入排序法思想:插入排序(Insertion Sorting)的基本思想是:把 n 个待排序的元素看成为一个有序表和一个无序表,开始时有 序表中只包含一个元素,无序表中包含有 n-1 个元素,排序过程中每次从无序表中取出第一个元素,把它的排 序码依次与有序表元素的排序码进行比较,将它插入...原创 2019-11-28 11:08:30 · 78 阅读 · 0 评论 -
插入排序(转载)
插入排序相对冒泡排序而言是一种较为快捷方便的排序算法。冒泡排序:http://blog.csdn.net/llzk_/article/details/51547923插入排序原理很简单,讲一组数据分成两组,我分别将其称为有序组与待插入组。每次从待插入组中取出一个元素,与有序组的元素进行比较,并找到合适的位置,将该元素插到有序组当中。就这样,每次插入一个元素,有序组增加,待插入组减少。直到...转载 2019-11-28 10:27:28 · 104 阅读 · 0 评论 -
冒泡排序
#include<iostream>#include<algorithm>#include<stdio.h>#include<string.h>#include<queue>#include<stack>using namespace std;void swap(int &a, int &b)...原创 2019-11-25 19:01:47 · 96 阅读 · 0 评论