
数据结构
文章平均质量分 81
_Daredevil_
纸上得来终觉浅,
绝知此事要躬行。
展开
-
C/C++ 最短路径—Spfa-Bellman-Ford算法 (路径的保存和输出&负边判断)
一、最短路径最短路径问题是图论研究中的一个经典算法问题, 旨在寻找图(由结点和路径组成的)中两结点之间的最短路径。算法具体的形式包括:确定起点的最短路径问题 - 即已知起始结点,求最短路径的问题。确定终点的最短路径问题 - 与确定起点的问题相反,该问题是已知终结结点,求最短路径的问题。在无向图中该问题与确定起点的问题完全等同,在有向图中该问题等同于把所有路径方向反转的确定起点的问题。确定起点终点的最短路径问题 - 即已知起点和终点,求两结点之间的最短路径。全局最短路径问题 - 求图中所有的最原创 2020-07-16 15:30:47 · 894 阅读 · 0 评论 -
C/C++ 最短路径-Dijkstra算法 (路径的保存和输出)
一、最短路径最短路径问题是图论研究中的一个经典算法问题, 旨在寻找图(由结点和路径组成的)中两结点之间的最短路径。算法具体的形式包括:确定起点的最短路径问题 - 即已知起始结点,求最短路径的问题。确定终点的最短路径问题 - 与确定起点的问题相反,该问题是已知终结结点,求最短路径的问题。在无向图中该问题与确定起点的问题完全等同,在有向图中该问题等同于把所有路径方向反转的确定起点的问题。确定起点终点的最短路径问题 - 即已知起点和终点,求两结点之间的最短路径。全局最短路径问题 - 求图中所有的最原创 2020-07-11 09:52:42 · 23551 阅读 · 17 评论 -
C/C++ 最短路径-Floyd算法 (路径的保存和输出)
一、最短路径最短路径问题是图论研究中的一个经典算法问题, 旨在寻找图(由结点和路径组成的)中两结点之间的最短路径。算法具体的形式包括:确定起点的最短路径问题 - 即已知起始结点,求最短路径的问题。确定终点的最短路径问题 - 与确定起点的问题相反,该问题是已知终结结点,求最短路径的问题。在无向图中该问题与确定起点的问题完全等同,在有向图中该问题等同于把所有路径方向反转的确定起点的问题。确定起点终点的最短路径问题 - 即已知起点和终点,求两结点之间的最短路径。全局最短路径问题 - 求图中所有的最原创 2020-07-10 18:29:19 · 11154 阅读 · 3 评论 -
C/C++ 最小生成树—Kruskal算法
一、最小生成树一个有 n 个结点的连通图的生成树是原图的极小连通子图,且包含原图中的所有 n 个结点,并且有保持图连通的最少的边。在一给定的无向图G = (V, E) 中,(u, v) 代表连接顶点 u 与顶点 v 的边,而 w(u, v) 代表此边的权重,若存在 T 为 E 的子集且为无循环图,使得的 w(T) 最小,则此 T 为 G 的最小生成树。最小生成树其实是最小权重生成树的简称。二、Kruskal算法(克鲁斯卡尔算法)构造过程假设连通网N = (V, E),将N中的边按权值从小到原创 2020-07-09 17:43:23 · 1056 阅读 · 2 评论 -
C/C++ 最小生成树—Prim算法
一、最小生成树二、Prim算法(普里姆算法)三、举一个栗子(镖局运镖)原创 2020-07-06 16:10:29 · 4240 阅读 · 0 评论 -
C/C++ 哈夫曼树 创建 和 BFS遍历 算法
一、哈夫曼树概述哈夫曼树又称最优二叉树,是一种带权路径长度最短的二叉树。所谓树的带权路径长度,就是树中所有的叶结点的权值乘上其到根结点的路径长度(若根结点为0层,叶结点到根结点的路径长度为叶结点的层数)。树的路径长度是从树根到每一结点的路径长度之和,记为WPL=(W1L1+W2L2+W3L3+…+WnLn),N个权值Wi(i=1,2,…n)构成一棵有N个叶结点的二叉树,相应的叶结点的路径长度为Li(i=1,2,…n)。哈夫曼树的WPL是最小的。二、哈夫曼树的特性哈夫曼树又称为最优树:原创 2020-06-08 17:19:17 · 724 阅读 · 0 评论 -
C/C++ 邻接表建无向图 和 BFS DFS 遍历 算法
一、什么是邻接表图的邻接表存储方法跟树的孩子链表示法相类似,是一种顺序分配和链式分配相结合的存储结构。如这个表头结点所对应的顶点存在相邻顶点,则把相邻顶点依次存放于表头结点所指向的单向链表中。表结点存放的是邻接顶点在数组中的索引。对于无向图来说,使用邻接表进行存储也会出现数据冗余,表头结点A所指链表中存在一个指向C的表结点的同时,表头结点C所指链表也会存在一个指向A的表结点。二、如何用邻接表建无向图定义表头结点typedef struct VNode { //定义表头结点; Arc原创 2020-06-08 13:16:26 · 3393 阅读 · 0 评论 -
超详细 C/C++二叉树的前序中序后序遍历——递归和非递归实现 算法 !
二叉树的遍历二叉树的递归遍历就是按照前中后序的遍历思想不断调用来进行的;(难点) 二叉树的非递归遍历:前序和中序的非递归遍历,只需要用一个栈和定义来实现即可;而二叉树的后序非递归遍历,之前思考了挺久的,大多数的相关算法都是用对结点做一个标志表示第几次访问该结点来进行非递归后序遍历,我觉得写起来比较麻烦 (懒) ;我觉得可以用前序遍历的思想来做后序遍历,后序:左—右—根 ——> 根—右—左, 把后者遍历过程中的需要输出的数据存放在一个栈中,最后弹栈即可;详见代码Algorith原创 2020-05-25 16:55:55 · 1086 阅读 · 0 评论 -
C/C++ 创建二叉树 和 求树的深度 算法
DescriptionTry to implement the algorithm of creating a binary tree and calculating the depth of the tree.Translation:尝试实现生成二叉树并计算树的深度的算法Algorithm详见注释#include <iostream>using namespace std;typedef struct BitNode { //创建二叉树的结构体; char原创 2020-05-25 16:03:33 · 1861 阅读 · 0 评论 -
七种排序算法的分析和C语言源代码的实现
七种排序算法分析和C源代码的实现选择排序首先初始化数组首元素,外循环依次遍历排序数组,内循环再遍历数组,直至尾元素,若遇到需要交换的元素则进行交换,待双循环遍历结束,得到已排序好的数组。时间复杂度:O(n2)最坏情况:O(n2)最好情况:O(n2)稳定性:稳定适用于n较小时#include <stdio.h>#define MAX 50000int n, a[MA...原创 2020-03-06 11:52:31 · 437 阅读 · 2 评论 -
C++ 数据结构 括号匹配问题
DescriptionThere is an expression with three kinds of brackets () [] {}. For example ([(#+#)*(#+#)] {(……)}). Maybe the format of the expression is incorrect such as [()[)…((, ({}(…), ([])(, {[{}}))...原创 2020-04-18 17:40:57 · 1246 阅读 · 0 评论