数据结构
DashingPig
菜鸟学生
展开
-
LeetCode_树专题
这里不限定你的序列 / 反序列化算法执行逻辑,你只需要保证一个二叉树可以被序列化为一个字符串并且将这个字符串反序列化为原始的树结构。序列化是将一个数据结构或者对象转换为连续的比特位的操作,进而可以将转换后的数据存储在一个文件或者内存中,同时也可以通过网络传输到另一个计算机环境,采取相反方式重构得到原数据。(2)序列化时:按层序添加结点的数值到字符串res中,如果是空,则添加“n ”输入:root = [1,2,3,null,null,4,5]输出:[1,2,3,null,null,4,5]原创 2023-05-18 21:49:52 · 112 阅读 · 0 评论 -
LeetCode_栈专题
接雨水一.题目二.思路三.代码一.题目给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。示例 1:输入:height = [0,1,0,2,1,0,1,3,2,1,2,1]输出:6解释:上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。示例 2:输入:height = [4,2,0,3,2,5]输出:9提示:n == height.length1原创 2022-01-15 23:14:30 · 4145 阅读 · 0 评论 -
51单片机实现浮点数四则运算计算器(C语言的偏软硬件实现)
题外话:由于没有学习过状态图,这次实现使用的是一种记录有效的上次输入的状态。如今记录此篇,等到将来学习了相关知识,再回来对比我的思想。(似乎状态图的容错性更高)一.要求:支持标点符号[0-9], [±*/], [(], [)], [~], [.], [=] (其中~为负号);二.设计思想:(以下只是大致框架,具体实现后,发现存在一些错误,下面并未记录细节)初始 [0-9] [+ - * /] [(] [)] [~] [.] [=] 共19个符号,8个状态0 1 2原创 2022-01-06 15:52:13 · 6263 阅读 · 0 评论 -
DS_图知识点汇总(持续补充)
(说明:为了整理方便,图片为王道考研视频的截图,如果算作侵权,会立即删除)三.拓扑排序1.有向无环图(描述含公共子式的表达式)2.AOV网3.AOE网(关键路径)原创 2021-11-14 23:22:29 · 469 阅读 · 0 评论 -
kmp__记录一个未知原因的循环异常跳出错误
重写kmp_plus,发现有个kmp_index函数里while循环异常跳出,没有达到结束条件,居然神奇的跳出了循环,原因暂时不明,记录。测试用例,主串为hehelahello,字串为hello修改之前#include<iostream>#include<string>using namespace std;int kmp_index(string s, string t);void get_next(string t, int next[]);const int原创 2021-04-02 13:35:28 · 147 阅读 · 0 评论 -
基础训练__剪格子(搜索)(C++)[二维数组传参问题]
二维数组传参和一维差不多,格式为f(b)和void f(b[][N]);注意,在任何函数中修改b的值,都是修改了实参的值;类比树的遍历,易知本题需要使用图的DFS搜索;注意,树的分层结构决定了下一个遍历是必定未访问过的,但图却不同,需要建立一个新的映射数组,判断是否访问过;注意,为了防止映射数组被修改,必须要在每个函数里新建一个judge数组,用映射数组赋值给judge数组,传参的时候,传judge数组。题目我们沿着图中的星号线剪开,得到两个部分,每个部分的数字和都是60。本题的要求就是请你编原创 2021-03-27 14:22:02 · 120 阅读 · 0 评论 -
DS_快速排序_original(C++) 【快排基本实现+自带qsort的使用】
快排的原理暂时不写,随便上网都能查到,本身也不复杂。(理解是一回事,想出来又是一回事,向大佬致敬)先吐槽“一”句。理解快速的概念时,自以为原理很简单,随便看了两眼然后开始编程,进入死循环,通过注释发现问题在quick_sort()的函数里,然后一行一行对照着快速排序的概念看。调了两个小时,总是觉得,没问题呀,这么简单的东西,就几行代码的东西,越来越急躁,越调试越看不出问题。然后死马当做活马医,把这里的"==“改成了”>=",然后通过了。总而言之,我就是菜,还急(没考虑到该排序的各种情况,从而判原创 2021-03-19 02:43:26 · 250 阅读 · 0 评论 -
DS_字符串匹配KMP算法(个人版vs教科书版)C++实现
串的模式匹配(Pattern Matching)有一主串s1,一待匹配串t1。现在将s1的子串和t1匹配,若找到,则输出location;若没找到,则输出-1然后,在模式匹配中(n是s1长度,m是t1长度)(1)朴素算法就是笨方法,像我这种笨蛋想到的第一种解决方式就是它,逐一比较,复杂度是n*m;(2)有一种神奇的算法叫KMP,使得匹配速度加快(特别是n远远大于m时),降低了时间复杂度和s1长度的相关性(瞎说的,直觉是这样),因为本算法会吸取教训,让子串的匹配不重头开始逐一比较,而是退回到一定位置。原创 2021-02-06 21:56:15 · 370 阅读 · 0 评论 -
DS_存储 稀疏矩阵 的十字链表(C++实现)
关于稀疏矩阵,就是值为0的元素数量很多的矩阵。如果把0元素位置看成空白,非零看成黑点,稀疏矩阵就像是一张照片,广阔的天空中只有远方的几只鸟。我也不知道这么理解对不对,瞎猜的。至于矩阵的应用,书上说计算机图形学,工程技术中会用到,但现在我没整过具体的东西,所以就关于稀疏矩阵有啥用,以后碰到了再补上。那么现在如何存储稀疏矩阵呢?怎样才能做到存的空间小,修改起来方便,使用的时候能快速呢。目前我只知道两种书上提到的方法:1.三元组线性表2.十字链表OrthogonalList现在,就十字链表,使用C++实原创 2021-02-04 15:39:52 · 589 阅读 · 0 评论 -
DS_共享堆栈C++实现
//堆栈就像个水桶//现在咱们把两个水桶嘴对嘴//和一个水桶的时候相比,两个水桶都装满的判断条件是两个top指针相邻//还是因为懒,不说具体的了// DS_ShareStack.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include<iostream>using namespace std;template<class T>class ShareStack{public: ShareStack(int max0原创 2021-01-25 22:10:16 · 142 阅读 · 0 评论 -
DS_多链表C++实现
//这是多链表,叫stack是因为写代码的时候脑子有点抽。//先是定义一个节点类LinkStackNode;//然后定义一个数组类MultiLinkStack;//数组的每个节点,相当于链表的头结点;//另外,代码写的不太严谨,y的值没有去判断是否异常。说白了就是懒。// MultiLinkStack.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include<iostream>using namespace std;templat原创 2021-01-25 22:04:12 · 231 阅读 · 0 评论 -
DS_双向链表C++实现
//如题所示// DS_DoublyLinkedList.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include<iostream>using namespace std;template<class T>class DBLNode{public: T data; DBLNode<T> *prior, *next;};template<class T>class DBLinkList原创 2021-01-25 21:52:58 · 259 阅读 · 1 评论 -
DS_C++汉诺塔实现
//经典汉诺塔,没啥好说的//递归问题的充分必要条件:1.原问题可以逐层分解成规模更小的问题2.小问题和大问题的性质相同3.问题规模小到一定程度,有个临界值,可以直接看出答案// DS_Recursion_Hanoi.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include<iostream>using namespace std;void hanoi(int n, char a, char b, char c);int ma原创 2021-01-25 21:48:02 · 128 阅读 · 0 评论 -
DS_汉诺塔非递归C++实现
//因为递归的调用浪费了许多空间,所以我们处理递归问题的时候,很容易想到整一个plus版,只保留必要的信息,而省略函数返回地址,函数参数之类的东西。或者干脆不使用递归,通过找到规律,用其他方法实现。//现在,处理汉诺塔问题时,发现时间复杂度很高,2的n次方级别,以及空间很浪费,储存了函数返回地址和函数参数之类的。当然,目前本菜鸟不知道怎么降低时间复杂度,现在只知道把汉诺塔的递归转换成栈。(其实本质没变,时间复杂度不变,只是节省了一丢丢空间)//今天懒,细节先不说了。大概要注意一下入栈和出栈顺序是反着的。原创 2021-01-25 21:35:48 · 183 阅读 · 0 评论