自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(93)
  • 收藏
  • 关注

原创 verilog入门——Quartus二选一数据选择器实现及测试

创建工程添加verilog文件编写源文件、TestBench测试文件并保存修改设置注意file name的名字必须和testbench中module名称相同,否则会load error*检查配置综合查看波形文本形式仿真结果波形图形式仿真结果...

2022-04-02 23:49:16 3985 1

原创 Linux包管理(软件安装)初步

2022-02-27 12:00:26 318

原创 gcc、gdb

2022-02-27 10:47:14 280

原创 string类题目

字符串中的第一个唯一字符字符串相加class Solution {public: int AddItem(int a, int b, int& sign) { int sum = a + b + sign;//对应位相加时把进位算上 if (sum >= 10) { sum -= 10; sign = 1;//发生进位则标为1 } else//对应位相加没有进位则把sign复位 { sign = 0; } return sum;

2022-02-26 15:46:18 244

原创 C++STL简介

文章目录什么是STLSTL的版本STL六大组件什么是STLSTL(standard template libaray-标准模板库):是C++标准库的重要组成部分,不仅是一个可复用的组件库,而且是一个包罗数据结构与算法的软件框架。STL的版本原始版本Alexander Stepanov、Meng Lee 在惠普实验室完成的原始版本,本着开源精神,他们声明允许任何人任意运用、拷贝、修改、传播、商业使用这些代码,无需付费。唯一的条件就是也需要向原始版本一样做开源使用。HP 版本–所有STL实现版

2022-02-26 13:16:13 48

原创 vim基本操作

2022-02-25 22:52:58 188

原创 Matlab基本操作与矩阵输入

文章目录Matlab视窗Matlab作为计算器使用对数和指数运算嵌套函数变量VariablesMatlab中的一些预置的变量和常量:Matlab的调用优先级删除variables的方法数据显示格式Matlab视窗我这里用的是汉化版的Matlab。Matlab作为计算器使用比如operators: + - * / ^运算的结果会保存到变量ans中运算规则从左至右按照运算符的优先级运算运算符优先级Parenthesis ()Power (^)Multiplication and di

2022-02-24 17:54:06 10661

原创 Linux权限

文章目录Shell命令Linux权限的概念Linux中的文件类型Shell命令从技术角度,Shell的最简单定义:命令行解释器(command Interpreter)主要包含:将使用者的命令翻译给核心(kernel)处理。同时,将核心的处理结果翻译给使用者。shell是所有命令行解释器的统称,而Centos用的命令行解释器是bash(也就是说bash属于shell)命令ps axj可以显示当前系统中的所有进程进程太多看不到表头,可用指令ps axj | head -n 1(从

2022-02-23 18:48:06 513

原创 Linux基本指令

文章目录ls指令pwd命令cd指令touch指令nano文本编辑器whoamils指令语法: ls [选项][目录或文件]功能:对于目录,该命令列出该目录下的所有子目录与文件。对于文件,将列出文件名以及其他信息。常用选项:-a 列出目录下的所有文件,包括以 . 开头的隐含文件。-l 列出文件的详细信息。指令也可以组合pwd命令语法: pwd功能:显示用户当前所在的目录常用选项:无cd指令语法:cd 目录名功能:改变工作目录。将当前工作目录改变到指定的目录下。举例:

2022-02-23 15:41:25 1201

原创 Linux环境搭建以及用户创建

Linux的环境搭建方式主要有3种直接安装在物理机上. 但是由于 Linux 桌面使用起来非常不友好, 不推荐.使用虚拟机软件, 将 Linux 搭建在虚拟机上. 但是由于当前的虚拟机软件(如 VMWare 之类的)存在一些 bug , 会导致环境上出现各种莫名其妙的问题, 比较折腾.使用云服务器, 可以直接在 腾讯云, 阿里云或华为云 等服务器厂商处直接购买一个云服务器.这里主要介绍最简单的通过买云服务器来使用Linux操作系统。...

2022-02-20 20:01:20 637

转载 Linux中useradd和adduser的区别

useradd与adduser都是创建新的用户CentOs在CentOs下useradd与adduser是没有区别的都是在创建用户,在home下自动创建目录,没有设置密码,需要使用passwd命令修改密码。UbuntuUbuntu下useradd与adduser有所不同useradd在使用该命令创建用户是不会在/home下自动创建与用户名同名的用户目录,而且不会自动选择shell版本,也没有设置密码,那么这个用户是不能登录的,需要使用passwd命令修改密码。adduser在使用该命令创建用户是

2022-02-20 19:44:43 195

原创 C++模板初阶

文章目录泛型编程函数模板函数模板的原理函数模板的实例化模板参数的匹配原则类模板类模板的定义格式类模板的实例化泛型编程以要实现一个通用的交换函数为例,因为相比于C语言,C++支持函数重载,可以用函数重载实现。void Swap(int& left, int& right){ int temp = left; left = right; right = temp;}void Swap(double& left, double& right){ double

2022-02-20 17:20:49 55

原创 C++内存管理

文章目录C/C++内存分布C语言动态内存管理C++动态内存管理new和delete的用法面向过程和面向对象语言处理异常(先知道异常这个概念)的行为operator new与operator delete函数operator new与operator delete的类专属重载(了解)new和delete的底层实现定位new表达式(placement-new)(了解)总结一下malloc/free和new和delete的区别内存泄漏C/C++内存分布以一段代码为例32位系统内存只有4G注:计算方法3

2022-02-20 15:54:52 610

原创 C++类和对象

文章目录面向过程和面向对象类的引入C中结构体和C++中类的对比类的定义方法类的访问限定符和封装类和对象的区别(实例化)类的大小的计算this指针进一步理解成员函数是如何调用的类的6个默认成员函数构造函数默认构造函数析构函数拷贝构造赋值运算符重载运算符重载面向过程和面向对象面向过程:关注的是问题解决的过程,通过函数调用逐步解决问题。面向对象:关注的是问题中涉及的对象,将一件事拆分出不同的对象,靠对象之间的交互解决问题。类的引入C中结构体和C++中类的对比在C++里面定义类,可以用struct,

2022-02-15 14:32:53 479

原创 C++入门补充

auto最初C语言中auto的用法是:定义变量的时候前面加auto表示这个变量是自 动变量,自动变量在进入作用域的时候被创建,出了作用域就销毁。但是这个语法没有意义。C++11废弃了这个用法。在C++11中,auto可以自动推导变量的类型。例如int main(){ int a = 0; auto b = a;//则b的类型是int return 0;}注:可以用typeid(变量名).name()打印变量的类型。使用auto的注意事项使用auto定义变量时必须对其进

2022-02-14 12:22:53 431

原创 C++笔记——关键字、名称空间、输入输出、函数重载、引用、内联函数

文章目录C++关键字命名空间域作用限定符`::`变量、函数、类型的定义都可以放在命名空间里面。注意结构体怎么指定名称空间命名空间可以嵌套多个同名的命名空间会被合并命名空间的使用C++输入输出流输出(流插入)符号和流提取符号cout/cin相比printf/scanf最大特点是自动识别类型缺省参数全缺省半缺省使用场景函数重载类型不同参数个数不同参数顺序不同函数重载需要注意的问题函数重载原理核心就是C++引入了函数名修饰规则。引用引用需要注意的问题引用的应用常引用常引用的一个例子关于右值和左值指针和引用的区别内

2021-12-07 15:07:27 246

原创 数据结构:八大排序——直接插入、希尔、选择、堆、冒泡、快速、归并、计数排序

文章目录常见排序及分类直接插入排序希尔排序常见排序及分类这里暂时先只总结直接插入排序希尔排序选择排序堆排序冒泡排序快速排序二路归并排序计数排序直接插入排序动图演示:分析:直接插入最坏为O(N^2)最好可以达到O(N)void InserSort(int* a, int n){ for(int i = 0; i < n - 1; ++i) { int end = i; int x = a[end+1]; while(end >= 0 )

2021-11-27 19:10:45 5931 11

原创 数据结构:顺序存储的二叉树,堆及堆的两个应用,堆排序和TopK问题

文章目录二叉树的顺序存储堆的概念堆的实现堆结构定义堆初始化堆的销毁堆的插入堆中元素个数堆的判空堆的删除以及取堆顶元素堆的构建堆的应用TopK问题堆排序二叉树的顺序存储顺序结构存储就是使用数组来存储,一般使用数组只适合表示完全二叉树,因为不是完全二叉树会有空间的浪费,所以现实中使用中只有堆才会使用数组来存储。二叉树顺序存储在物理上是一个数组,在逻辑上是一颗二叉树。图示:堆的概念堆就是一种特殊的完全二叉树,特点是节点的值有如下关系:父亲大于等于孩子——大堆父亲小于等于孩子——小堆堆一般都用数

2021-11-21 15:27:02 911 1

原创 数据结构:树的概念介绍及几种表示方法,以及二叉树介绍和二叉树的性质

文章目录树的概念树的表示方法(代码实现结构定义)二叉树概念满二叉树完全二叉树二叉树的一些性质树的概念有别于之前学的顺序表、链表、栈、队列等线性结构,树是一种非线性结构。树是由n(n>=0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。树有一个特殊的结点,称为根结点,根节点没有前驱结点;除根节点外,其余结点被分成M(M>0)个互不相交的集合T1、T2、……、Tm,其中每一个集合Ti(1<= i <= m)又是一

2021-11-21 10:04:10 625

原创 数据结构:二叉树的链式结构及对链式二叉树的一些基本操作

文章目录二叉树的实现之链式结构二叉树的节点个数二叉树叶子节点的个数二叉树第K层节点的个数二叉树的深度/高度二叉树查找值为x的节点判断二叉树是否是完全二叉树二叉树销毁二叉树的遍历前序遍历、中序遍历、后序遍历、层序遍历、广度优先遍历、深度优先遍历本文总结课上讲到的链式二叉树的一些基本操作,具体有计算二叉树的结点的个数计算二叉树叶子节点的个数计算二叉树第K层结点的个数计算二叉树的深度/高度查找并返回值为x的结点判断二叉树是否是完全二叉树二叉树的销毁二叉树的前、中、后序遍历二叉树的层序遍历

2021-11-20 19:58:42 1069

原创 LeetCode题解|101.对称二叉树

题目描述及链接对称二叉树题解只要根节点不为NULL,那么问题就转换为了根节点的左右子树是否对称,和判断两个树是否相等是一样的思路,只是这里需要把一棵树的左子树和另一棵树的右子树比较。由于处理第一种情况和处理后面的情况不一样,不能直接原函数递归,所以写了子函数来比较对称位置是否相等。/** * Definition for a binary tree node. * struct TreeNode { * int val; * struct TreeNode *left;

2021-11-20 19:35:35 143

原创 LeetCode题解|572.另一棵树的子树

题目描述及链接另一棵树的子树题解核心思路:把原树的每个子树都和subtree比一下(直到遇到相等的)是否相等。还有一个重要的点是:比到什么时候停止?由于subtree不为空,所以当比到子树为空时,就返回false。/** * Definition for a binary tree node. * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right;

2021-11-20 19:20:25 70

原创 LeetCode题解|110.平衡二叉树

题目描述及链接平衡二叉树题解首先判断当前结点是否满足平衡二叉树条件,满足再看其左右子树,不满足直接return false。注意要考虑到必题目例子更复杂的情况,比如而不要从题目的例子得到只要根节点左右子树深度相差不大于1就是平衡二叉树的错误结论。/** * Definition for a binary tree node. * struct TreeNode { * int val; * struct TreeNode *left; * struct T

2021-11-20 18:23:19 193

原创 牛客KY11——二叉树的构建和遍历

题目描述及遍历二叉树的构建和遍历题解本题是IO型OJ题,需要自己设计函数。从需求上看,要构建二叉树,所以要先写二叉树结构定义;构建二叉树的功能可以写成一个函数;中序遍历再写成一个函数;在main函数接收数据。思路:输入字符串的顺序是前序遍历的结果,那么构建二叉树的过程就是二叉树前序遍历的逆过程。把题目给的例子写成二叉树就是如下形式二叉树结构struct TreeNode{ struct TreeNode* left; struct TreeNode* right

2021-11-20 18:07:14 857 1

原创 LeetCode题解|100.相同的树

题目描述及链接相同的树题解拆解成子问题就是看当前结点是否两个都是空,都是就返回true,一方面处理空树,另一方面处理空子树;再看是否一个为空一个不为空,若一个为空另一个不为空,则结构不同,直接返回false;如果当前结点都不为空且相等,则分别比较左子树是否相等、右子树是否相等,结果取两者的并。/** * Definition for a binary tree node. * struct TreeNode { * int val; * struct TreeNode

2021-11-20 17:12:50 173

原创 LeetCode题解|144、94、145.二叉树的前中后序遍历

题目描述及链接二叉树的前序遍历二叉树的中序遍历二叉树的后序遍历题解前序遍历:遇到空结点直接返回,否则先访问该节点,再依次访问左孩子和右孩子。中序遍历:遇到空结点直接返回,否则先访问左孩子,再访问该节点,最后访问右孩子。后序遍历:遇到空结点直接返回,否则先依次访问左右孩子,再访问该节点。这里题目要求把访问结果放在数组中,所以这里先计算二叉树的节点个数来开辟数组。/** * Definition for a binary tree node. * struct TreeNode {

2021-11-20 17:00:34 337

原创 LeetCode题解|226.翻转二叉树

题目描述及链接翻转二叉树题解注意翻转是要求把结点翻转,而不是把结点的值翻转。思想:观察可发现,只要把每个子树的左右孩子交换位置,就可以实现将整棵树翻转。空树(空子树)不需要翻转,直接return。/** * Definition for a binary tree node. * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * }; */

2021-11-20 16:47:40 90

原创 LeetCode题解|104.二叉树的最大深度

题目描述及链接二叉树的最大深度题解二叉树的深度都是用递归计算,可以用返回值,也可以用参数带回。这里写返回值的方法。思想:二叉树深度=左子树深度与右子树深度较大者+1/** * Definition for a binary tree node. * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * }; */int maxDepth(s

2021-11-20 16:36:08 194

原创 LeetCode题解|965.单值二叉树

题目描述及链接单值二叉树题解由于非单值二叉树的情况远多余单值二叉树的情况,所以主要从对立事件出发,一旦满足非单值二叉树的条件直接返回false。核心思路:从根节点出发,看每个子树的根节点的值与其两个孩子(若果存在的话)的值是否相等,不相等直接返回false。利用相等的传递性,若每个子树的根节点都和左右节点相等,则这个二叉树是单值二叉树。需要注意的是,返回值并不是直接返回最外层,无论是true还是false都会逐层向上返回。单值二叉树每次返回都必须是true。/** * Definiti

2021-11-20 16:26:27 62

原创 数据结构线性表——栈和队列

文章目录栈的概念栈的实现栈的概念栈是一种特殊的线性表,只允许在固定的一段进行插入删除操作。进行数据插入删除的一端叫做栈顶,另一端叫做栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。出栈:栈的删除操作叫做出栈。出数据也在栈顶。栈的实现可以使用数组或者链表实现,相对而言数组的结构实现更优一些。因为数组在尾上插入数据的代价比较小。...

2021-11-09 15:00:16 124

原创 LeetCode题解|225.用队列实现栈

题目描述及链接用队列实现栈题解用C语言写本题需要先自己实现队列,这里我直接拷贝课堂上实现队列的代码typedef int QDataType;typedef struct QueueNode{ struct QueueNode* next; QDataType data;}QueueNode;typedef struct Queue{ QueueNode* head; QueueNode* tail;}Queue;void QueueInit(Queue* pq);v

2021-11-09 11:52:12 62

原创 LeetCode题解|232.用栈实现队列

题目描述及链接用栈实现队列题解用C语言实现本题需要先自己实现栈,这里我直接拷贝课堂上实现栈的代码typedef int STDataType;typedef struct Stack{ STDataType* a; int top; int capacity;}ST;void StackInit(ST* ps);void StackDestroy(ST* ps);void StackPush(ST* ps, STDataType x);void StackPop(ST* ps

2021-11-09 10:45:35 378

原创 LeetCode题解|622.设计循环队列

题目描述及链接设计循环队列题解本题可以用数组实现,也可以用链表实现。这里使用数组(动态数组)实现。先定义结构typedef struct { int* a; int front; int tail; int k;} MyCircularQueue;a表示表示动态数组,front指向队列第一个元素,tail指向队列最后一个元素,k表示队列可用长度。接下来初始化队列初试时,应该使用malloc开辟一个MyCircularQueue结构体,并给这个结构体中的

2021-11-09 10:14:29 153

原创 数据结构顺序表——双向带头循环链表

文章目录双向循环链表结构定义创建链表并初始化开辟新节点打印双向链表双向链表尾插双向链表尾删双向链表头插双向链表头删双向链表查找在pos前一个位置插入删除pos节点销毁链表复用ListInsert实现头插尾插复用LsitErase实现头删尾删总结双向带头循环链表结构如图双向循环链表结构定义typedef int LTDataType;typedef struct ListNode{ LTDataType data; struct ListNode* prev; struct ListNode

2021-11-05 20:34:05 133

原创 数据结构顺序表——单向无头链表

文章目录链表概念单链表结构定义申请节点单链表打印单链表尾插单链表头插单链表尾删单链表头删单链表查找在pos后一个位置插入一个节点在pos前面一个位置插入一个节点删除pos节点删除pos后一个节点销毁链表总结链表概念概念:链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的 。链表也是顺序表的一种。主要和数组顺序表对比。链表有单向、双向;带头、不带头;循环、不循环几种,可以有8种组合:实际中最常用的两种结构是单向无头链表和双向带头循环链表这两种结构

2021-11-05 18:24:50 176

原创 数据结构线性表——顺序表

文章目录线性表概念顺序表概念顺序表初始化顺序表打印顺序表销毁顺序表增容顺序表尾插顺序表尾删顺序表头插顺序表头删顺序表元素查找顺序表指定位置插入(中间位置插入)顺序表指定位置删除(中间位置删除)复用SeqLsitInsert实现头插尾插复用SeqLsitErase实现头删尾删总结线性表概念定义:线性表(linear list)是n个具有相同特性的数据元素的有限序列。 线性表在逻辑上是线性结构。但是在物理结构上并不一定是连续的,线性表在物理上存储时,通常以数组和链式结构的形式存储。常见的线性表:顺序表、链

2021-11-05 16:18:28 107

原创 LeetCode题解|142.环形链表2——找到环形链表环的入口

题目描述及链接环形链表2——找到环形链表环的入口思路1从思路1的角度看,这题的本质是一道几何题。这里同样采用快指针一次两步,慢指针一次一步来判断是否有环。关键是证明从快慢指针相遇点开始每次走1步,和从链表起始位置开始走,每次走1步,则两个指针会相遇。证明:于是可写出如下代码思路1代码思路2在相遇点处,剪断相遇结点与下一个结点的链接,那么这题就转换成了前面写过的链表相交问题。代码如下思路2代码总结本质上看,这题同样是快慢指针妙用。以上两种方法让我们进一步了解环形链表的特

2021-10-26 18:04:05 124

原创 LeetCode题解|141.环形链表1——判断链表是否有环。快慢指针!

题目描述及链接环形链表1——判断链表是否有环解题思路环形链表不存在NULL作为结束如果不存在环,则遍历链表会遇到NULL;但是在遇到NULL之前我们并不知道是否存在NULL,因此无法通过遍历来确定是否有环,这时本题的难点。我们可以采用快慢指针,如果有环,则快指针会追上慢指针;如果没有环,则快指针会遇到NULL(快指针是跳跃地前进的,因此也要判断快指针跳过的是不是NULL)我们这里让快指针一次走两步,慢指针一次走一步,不难写出代码。代码证明在有环的情况下,为什么快指针一定能和慢指针相

2021-10-26 17:21:32 102

原创 LeetCode题解|160.相交链表

题目描述及链接相交链表解题思路思路1:穷举依次取链表A的结点,用它与链表B的每一个结点比较,如果相等,则说明两个链表相交,同时说明这个第一次相等的结点就是相交结点。最坏情况是两个链表不相交,此时时间复杂度O(n^2)。思路2:两个链表相交的长度不可能大于短的链表的长度。由此想到先算出两链表的长度,再同时遍历比较每个结点于是写出如下代码:再次基础上我们又意识到:两个单链表相交等价于它们的尾结点相同。通过用tailA、tailB分别遍历A、B链表,拿到尾结点并比较便可直到是否相交;同

2021-10-26 16:32:41 138

原创 牛客OR36.链表的回文结构

题目描述及链接链表的回文结构解题思路把链表分成两段,并且后半段逆置。再用curA和curB同时遍历这两段链表,若出现不相等的结点则不是回文链表;若是回文结构,则通过画图分析可知,当有奇数个结点时,curA和curB会同时到达NULL;当有偶数个结点时(必须取靠右的作为mid),curB到达NULL时就是回文结构。图示完整代码关于逆置链表和找中间节点的函数,请复习前面的文章。总结本题的难点在于想到把链表从中间分成两段并同时遍历比较。具体写代码的过程再完善对于奇数个结点、偶数

2021-10-26 15:30:54 180

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除