数据结构
文章平均质量分 67
# 数据结构
943802606
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
数据结构——最小生成树之克鲁斯卡尔算法(Kruskal)
Kuskal算法【算法简介】:上一篇中的Prime算法是一种“加点式的算法”,而Kuskal算法是一种“加边式的算法”;Kuskal算法与Prime算法都是一种贪心算法,但Kruskal算法对图中存在相同权值的边时也有效。【算法思想】:算法对权值从小到大排序,每次选取当前权值最小的边加入结点,直到所有的结点都已加入结点。算法中用到了并查集的思想(并查集),通过并查集来判断两个结点是否有共同的父节点,如果有,则表明两个结点已经联通。如果没有,就将两个结点联通,记录路径。Kruskal算法也是采用贪心算法原创 2021-10-27 19:10:10 · 550 阅读 · 0 评论
-
数据结构——最短路径之Dijkstra算法(与最小生成树的prime算法很像,建议一起看)
最短路径之Dijkstra算法(一)Dijkstra算法单源最短路径:就是从某一个顶点出发,到图中任意顶点之间的最短路径;【算法概述】:Dijkstra算法适用于解决单源最短路径的问题。即:从源点到任意指定顶点之间的最短距离的问题;但Dijkstra算法要求所有边的权值非负。看过Prime算法的同学都知道,Dijkstra算法与Prime算法很相似,不同的就是dis数组的更新方式。Dijkstra算法用邻接矩阵存图比较方便。【算法思想】:先用一个数组记录从源点到图中个顶点直接相连的距离,如果不直接连原创 2021-10-30 11:52:29 · 574 阅读 · 0 评论
-
数据结构——最短路径算法之floyd算法
数据结构——最短路径算法之floyd算法原创 2021-10-30 19:46:21 · 463 阅读 · 0 评论
-
数据结构——最小生成树之prime算法(与最短路径之迪杰斯特拉算法很像)
#include<iostream>#include<cstring>#include<vector>#define INF 0x3f3f3f3f//表示该两点之间没有路,距离无穷远#define MAX 1000//最多有1000个点 using namespace std;int matrix[MAX][MAX]={0};//邻接矩阵存储图int min_distance[MAX]; //记录该结点到生成树的最短路径 bool visited原创 2021-10-27 21:18:52 · 567 阅读 · 0 评论
-
数据结构——二叉树的最长路径问题
题目:求任意二叉树中第一条最长的路径长度,并输出此路径上各结点的值。思路:求最长路径算法(核心代码)void longest_path(BiTree T,int *path,int &len,int *longestpath,int &longest_len){ if(T!=NULL) { if(T->lchild==NULL&&T->rchild==NULL) { path[len]=T->data; if(len>原创 2020-11-26 21:02:17 · 10071 阅读 · 7 评论 -
数据结构——模式匹配kmp算法
暴力算法原创 2020-12-01 11:34:47 · 255 阅读 · 0 评论 -
数据结构——括号匹配问题
括号匹配给定一个字符串,其中的字符只包含三种括号:花括号{ }、中括号[ ]、圆括号( ),即它仅由 “( ) [ ] { }” 这六个字符组成。设计算法,判断该字符串是否有效,即字符串中括号是否匹配。括号匹配要求括号必须以正确的顺序配对,如 “{ [ ] ( ) }” 或 “[ ( { } [ ] ) ]” 等为正确的格式,而 “[ ( ] )” 或 “{ [ ( ) }” 或 “( { } ] )” 均为不正确的格式。所需的知识前提:栈以下是顺序栈的基本算法结构表示,初始化,销毁栈,入栈,出栈,原创 2020-11-23 14:55:56 · 6091 阅读 · 0 评论 -
数据结构——栈
文章目录1.存储结构2.顺序栈的实现3.链栈的实现4.进制转换5.括号匹配6.行编辑程序7.迷宫求解8.表达式求值1.存储结构顺序结构typedef struct {ElemType *base; // 栈底指针ElemType *top; // 栈顶指针int stacksize; // 栈空间大小} SqStack;2.顺序栈的实现3.链栈的实现4.进制转换5.括号匹配6.行编辑程序7.迷宫求解8.表达式求值栈的全部代码,可执行程序#include&原创 2020-11-24 10:48:07 · 328 阅读 · 0 评论 -
数据结构——二叉树的层次遍历
知识前提:循环队列,二叉树的基本运算//思路进行层次遍历时构建一个辅助队列,先将二叉树根节点入队,然后出队,访问出队结点,若它有左子树,将左子树根节点入队,然后出队,访问出队结点…,右子树也同样如此,循环往复直到队列为空1.构建好辅助队列Q和二叉树T;2.首先将二叉树的T(根节点)入队列;3.进入while循环,退出条件 :队列为空;4.循环内部:首先将队列中的队首元素。输出他的值;若队首元素(刚刚出队的元素)有左子树,将其左子树入队若队首元素(刚刚出队的元素)有右子树,将其右子树入队详细原创 2020-11-24 12:10:07 · 1360 阅读 · 0 评论 -
数据结构——图-有向带权图的邻接表基础
#include <stdio.h>#include <stdlib.h>#define VertexType char //顶点的数据类型(char) #define VertexMax 20 //最大顶点个数 typedef struct ArcNode//边表 { int adjvex;//存储的是该顶点在顶点数组即AdjList[]中的位置 int weight; struct ArcNode *next;}ArcNode;typedef str..原创 2020-12-20 20:05:22 · 1606 阅读 · 0 评论 -
数据结构——图-有向带权图的邻接表
#include <stdio.h>#include <stdlib.h>#define VertexType char //顶点的数据类型(char) #define VertexMax 20 //最大顶点个数 typedef struct ArcNode//边表 { int adjvex;//存储的是该顶点在顶点数组即AdjList[]中的位置 int weight; struct ArcNode *next;}ArcNode;typedef s...原创 2020-12-20 20:28:12 · 16031 阅读 · 1 评论 -
数据结构——队列
循环队列链队列队列的应用循环队列代码#include<stdio.h>typedef int ElemType;typedef int QElemType;typedef int Status;#define TRUE 1#define FALSE 0#define ERROR 0#define OK 1#include<malloc.h> #include<stdlib.h>//----------循环队列 --顺序存储结构-----原创 2020-12-05 19:49:42 · 290 阅读 · 0 评论 -
数据结构——图-最短路径长度中最大的一个
#include<stdio.h>#include<string.h>#define INF 32767#define MAXVEX 30int dist[MAXVEX]; //建立dist数组 int path[MAXVEX]; //建立path数组 int S[MAXVEX]; //建立S数组typedef char VertexType;typedef struct graph{ int n,e; VertexType ve...原创 2020-12-21 23:02:33 · 712 阅读 · 0 评论 -
数据结构——用栈解决回文字符问题
回文回文是指正读反读均相同的字符序列,如“abba”和“abdba”均是回文,但“good”不是回文。试写一个算法判定给定的字符序列是否为回文。(提示:将一半字符入栈。)所需的知识前提:栈以下是顺序栈的基本算法结构表示,初始化,销毁栈,入栈,出栈,得到栈顶元素,判断栈是否为空等算法。#include<stdio.h>#include<bits/stdc++.h>using namespace std;#include<malloc.h>#include&原创 2020-11-23 14:32:39 · 3101 阅读 · 0 评论 -
数据结构——二叉树的递归算法
这里包含的递归算法有:1.@[二叉树的先序创建];2. 二叉树的先序中序后序遍历;3. 二叉树的销毁算法;4. 双序遍历;5. 求结点的个数;6. 求结点值的和;7. 求树的深度;8. 求叶子结点的个数;9. 求单分支结点的个数;10. 交换结点的左右子树;11. 寻找最小值结点;12. 判断是否是相同的二叉树;13. 判断是否是平衡二叉树;14. 判断是对称二叉树;...原创 2020-11-27 10:36:37 · 3434 阅读 · 0 评论 -
数据结构——图-迪杰斯特拉算法
#include<stdio.h>#include<string.h>#define INF 32767#define MAXVEX 30int dist[MAXVEX]; //建立dist数组 int path[MAXVEX]; //建立path数组 int S[MAXVEX]; //建立S数组 typedef char VertexType; typedef struct graph{ int n,e; VertexType ve原创 2020-12-19 21:14:32 · 594 阅读 · 1 评论 -
数据结构——二叉树的最小深度算法
给定一个二叉树,找出其最小深度。最小深度是从根节点到最近叶子节点的最短路径上的节点数量。说明:叶子节点是指没有子节点的节点。输入:root = [3,9,20,null,null,15,7]输出:2示例 2:输入:root = [2,null,3,null,4,null,5,null,6]输出:5提示:树中节点数的范围在 [0, 105] 内-1000 <= Node.val <= 1000来源:力扣(LeetCode)111.二叉树的最小深度思路:1.如果T(根节原创 2020-11-24 11:28:06 · 2075 阅读 · 0 评论 -
数据结构——线性表
顺序表代码单链表代码循序表算法#include<stdio.h>#include<string.h>#include"malloc.h" # define MaxSize 100typedef int ElemType;typedef int Status;#define OK 1#define ERROR 0#define TRUE 1#define FALSE 0#define LIST_INIT_SIZE 100 // 线性表存储空间的初始分配量原创 2020-12-05 19:56:38 · 337 阅读 · 1 评论 -
数据结构——二叉树的非递归算法
二叉树的非递归算法先序遍历非递归算法1先序遍历非递归算法2非递归交换左右孩子算法使用栈来实现二叉树的非递归算法栈的基本算法#include<stdio.h>#include<bits/stdc++.h> typedef int Status;#define OK 1#define ERROR 0#define TRUE 1#define FALSE 0typedef char TElemType;// ------栈的顺序存储结构表示---------原创 2020-12-05 19:24:20 · 1555 阅读 · 1 评论 -
数据结构——图-有向图的邻接矩阵
#include<stdio.h>#include<string.h>#define INF 32767#define MAXVEX 30typedef char VertexType;typedef struct graph{ int n,e; VertexType vexs[MAXVEX]; int edges[MAXVEX][MAXVEX];}MGraph;void CreateMGraph(MGraph &G){ int n,e;...原创 2020-12-20 10:59:45 · 3379 阅读 · 1 评论 -
数据结构——从叶子结点到根节点的全部路径
问题输出二叉树中从每个叶子结点到根结点的路径。与此问题类似的问题数据结构——二叉树的最长路径问题#include<stdio.h>#include<bits/stdc++.h> #define MAX 200typedef char TElemType;typedef int status; typedef struct BiNode{ TElemType data; struct BiNode *lchild; struct BiNode *rchild原创 2020-11-26 22:10:44 · 7265 阅读 · 3 评论 -
数据结构——图-有向图和无向图的邻接表基础
#include <stdio.h>#include <stdlib.h>#define VertexType char //顶点的数据类型(char) #define VertexMax 20 //最大顶点个数 typedef struct ArcNode//边表 { int adjvex;//存储的是该顶点在顶点数组即AdjList[]中的位置 struct ArcNode *next;}ArcNode;typedef struct VNode /...原创 2020-12-20 20:01:10 · 1451 阅读 · 0 评论 -
数据结构——最大堆最小堆
定义:最大堆和最小堆都是一棵完全二叉树。最大堆:是指根节点的关键字值是堆中的最大关键字值,且每个节点若有儿子节点,其关键字值都不小于其儿子节点的关键字值。最小堆:是指根节点的关键字值是堆中的最小关键字值,且每个节点若有儿子节点,其关键字值都不大于其儿子节点的关键字值。最大堆的插入操作步骤:1 把待增加的节点编号 i 设置为已知堆的总节点数加 1 即 i=++(*n),因此,新增的元素放在最下一层作为新的叶子节点。求出节点 i 的父节点 parent=i/2; 判断是否为空堆,并比较所插入元素与父原创 2021-06-09 20:05:05 · 1445 阅读 · 1 评论 -
数据结构——交换左右子树
交换左右子树算法#include<stdio.h>#include<bits/stdc++.h> typedef char TElemType;typedef int status; typedef struct BiNode{ TElemType data; struct BiNode *lchild; struct BiNode *rchild;}BiNode,*BiTree;void CreateBiTree(BiTree &T)//二叉树的先序创原创 2020-11-24 17:08:30 · 1661 阅读 · 1 评论 -
数据结构——进制转换(10—n)
进制转换(10-n)所需知识:栈#include<stdio.h>#include<bits/stdc++.h>using namespace std;#include<malloc.h>#include<string>typedef int Status;#define OK 1#define ERROR 0#define TRUE 1#define FALSE 0// ------栈的顺序存储结构表示----------#d原创 2020-11-23 16:26:19 · 1571 阅读 · 0 评论 -
数据结构——二叉树的双序遍历
设计二叉树的双序遍历算法(双序遍历是指对于二叉树的每一个结点来说,先访问这个结点,再按双序遍历它的左子树,然后再一次访问这个结点,接下来按双序遍历它的右子树思路:1.双序遍历与中序遍历类似,是中序遍历的变形2.中序遍历是指对于二叉树的每一个结点来说,先中序遍历这个结点的左子树,然后访问这个结点,接下来中序遍历它的右子树二叉树的双序遍历的全部代码#include<stdio.h>#include<stdlib.h>typedef char ElemType;ty原创 2020-11-26 18:28:04 · 5118 阅读 · 3 评论 -
数据结构——二叉树的层次遍历进阶
之前的一个博客数据结构——二叉树的层次遍历看完这个,可以简单实现下面的问题问题:1.计算二叉树的最大宽度(二叉树的最大宽度是指二叉树所有层中结点个数的最大值。2.用按层次顺序遍历二叉树的方法,统计树中具有度为1的结点数目。解决问题的思路:int BiTree_height1(BiTree T)函数用于计算出树的高度(深度);void levelOrder( BiTree T);创建了一个记录每层树的宽度数组width[totalLevel]void printNodeAtLevel(BiT原创 2020-11-26 20:09:28 · 462 阅读 · 0 评论
分享