数据结构与算法
文章平均质量分 68
刘建杰
像我这么优秀的人,
本该当个公务员。
怎么二十多年到头来,
还在招聘会沉沦。
像我这样迷茫的人,
像我这样牛马的人,
像我这样打工度年的人,
你还见过多少人。
展开
-
《王道》数据结构代码实现与笔记
陆续更新至2022年12月底。这篇Blog,简单的做个学王道数据结构的笔记,为了以后能快速回顾,笔记做得不好,见谅。文章目录一、线性表1.顺序表的顺序表示1.1顺序表-静态数组1.2顺序表-动态数组2.顺序表的链式表示2.1单链表-带头结点2.2单链表-不带头结点一、线性表1.顺序表的顺序表示1.1顺序表-静态数组静态分配,大小不可改变#include <stdio.h>#define MaxSize 10 // 定义最大长度 typedef struct { int原创 2022-03-21 12:30:36 · 6317 阅读 · 9 评论 -
C语言 迷宫求解 严蔚敏 数据结构 可视化界面-课程作业
题目数据结构课程,讲完栈,老师留下严蔚敏PPT上的作业,迷宫求解,如下:解题思路1)采用递归的深度优先搜索,从出发点搜索至结束点2)递归中自带“栈特性”,在进入当前递归函数相当于栈的push,退出当前递归函数相当于栈的pop,那么根据这个特性,实现搜索地图中返回上一个结点的功能。具体看代码,代码详细注释,花点时间仔细看看能懂得。如果不懂,网上搜搜深度优先搜索讲解视频。黑窗口运行效果和代码#include <iostream>#include <stack..原创 2022-03-29 19:00:00 · 2261 阅读 · 6 评论 -
线性表多项式求和-顺序存储
多项式求和规则建议百度我使用的是顺序存储的线性表,代码比链式存储相对简单许多,较易懂,建议直接看代码中的Add方法即可// 多项式相加#include <iostream>#define MAXSIZE 100using namespace std;typedef struct { double x;// 系数 int y;// 指数}P;typedef struct { P* elem; int length;}SqList;// 创建列表int Ini.原创 2022-03-04 22:22:35 · 1875 阅读 · 0 评论 -
Java堆排序超简代码
引入堆排序写起来是相对比较简单的排序排序方法有两种第一种:每次删除顶部的值存入数组中缺点:会造成额外的存储空间第二种:每次交换顶部与尾部元素,再对顶部进行下滤即可这里实现的是第二种方法代码public class WriteHeap { // 对一个数组建堆 public void buildMaxHeap(int arr[], int n){ // 只需要一半的数值(树形结构的倒数第二层)下滤即可 for(int i = n / 2 - 1; i >= 0; i--)原创 2020-10-28 17:20:59 · 188 阅读 · 0 评论 -
Java实现Kruskal最小生成树算法
引入随手笔记,以防忘记,写得不好,请见谅个人理解每次找出权值最小的边,得到两个端点通过并查集,判断这两个端点是否有同一个父亲,是否构成回路不是就合并在一起如此循环找下一条权值最小的边,直至循环m条边代码1.用领接表的实现package eight.one最小生成树;import java.util.Arrays;import java.util.Comparator;import java.util.Scanner;public class C1Krusal { stat原创 2020-10-19 17:13:45 · 408 阅读 · 0 评论 -
Java实现Prim最小生成树算法
引入随手笔记,以防忘记,写得不好,请见谅个人理解每次取出哪个点到已生成树的最短距离的点以该点进行扩散,访问它的邻接点若扩散点到新点的距离 < 新点到生成树的距离,更新新点到生成树的距离如此循环补充Prim算法和Dijkstra算法有些类似,不同的是Prim每次是取出未收入的点到已生成树的最短距离的点,以该点来扩散,得到该点的邻接点更新到已生成树的距离dist[j] = G[minp][j];新点到生成树距离=扩散点到新点的距离Dijkstra是取出源点到其它原创 2020-10-19 16:56:31 · 981 阅读 · 0 评论 -
Java用Dijkstra计算有权图单源点最短路径
引入随手笔记,做的不好见谅。DijKstra算法个人理解每次取出最短路径的顶点由该点进行扩散,遍历该点的邻接点得到新点若源点到该点+该点到新点<源点到新点,就更新源点到新点的值添加进该新点进队列下次由它扩散,如此循环代码1.用邻接矩阵表示的图import java.util.Scanner;public class DijkstraMatrixShoterPath { static int n;// 点数 static int e;// 边数 static int G[原创 2020-10-11 19:08:54 · 196 阅读 · 0 评论 -
Java有向无权图的单源点最短路径-邻接矩阵和邻接表
引入此文章是随手笔记,写的不好见谅。无权图的单源点最短路径我这用BFS实现主要的就是图的实现与BFS的搜索,其它没什么为了下一步的有向有权图单源点最短路径做基础代码1.用邻接矩阵表示图的import java.util.LinkedList;import java.util.Queue;import java.util.Scanner;public class MatrixShortestPath { static int n;// 点数 static int e;// 边数原创 2020-10-11 18:51:41 · 621 阅读 · 0 评论 -
Java实现AVL树详细注释解释代码
引入此文章记录我学习的笔记,写的不好见谅。AVL树是特殊的二叉搜索树,除了保持原有的二叉搜索树特性,还会一直保持搜索节点的时间复杂度为log(N)。与二叉搜索树的不同于:节点增加一个高度的变量来记录此时的高度。AVL树核心在于旋转,分为:左旋、右旋、左右旋、右左旋代码Java实现代码import java.util.Stack;public class AvlBinaryTree { /* 插入节点,3种情况 1.往左边插,计算后的高度若失衡,需要右旋或者左右旋转 2.往右边插,原创 2020-10-09 22:35:26 · 187 阅读 · 0 评论 -
Java实现二叉搜索树(增删功能)
说些废话二叉搜索树,左节点的值<当前节点的值<右节点的值二叉搜索树难在删除,我用Java递归实现删除代码,并且附上注释解释,做个笔记代码BinaryTreeClass .javaimport java.util.Stack;public class BinaryTreeClass { // 中序遍历,用来验证是否删除成功 public void midorder(TreeNode curnode){ Stack<TreeNode> stack = new Sta原创 2020-10-07 23:57:31 · 115 阅读 · 0 评论 -
Java二叉树递推遍历
说些废话学习二叉树离不开访问遍历它,最简单的方法是递归遍历来实现,递归实现简单,但递推偏复杂些。以下的递推代码是从MOOC上浙江大学的数据结构学习的,可以点开链接系统学习https://www.icourse163.org/course/ZJU-93001?tid=1459700443不过它是用C++写的,我这用Java简单实现下并加上些注释希望能帮助到一些人更容易理解。Java代码DisPlayBinaryTree.javaimport java.util.LinkedList;imp原创 2020-10-07 11:37:50 · 216 阅读 · 0 评论 -
Java简洁代码实现归并排序算法
起初在LeetCode看到的很简洁的归并排序算法,感觉很厉害,保存起来日后翻阅。代码/*2020年9月29日LeetCode上看到的比较简单的归并排序1.组件一个新数组,用空间换时间2.两个指针,线性扫描这个数组,来对比,放入新数组中排好序。3.再将新数组中的值放回数组注意指针的细节问题就可以只需一个数组。补充归并排序的思想一个数组,定义中间点,一分为二,直至小于两个数新一个小数组,也有两个部分,这两个部分两个指针,线性扫描,对比,小的先放入头部就行。*/pub..原创 2020-10-05 14:17:32 · 310 阅读 · 0 评论 -
Java用数组简单实现堆
随手笔记,写的不好见谅个人理解堆当前节点的值都小于(大于)它的左右节点堆可以实现优先队列,因为根节点的值,取根节点即可堆若是数组实现,具有完全二叉树的性质.当前节点的左节点为下标为i2+1,右节点下标为i2+2.当前节点(不管左右节点)的父节点的下标为(i - 1)/2图Java实现堆public class MinHeap { int[] heapArray; int CurrentSize;// 当前大小,指的是虚值 int MaxSize;// 最大大小 publi原创 2020-10-03 16:21:42 · 851 阅读 · 0 评论