![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
文章平均质量分 52
Strive_LiJiaLe
这个作者很懒,什么都没留下…
展开
-
深刻理解不同排序算法之间的逻辑
提示:请学习完各种排序再阅读会更深刻文章目录一、插入排序与希尔排序二、归并排序与快速排序——分治思想1.归并排序——利用辅助数组2.快速排序——原地排序一、插入排序与希尔排序插入排序排序之初,各个子数组都很短,排序之后子数组都是部分有序,这两种情况都很适合插入排序。这一特性将会与其他排序算法结合(比如下面介绍的分治算法的子数组处理),从而提高效率。希尔排序——插入排序的升级对于大规模乱序数组插入排序很慢,因为它只会交换相邻的元素,因此元素只能一点一点地从数组的一端移动到另一端。希尔排.原创 2022-03-22 16:48:49 · 616 阅读 · 1 评论 -
关键路径——C++版
知识储备:1.理解拓扑排序2.使用邻接表构造图#include "test.h"#include <iostream>#include <cstdio>#include <vector>#include <cstring>#include <queue>#include <climits>using namespace std;const int MAXN = 100;const int INF = INT8_M原创 2021-09-15 20:44:33 · 237 阅读 · 0 评论 -
树型递归思想
文章目录前言二叉树递归思想1.判断平衡二叉树为例。需要子树的信息:代码2.寻找最大的搜索子树为例。需要子树的信息:代码3.派对的最大快乐需要的信息代码4.判断是否为满二叉树思想进阶(多情况)5.判断是否为完全二叉树非递归,宽度优先遍历解决递归思想解决6.两个节点的最低公共祖先非递归,利用哈希表递归思想解决前言本文章将从很多涉及二叉树来解的算法题中,高度抽象出来一套底层思想,掌握了六步法,可以解决更多算法题。二叉树递归思想1)假设以X节点为头,假设可以向X左数和右数要任何信息2)在上一步的假设下,原创 2021-05-02 18:06:15 · 321 阅读 · 0 评论 -
二叉树遍历-线索二叉树-morris——java
先看一下前序迭代遍历二叉树原理:利用栈来回溯public static void preorder(TreeNode root){ if(root != null){ Stack<TreeNode> stack = new Stack<TreeNode>(); stack.add(root); while(!stack.isEmpty()){ root = stack.pop(); if(root != null){ System.out.pr原创 2021-04-26 22:38:36 · 159 阅读 · 0 评论 -
数据结构的框架思维(如何学好数据结构)
文章目录前言一、数据结构千变万化,但不离其宗二、数据结构的操作,无非:遍历+访问三、为什么算法总是和数据结构同时出现总结前言本文是对整个数据结构及算法的总体框架认识,旨在帮助读者自顶向下,从整体到细节,从抽象到具体地看待数据结构。希望通过本文读者能在对数据结构的学习和理解上能有更高层的认识。先声明一下:首先,这里讲的都是普通的数据结构,咱不是搞算法竞赛的,自学野路子出生,很多厉害的知识我不会,我只会解决常规的问题。另外,以下是我个人的经验的总结,没有哪本书会写这些东西,所以请读者试着理解我的角度,如转载 2021-04-24 14:40:59 · 334 阅读 · 0 评论 -
Dijkstra算法——C/C++
文章目录一、迪杰斯特拉算法介绍基本思想:操作步骤:图解:二、代码1.因为和普里姆算法思想有点像,所以代码也差不多三、源码一、迪杰斯特拉算法介绍迪杰斯特拉(Dijkstra)算法是典型最短路径算法,用于计算一个节点到其他节点的最短路径。 它的主要特点是以起始点为中心向外层层扩展(广度优先搜索思想),直到扩展到终点为止。基本思想:通过Dijkstra计算图G中的最短路径时,需要指定起点s(即从顶点s开始计算)。此外,引进两个集合S和U。S的作用是记录已求出最短路径的顶点(以及相应的最短路径长度)原创 2021-04-20 16:33:11 · 636 阅读 · 0 评论 -
Prim算法——C/C++
文章目录一、最小生成树二、普里姆算法算法介绍:**算法模拟:**三、算法分析问题1:如何找到给定顶点到所有顶点的最小权值边?问题2:找到最小权值边后,将这条边的尾顶点加入后,如何进行下一次最小权重边的寻找?问题1:若使用邻接矩阵实现,则在给定顶点(假设顶点编号为0)的这一行进行遍历;若使用邻接表实现,则在以给定顶点为头节点的单链表进行遍历。即初始化给定节点到所有边的权值,将每个权重存入权重数组,最后对数组遍历,求最小权重边。问题2:找到最小权重边后,就可以将新的顶点(假设编号为1)加入,需要从已加入的所有顶原创 2021-04-20 15:23:11 · 858 阅读 · 0 评论 -
Kruskal(最小生成树)——C
文章目录一、最小生成树二、克鲁斯卡尔算法介绍三、算法分析问题一 :对图的所有边按照权值大小进行排序。问题二 :将边添加到最小生成树中时,怎么样判断是否形成了回路。解决问题二:四、代码实现3.1定义结构:总结一、最小生成树在含有n个顶点的连通图中选择n-1条边,构成一棵极小连通子图,并使该连通子图中n-1条边上的权值之和达到最小,则称其为连通网的最小生成树。二、克鲁斯卡尔算法介绍克鲁斯卡尔算法,是用来求加权连通图的最小生成树的算法。基本思想:按照权值从小到大的顺序选择n-1条边,并保证这n-1条边原创 2021-04-20 13:41:41 · 303 阅读 · 0 评论 -
拓扑排序——C/C++
1.拓扑排序介绍拓扑排序(Topological Order)是指,将一个有向无环图(Directed Acyclic Graph简称DAG)进行排序进而得到一个有序的线性序列。这样说,可能理解起来比较抽象。下面通过简单的例子进行说明!例如,一个项目包括A、B、C、D四个子部分来完成,并且A依赖于B和D,C依赖于D。现在要制定一个计划,写出A、B、C、D的执行顺序。这时,就可以利用到拓扑排序,它就是用来确定事物发生的顺序的。在拓扑排序中,如果存在一条从顶点A到顶点B的路径,那么在排序结果中B出现在A的原创 2021-04-19 18:53:21 · 323 阅读 · 0 评论 -
图的广度优先算法——C
1.算法思想(1)从图中的某个初始点 v0 出发,首先访问初始点 v0。(2)接着访问该顶点的所有未访问过的邻接点 v01 v02 v03 ……v0n。(3)然后再选择 v01 v02 v03 ……v0n,访问它们的未被访问的邻接点,v010 v011 v012……v01n。(4)直到所有与初始顶点 v 联通的顶点都被访问。其实和树的层序遍历很像,都用到了队列的思想。以邻接表储结构,在运用广度优先遍历时需要引入一个队列SeQuence,用来存储和输出遍历数据,visiteBFS[]记录访问状态(原创 2021-04-19 17:04:46 · 178 阅读 · 0 评论 -
图的深度搜索——C/C++
算法思想(1)从图中的某个初始点 v 出发,首先访问初始点 v.(2)选择一个与顶点 v 相邻且没被访问过的顶点 ver ,以 ver 为初始顶点,再从它出发进行深度优先遍历。(3)当路径上被遍历完,就访问上一个顶点的第 二个相邻顶点。(4)直到所有与初始顶点 v 联通的顶点都被访问。很容易想到递归思想。算法实现:基于邻接表先看代码,不懂再看递归过程,过程有些乱比如从编号0开始:过程:先标记[0]p指向编号0为头节点的单链表进入循环判断:p->adjver是与p相连接的顶原创 2021-04-19 16:57:00 · 157 阅读 · 0 评论 -
图的基本算法——C/C++
图的结构体定义typedef struct vertex { int number; //顶点的编号}VertexType; //别名,顶点的类型typedef struct matrix { int n; //顶点个数 int e; //边数 int adjMat[MAXV][MAXV]; //邻接矩阵数组 VertexType ver[MAXV]; //存放顶点信息}MatGraph; //别名,完整的转载 2021-04-19 15:53:44 · 385 阅读 · 0 评论 -
哈夫曼算法——C
算法思想为每个字符建立一个叶子节点,并加上其相应的发生频率当有一个以上的节点存在时,进行下列循环2.1. 把这些节点作为带权值的二叉树的根节点,左右子树为空2.2. 选择两棵根结点权值最小的树作为左右子树构造一棵新的二叉树,且至新的二叉树的根结点的权值为其左右子树上根结点的权值之和2.3. 把权值最小的两个根节点移除2.4. 将新的节点加入队列中最后剩下的节点即为根节点,此时二叉树已经完成#define _CRT_SECURE_NO_WARNINGS#include<stdio转载 2021-04-17 18:33:11 · 160 阅读 · 0 评论 -
堆排序算法——C
原始数据:array[]={49,38,65,97,76,13,27,49,10}1.原始堆排序2.创建大顶堆3.开始排序(从小到大),交换根节点和最后一个结点。4.重新创建大顶堆,进行下一结点的排序。循环即可。5.五个函数交换函数:void swap(int array[],int x,int y)初始化大顶堆函数:void BuildHeap(int array[],int size)生成大顶堆函数:void Down(int array[],int i,int n)排序函数:vo原创 2021-04-17 19:13:03 · 178 阅读 · 0 评论 -
二叉查找树(排序树)——C
一.定义二叉查找树(Binary Search Tree),又被称为二叉搜索树。设x为二叉查找树中的一个结点,结点x的key值记为key[x]。如果y是x的左子树中的一个结点,则key[y]<=key[x];如果y是x的右子树的一个结点,则key[y]>=key[x]。二.性质在二叉查找树中:若任意节点的左子树不为空,则左子树上的所有结点的值均小于它的根节点的值;若任意节点的右子树不为空,则右子树上的所有结点的值均大于它的根节点的值;任意节点的左、右子树也分别为二叉查找树。没有原创 2021-04-19 11:22:16 · 342 阅读 · 0 评论 -
归并排序算法——C
思路2.1、申请一个和原始排序数组空间一样大的额外数组。2.2、定义归并初始长度 length。2.3、将数组分块。2.4、将分块数组进行排序,把数据存入额外一个数组。(下一次用额外数组排序,数据存入原始数组,轮流存储)2.5、增加归并长度 length*2。2.6、重复3-5步,即可得到排序。四个函数合并函数:void Merge(int input[], int output[], int low, int mid, int high)分块函数:void MergePass(int i转载 2021-04-17 17:02:37 · 112 阅读 · 0 评论 -
快速排序——C
算法步骤1、设置两个变量 low、high,排序开始时:low=0,high=size-1。2、整个数组找基准正确位置,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面①默认数组的第一个数为基准数据,赋值给key,即key=array[low]。②因为默认数组的第一个数为基准,所以从后面开始向前搜索(high–),找到第一个小于key的array[high],就将 array[high] 赋给 array[low],即 array[low] = array[high]。原创 2021-04-17 18:52:00 · 97 阅读 · 0 评论 -
直接插入排序算法——C
算法步骤1、建立一个哨兵(即临时变量),把要插入的数据赋给它。2、插入数据从后面开始比较,如果大于前面的就记录下标,并将数据后移,直到插入数据碰到比它小的。3、将临时变量赋值给当前记录下标。4、for循环即完成全部数据插入。#include <stdio.h>void display(int array[], int size) { for (int i = 0; i < size; i++) { printf("%d ", array[i]);原创 2021-04-17 17:29:29 · 83 阅读 · 0 评论 -
冒泡排序——C
算法思想1 默认认为原数据为无序的。2 从第二个数据开始排序,进行数据比较,如果array[i]>array[i+1],就进行交换。3 把这一轮比较结果,最小的置换到最前面(或者把最大的置换到最后面)。4 置换后的为有序数组。5 重复2-4步骤,直到数组有序为止。#include <stdio.h>void display(int array[], int size) { for (int i = 0; i < size; i++) { pri原创 2021-04-17 17:07:40 · 94 阅读 · 0 评论 -
顺序队列——C
函数说明//初始化队列 void initQueue(SqQueue * &q)//销毁队列void destroyQueue(SqQueue * &q)//判断队列是否为空bool emptyQueue(SqQueue * &q)//进队列bool enQueue(SqQueue * &q,char c)//出队列 bool deQueue(SqQueue * &q,char ch)代码#include<stdio.h>#in原创 2021-04-18 16:09:46 · 247 阅读 · 1 评论 -
C语言最全构造字符串的方法
string s0 = "Initial String"; //Initial Stringstring s1; //空string s2(s0); //Initial Stringstring s3(s0,8,3); //Strstring s4("Another charater sequence"); //原创 2021-02-04 12:20:06 · 553 阅读 · 0 评论