![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构与算法
安东time
比技术更重要的是人品
展开
-
数据结构与算法 总结
文章目录图图的数据存储方式图最小生成树kruskal算法prim算法图拓扑排序dijkstra 单源最短路径图图的数据存储方式二维矩阵存储,邻接矩阵,适用于密度较高,比较小的图。链表存储,邻接表,适用于密度较低,比较大的图,对于一写比如拓扑排序等也很适合。图最小生成树kruskal算法对于一个图,将其中存在的所有边按照从大到小排序,然后依次取出最小的边,并将边中的顶点加入到最小生成树中,但是不允许形成闭环,也就是加入一个边的时候需要判断边中的两个顶点是否都已经在生成树中了,生成树的记录需要一个原创 2021-06-28 10:07:09 · 240 阅读 · 0 评论 -
leetcode: 树
文章目录01二叉树的镜像01二叉树的镜像请完成一个函数,输入一个二叉树,该函数输出它的镜像。例如输入: 4/ 2 7/ \ / 1 3 6 9镜像输出: 4/ 7 2/ \ / 9 6 3 1来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/er-cha-shu-de-jing-xiang-lcof著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。解题原创 2021-02-04 12:22:35 · 155 阅读 · 0 评论 -
leetcode :数组和链表
文章目录01删除链表中某个值01删除链表中某个值给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。返回删除后的链表的头节点。解题思路粗暴的遍历一遍说明代码里面没有释放待删除元素的内存/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {}原创 2021-02-01 23:17:03 · 132 阅读 · 0 评论 -
leetcode : 基础技巧
文章目录01 判断二进制数1的个数01 判断二进制数1的个数请实现一个函数,输入一个整数(以二进制串形式),输出该数二进制表示中 1 的个数。例如,把 9 表示成二进制是 1001,有 2 位是 1。因此,如果输入 9,则该函数输出 2。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/er-jin-zhi-zhong-1de-ge-shu-lcof著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。解题思路二进制的情况下用位原创 2021-02-01 22:09:26 · 72 阅读 · 0 评论 -
leetcode刷题集:栈与队列
文章目录01 用两个栈模拟一个队列01 用两个栈模拟一个队列用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/yong-liang-ge-zhan-shi-xian-dui-lie-lcof著作权归领扣网络所有。商业转载请联系官原创 2021-02-01 21:29:52 · 173 阅读 · 0 评论 -
大话数据结构 :排序
基础介绍快速排序是冒泡排序的升级,冒泡排序的算法性能较低时间性能O(n2),而快速排序平均可以达到o(nlogn)。冒泡排序就是两两比较,直到所有的位置都是有序排列的数据。而快速排序就是在两两比较的过程中增加了一个将比当前数据小的都放在一段,比当前数据大的都放在另一端的思想,提高了算法效率。代码#include <stdio.h> #include <string.h>#include <ctype.h> #include <stdlib原创 2021-01-28 22:16:20 · 121 阅读 · 0 评论 -
大话数据结构:散列表
基础介绍是一种存储结构,就是构建一个函数,以输入的关键字作为自变量,以地址作为因变量。具体实现有很多变种。代码#include "stdio.h" #include "stdlib.h" #include "io.h" #include "math.h" #include "time.h"#define OK 1#define ERROR 0#define TRUE 1#define FALSE 0#define MAXSIZE 100 /* 存储空间初始分配量 *原创 2021-01-25 23:06:44 · 53 阅读 · 0 评论 -
大话数据结构:多路查找
基础介绍是多节点的树,可以用在磁盘数据的查找上。代码#include "stdio.h" #include "stdlib.h" #include "io.h" #include "math.h" #include "time.h"#define OK 1#define ERROR 0#define TRUE 1#define FALSE 0#define MAXSIZE 100 /* 存储空间初始分配量 */#define m 3 /* B树的阶,暂设为3原创 2021-01-24 23:02:55 · 101 阅读 · 0 评论 -
大话数据结构:平衡二叉排序树
基础介绍平衡二叉排序树为了让二叉树的查找 删除 效率能够达到理论上的最好性能。主要手段就是旋转子树,有左旋和右旋,通过计算节点的平衡值确定如何旋转。代码#include "stdio.h" #include "stdlib.h" #include "io.h" #include "math.h" #include "time.h"#define OK 1#define ERROR 0#define TRUE 1#define FALSE 0#define MAXSIZ原创 2021-01-24 15:27:55 · 97 阅读 · 0 评论 -
大话数据结构 : 二叉排序树
二叉排序树二叉排序树的好处在于插入 删除 查找的效率很高,比线性表和数组都好二叉树稍微难一点的敌方在于删除,在删除一个既有左子树也有右子树的节点时比较麻烦,策略就是将要删除的节点的左子树中向右查找找到最大的节点顶替原来的父节点,并且做好子树的重新连接代码#include "stdio.h" #include "stdlib.h" #include "io.h" #include "math.h" #include "time.h"#define OK 1#define E原创 2021-01-24 14:06:11 · 78 阅读 · 0 评论 -
大话数据结构22:几种常见的静态查找算法
基础针对顺序表进行的查找顺序查找插值查找代码#include "stdio.h" #include "stdlib.h" #include "io.h" #include "math.h" #include "time.h"#define OK 1#define ERROR 0#define TRUE 1#define FALSE 0#define MAXSIZE 100 /* 存储空间初始分配量 */typedef int Status; /* Status原创 2021-01-23 21:44:13 · 154 阅读 · 0 评论 -
大话数据结构21 :关键路径
关键路径与dijisktra最短路径的目标相反,找出从起点到终点的一条最长路径。用在活动工期图中。具体计算:在拓扑排序中计算一个事件最早发生事件,然后再计算一个事件最晚发生事件,当一个事件最早发生时间等于最晚发生时间,表示这两个事件之间的活动就是关键活动,由关键活动组成一条活动连,就是关键路径。代码#include "stdio.h" #include "stdlib.h" #include "io.h" #include "math.h" #include "time.h"原创 2021-01-23 20:05:57 · 91 阅读 · 0 评论 -
大话数据结构:拓扑排序
基础介绍对一个有向无环图(Directed Acyclic Graph简称DAG)G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若边<u,v>∈E(G),则u在线性序列中出现在v之前。拓扑排序时的图结构:/* 第一步:找到所有入读为0的顶点,并将其压栈 第二步:从栈中pop出一个顶点,将其所连接的顶点的入度都减1 循环前两步,直到栈空,此时应该也没有了入度为q的顶点,如果有,说明图中出现了环*/#include "stdio.h" #原创 2021-01-21 22:14:33 · 109 阅读 · 0 评论 -
大话数据结构:最短路径算法
dijkstra最短路径算法迪杰斯特算法的核心是首先正向把离起点最近的点一个一个找出来,然后从终点开始逆向计算最短路径利用图数据结构实现dijkstra算法的伪代码如下{记录所有点到起点的距离并保存到数组D中,有直接连接的就是图中边的权值,没有直接连接的就是无穷大(起点到起点本身距离为0,后面的计算不考虑本身)}创建一个数组F记录顶点是否已经计算离顶点最近的距离创建一个保存路径的数组P循环顶点个数的次数 { {找到一个没有计算与顶点最近的距离的顶点k但是其在距离记录数组D中距离顶点D最原创 2021-01-21 13:38:59 · 163 阅读 · 0 评论 -
大话数据结构18:最小生成树算法
prim最小生成树算法对于几个图G{V,E};首先从V中任意选择一个顶点Vo 将其加入到顶点集合U中,在顶点集合V-U中计算所有到V中任意顶点假设是Vo最近的顶点Voo,将其加入到U中,并且记录边E{Vo,Voo},一直重复以上操作直到顶点集合V等于集合U结束。代码实现#include "stdio.h" #include "stdlib.h" #include "io.h" #include "math.h" #include "time.h"#define OK 1#d原创 2021-01-20 21:11:52 · 86 阅读 · 0 评论 -
大话数据结构 17:图的深度优先遍历和广度优先遍历
深度优先遍历主要思路是从图中一个未访问的顶点 V 开始,沿着一条路一直走到底,然后从这条路尽头的节点回退到上一个节点,再从另一条路开始走到底…,不断递归重复此过程,直到所有的顶点都遍历完成,它的特点是不撞南墙不回头,先走完一条路,再换一条路继续走。广度优先遍历·广度优先遍历图是以顶点v为起始点,由近至远,依次访问和v有路径相通而且路径长度为1,2,……的顶点。为了使“先被访问顶点的邻接点”先于“后被访问顶点的邻接点”被访问,需设置队列存储访问的顶点。代码实现邻接矩阵结构的遍历//邻接表的深度优先原创 2021-01-17 17:34:40 · 139 阅读 · 0 评论 -
大话数据结构16:图
基础介绍图的数据结构图主要由顶点和边组成无向边用()有向边用<>入度:一顶点V为头的弧的数目为入度,出度:以其为尾的数目为出度。连通图连通图生成树图的定义与术语总结图的基本操作图的存储结构 邻接矩阵邻接矩阵图的代码#include "stdio.h" #include "stdlib.h" #include "io.h" #include "math.h" #include "time.h"#define OK 1#de原创 2021-01-17 14:41:49 · 73 阅读 · 0 评论 -
大话数据结构15 : 线索二叉树
基础介绍线索二叉树就是当用链表组成的二叉树其在叶节点或者分支中有空指针时,将空指针指向自己的前驱后者后继记录后继记录前驱线索二叉树数据结构代码实现#include "string.h"#include "stdio.h" #include "stdlib.h" #include "io.h" #include "math.h" #include "time.h"#define OK 1#define ERROR 0#define TRUE 1#defi原创 2021-01-17 10:28:44 · 94 阅读 · 2 评论 -
大话数据结构14 :二叉树 链表结构
#include "string.h"#include "stdio.h" #include "stdlib.h" #include "io.h" #include "math.h" #include "time.h"#define OK 1#define ERROR 0#define TRUE 1#define FALSE 0#define MAXSIZE 100 /* 存储空间初始分配量 */typedef int Status;// 构造二叉树int i原创 2021-01-16 22:09:45 · 90 阅读 · 0 评论 -
大话数据结构13:二叉树 数组存储
基础介绍对于完全二叉树 父节点位置与子节点位置 i 与 2*i +1前序遍历打印函数在前中序遍历打印函数在中后序遍历打印函数在后#include "stdio.h" #include "stdlib.h" #include "io.h" #include "math.h" #include "time.h"#define OK 1#define ERROR 0#define TRUE 1#define FALSE 0#define MAXSIZE 100原创 2021-01-08 20:35:22 · 254 阅读 · 0 评论 -
大话数据结构12 串String
基础内容串的操作:串的比较代码#include "string.h"#include "stdio.h" #include "stdlib.h" #include "io.h" #include "math.h" #include "time.h"#define OK 1#define ERROR 0#define TRUE 1#define FALSE 0#define MAXSIZE 40 /* 存储空间初始分配量 */typedef int Sta原创 2021-01-07 20:38:24 · 103 阅读 · 0 评论 -
大话数据结构11:队列 链表结构
基础介绍用链表实现的队列代码#include "stdio.h" #include "stdlib.h" #include "io.h" #include "math.h" #include "time.h"#define OK 1#define ERROR 0#define TRUE 1#define FALSE 0#define MAXSIZE 20 /* 存储空间初始分配量 */typedef int Status;typedef int QElemTy原创 2021-01-04 21:27:28 · 93 阅读 · 0 评论 -
大话数据结构 队列10:数组循环队列
基础介绍队列 先进先出,出列在队头,进列在队尾数组可以做成循环队列。循环队列的一个重要问题:判断队列是空是满?空队列的判断比较简单:尾游标等于头游标满队列的判断比较复杂:如果也是用尾游标等于头游标则出现与空队列相同的判断条件,此时可以额外增加判断标志位,还有第二种判断方法,就是判断尾游标和头游标值差一个元素的时候。代码#include "stdio.h" #include "stdlib.h" #include "io.h" #include "math.h" #incl原创 2021-01-04 21:25:47 · 160 阅读 · 0 评论 -
C++ 大话数据结构 09: 中缀表达式 转后缀表达式 计算器
参考:https://blog.csdn.net/weixin_43670802/article/details/89279301原创 2021-01-03 21:42:50 · 110 阅读 · 0 评论 -
大话数据结构08:共享栈 C++
基础介绍共享栈就是一块内存分配给两个栈,两个栈从各自端点向中间生长,就是计算机基础中内存栈的实现吧代码#include "stdio.h" #define OK 1#define ERROR 0#define TRUE 1#define FALSE 0#define MAXSIZE 20 /* 存储空间初始分配量 */typedef int Status;typedef int SElemType; /* SElemType类型根据实际情况而定,这里假设为int *///两原创 2021-01-01 21:36:51 · 120 阅读 · 0 评论 -
大话数据结构07 :链表栈
基础介绍用链表结构作为栈的支撑结构代码#include "stdio.h" #define OK 1#define ERROR 0#define TRUE 1#define FALSE 0#define MAXSIZE 20 /* 存储空间初始分配量 */typedef int Status;typedef int SElemType; /* SElemType类型根据实际情况而定,这里假设为int *///链栈结构typedef struct StackNode{原创 2021-01-01 20:43:13 · 87 阅读 · 1 评论 -
大话数据结构 06:栈 顺序存储结构
基础内容栈的基础操作:顺序栈代码#include "stdio.h" #define OK 1#define ERROR 0#define TRUE 1#define FALSE 0#define MAXSIZE 20 /* 存储空间初始分配量 */typedef int Status;typedef int SElemType; /* SElemType类型根据实际情况而定,这里假设为int *///顺序栈结构typedef struct{ SElemType原创 2020-12-30 20:05:16 · 66 阅读 · 0 评论 -
大话数据结构05: 双向链表
基础要义双向链表的节点结构双向链表的插入要先把插入位置的后继节点重新绑定,否则容易丢失后继节点双向链表的删除同样是先绑定后继节点C++代码#include "stdio.h" #define OK 1#define ERROR 0#define TRUE 1#define FALSE 0#define MAXSIZE 20 /* 存储空间初始分配量 */typedef int Status;/* Status是函数的类型,其值是函数结果状态代码,如OK等 */t原创 2020-12-25 21:30:21 · 132 阅读 · 0 评论 -
大话数据结构04:循环链表
1、头指针法#include "stdio.h" #define OK 1#define ERROR 0#define TRUE 1#define FALSE 0#define MAXSIZE 20 /* 存储空间初始分配量 */typedef int Status;/* Status是函数的类型,其值是函数结果状态代码,如OK等 */typedef int ElemType;/* ElemType类型根据实际情况而定,这里假设为int */Status visit(Ele原创 2020-12-24 22:05:37 · 106 阅读 · 0 评论 -
大话数据结构03:静态链表
假设没有指针,如何利用数组来模拟链表结构。#include "stdio.h" #define OK 1#define ERROR 1#define TRUE 1#define FALSE 0#define MASIZE 1000 //存储空间最大分配量typedef int status;typedef char ElemType;status visit(ElemType c){ printf("%c", c); return OK;}// 线性表的存储结构原创 2020-12-24 19:56:41 · 103 阅读 · 2 评论 -
大话数据结构 01 :顺序线性表
1、完整代码#include "stdio.h"#define OK 1#define ERROR 0 #define TRUE 1#define FALSE 0#define MAXSIZE 20 //存储空间分配量 typedef int Status;typedef int ElemType;//打印出所访问的字符Status visit(ElemType c){ printf("%d ", c); return OK;}typedef struct{ E原创 2020-12-22 21:45:57 · 56 阅读 · 0 评论 -
大话数据结构02 :线性表链式存储 C++
1、链表插入和删除等操作关键是要找到插入元素的前一个元素Status ListInsert(LinkList L, int i, ElemType e){ LinkList N = new Node(); N->data = e; int j = 1; LinkList p = L; while ((j < i )&&(p)) { p = p->next; j++; }原创 2020-12-22 21:44:08 · 115 阅读 · 0 评论