图片资源压缩指南
图片资源压缩指南在p站等图片网站下载的原图作为网站背景文件太大,动辄十几mb,加载很慢 先本地图片编辑,将图片尺寸缩小(一般1080p~2k大小作为背景就很够用了),实现第一步减小体积 使用图片压缩网站或者软件进行进一步压缩,这里有两个网站 压缩图片分为有损压缩和无损压缩。无损压缩推荐Tinypng,有损压缩推荐imagine。 TinyPNG Imagine 特点 无损压缩 有损压缩,以牺牲图像质量, 降低图像色彩来达到缩减图像大小的目的。 优点 能够完全保留图像色彩,不损伤图像质量 1. 压缩程度高,支持转png为jpg或webp,进一步减少图片大小 2. 软件支持一次处理多张图片,无上限,处理完成支持直接批量覆盖原文件或重命名 缺点 单次仅能上传20张图片,每张限制大小为5MB,无法处理更大图片。 PNG转其他格式为不可逆操作(指覆盖保存后),且可能反而会增加图片大小。 个人比较推荐无损压缩的网站
网址不支持某些字符
网址不支持一些特殊字符,比如+ &等 如果在分类或者标签中添加了这类字符,在网址中是无法显示字符的,只会显示可以显示的字符 比如有一个标签是C,一个标签是C++,网址无法识别++,会把++略去,点击C++的时候打开的路径就变成了C的 但只是网址不支持,不涉及网址的地方是没问题的
数据结构_二叉树(C++
数据结构_二叉树(C++实现 1前言:此类笔记仅用于个人复习,内容主要在于记录和体现个人理解,详细还请结合bite课件、录播、板书和代码。 [toc] 前言 本篇中的是一般二叉树(包括线索树、表达式树)是通过链式结构实现的,关于顺序结构的实现请见C语言版(顺便有堆的相关内容) 本篇中哈夫曼树的结点存储是用的是顺序结构 模版不支持分离编译,因此跟以往自定义变量和函数时,声明在头文件、实现在源文件不同,定义(声明+实现)都是在头文件中【详见code日记】 二叉树采用链式存储 二叉树类的声明:123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114#pragma once//模版 ...
数据结构_KMP算法
数据结构_KMP算法 前言:此类笔记仅用于个人复习,内容主要在于记录和体现个人理解 [toc] 应用场景 有两条字符串,一条长,一条短,现在要求检查长的字符串,看看里面是不是包含短的字符串,如果包含,就返回短串的首元素在长串中的位置。如果没有的话,就返回-1。长串称为“主串”,短串称为“模式串”,简称“模式”。(不知道为啥这么叫,感觉有点抽象 为了解决这个问题,就诞生出了一种算法:BF算法(暴力算法) 指针i指向主串,j指向模式串 从主串的第一个元素、模式的第一个元素开始遍历,比较,如果相等,i、j后移,看后面的元素是否也都一样。如果在一个地方遇到了i、j指向的元素不同的情况,就称为“失配”,说明从主串第一个元素、模式第一个元素开始的话两个字符串没办法匹配 那么就让i起始位置变成主串的第二个元素,j起始位置指回模式的第一个元素(称为“回溯”),进行第二次遍历,看能否匹配上模式串。 直到,找到能完全匹配的情况下i的起始位置,或者,i的起始位置的剩余长度小于模式的长度(此时肯定没法匹配了,因为长度都不够了) 例如下面👇 在此处,失配了,所以要进行回溯,i的初始位置变成第 ...
数据结构_队列(C++
数据结构_队列(C++实现 前言:此类笔记仅用于个人复习,内容主要在于记录和体现个人理解,详细还请结合bite课件、录播、板书和代码。 [toc] 前言 没什么好说的 也就是 队列一般用链表实现比较常用,下面实现的也是链式栈 ==注意下面类的提前声明和友元类的作用== ==assert果然还是太暴力了,能不用就不用吧,但是一定要记住要判断 指针 为空的情况== ==可以抛出异常信号 (建议用这个,因为运行错误的时候知道原因== ==可以直接返回== 判断指针head为空的方式 123456789if(!head) // if(!head)等价于if(head==NULL),head==NULL是head为空时等式成立,值为真 // head为空的话head就相当于0(假),非空就是真,所以当head为空的时候,!head就是真 throw nullPointer();//这里使用了抛出异常信号的方式,而且抛出的 ...
数据结构_顺序栈(C++
数据结构_顺序栈(C++实现 前言:此类笔记仅用于个人复习,内容主要在于记录和体现个人理解,详细还请结合bite课件、录播、板书和代码。 [toc] 前言没什么好说的 栈的实现可以用顺序结构(数组)实现—–数组栈,也可以用链式结构(链表)实现—–链式栈 。两者除了在结构上不同,还有一点不同就是数组栈是栈底在前面(首结点),栈顶在后面(尾结点),通过尾插尾删入栈出栈,链式栈是栈顶在前面,栈底在后面,通过头插头删入栈出栈,与数组栈方向相反。 最常用也可以说最好用的大概是数组栈 ==assert果然还是太暴力了,能不用就不用吧,但是一定要记住要判断 指针 为空的情况== ==可以抛出异常信号 (建议用这个,因为运行错误的时候知道原因== ==可以直接返回== 判断指针head为空的方式 123456789if(!head) // if(!head)等价于if(head==NULL),head==NULL是head为空时等式成立,值为真 // head为空 ...
数据结构_单链表(C++
数据结构_SinglyLinkedList单链表(C++实现 前言:此类笔记仅用于个人复习,内容主要在于记录和体现个人理解,详细还请结合bite课件、录播、板书和代码。 [toc] 前言&注意事项 单链表C++的实现分为了结点类和链表类两个类,十分明了,可读性很高,也很容易写,节点类负责单个节点的操作,链表负责链表整体的操作 ==assert果然还是太暴力了,能不用就不用吧,但是一定要记住要判断 表指针 为空的情况== ==可以抛出异常信号 (建议用这个,因为运行错误的时候知道原因== ==可以直接返回== 判断指针head为空的方式 123456789if(!head) // if(!head)等价于if(head==NULL),head==NULL是head为空时等式成立,值为真 // head为空的话head就相当于0(假),非空就是真,所以当head为空的时候,!head就是真 throw nullPointer();//这里使用了抛出 ...
数据结构_栈应用_中缀式转后缀式并计算
中缀式转后缀式并计算(图文解释 前言:此类笔记仅用于个人复习,内容主要在于记录和体现个人理解,详细还请结合bite课件、录播、板书和代码。 [toc] 前言:用到的头文件1234567#include<iostream>#include<vector>#include<stack>#include<string>#include<sstream>//stringstream类需要包含的头文件,这个类的作用是将元素全是数字字符string类转换成字面上等价的int类using namespace std; 1.输入一个中缀式$$5*3(12-1++)/5$$ 计算结果就是17(一会儿可以用来验证程序结果是否正确 输入的这个中缀式的数据是由字符组成的,中缀式本身就是一个string类型 如果用字符的话,单个的数字或者符号,比如其中的 ‘5’、’*’、’3’、’(‘ 等轻易就会识别出来 但是“12”和“++”就会被识别成’1’、’2’、和’+’、’+’ 所以需要将中缀式进行转化,变成能识别多个字符的格式 2.将 ...
数据结构_线性表应用_多项式的计算
数据结构_线性表的应用-多项式的计算 前言:此类笔记仅用于个人复习,内容主要在于记录和体现个人理解,详细还请结合bite课件、录播、板书和代码。 [toc] 一元多项式(polynomial)的加法数学表示方法 一元多项式通常按幂升序排列,在数学上表示为: pn(x) =p0 + p1x + p2x^2^ + p3x^3^ + p4x^4^ + p5x^5^ +…. + pnx^n^ 计算机内实现 在计算机内实现的话,可以使用线性表来存储,每个结点内存储两个成员:data数据、next指针,data数据包括单项式的系数和次数 且是按照次数的升序来进行存储的 《《此处应有图片,参考课本图2-18 数据的存放方法 如果不论次数是否为0都将数据存储进结点,那么有可能会造成空间的大量浪费,比如1 + x^100^ 如果只存储次数不为0的单项式,不会造成空间的浪费,但是考虑到两个多项式相加,次数相同的多项式需要合并在一起,这种存储方式可能需要花费一些时间来寻找两个多项式里的相同次数的单项式 数据结构的选择 不用多说必须使用动态内存,静态内存会造成空间不够或者空间浪费的情况 ...
数据结构_树、二叉树、森林的转换
[toc] 树 转 二叉树 加线。在所有兄弟结点之间加一条连线 抹线。对树中的每个结点,只保留与第一个孩子之间连线,删除与其他孩子的连线 整理。适当旋转一下,使之结构分明 森林 转 二叉树 把每棵树转换成二叉树 从第一棵二叉树开始,把后一棵二叉树作为前一棵二叉树根结点的右子树 二叉树 转 树就是树 转 二叉树 的逆过程 作为根结点的每个结点,与左孩子的右孩子以及这个右孩子的右孩子、右孩子的右孩子……建立连线 删除原来所有父结点与右孩子的连线 整理 图:见 树 转 二叉树 的dcba顺序 二叉树 转 森林 删除原来所有父结点与右孩子结点的连线,得到分离的二叉树 将分离的每棵二叉树转化为树
数据结构_线性表应用_稀疏矩阵
数据结构_线性表应用 _稀疏矩阵[toc] 什么是稀疏矩阵 如果一个矩阵中,0的数量远大于非0的数量(0超过一半以上),这个矩阵就是稀疏矩阵 由于全部都是重复的0,这种无用的重复值的存储会占据很多空间,造成浪费 如何简化系数矩阵的表示 只需要存储非零的数据以及它在矩阵中的位置就可以 比如一个二维矩阵,就可以用一个三元组进行表示,(行,列,数据) 12345struct triple{ int row,col; int data;} 然后以三元组为基本元素,用顺序表或者链表就可以表示出稀疏矩阵了 十字链表表示法 由于用顺序表或者一般的链表,在表示稀疏矩阵的时候,不便于进行计算的操作 这里采用十字链表来表示 十字链表包括 数据域(data)、同列的下一个结点(down)、同行的下一个结点(right) 用来表示稀疏矩阵的时候,data就是三元组 如果同列/行中没有了下一个(非零)结点,那down/right就指向NULL 画个图表示一下 结束That’s all, thanks for reading!💐
数据结构_顺序表(C++
数据结构_SeqList顺序表(C++实现 前言:此类笔记仅用于个人复习,内容主要在于记录和体现个人理解,详细还请结合bite课件、录播、板书和代码。 [toc] 前言&注意事项 有些函数没有修改成员数据的要求,防止成员函数被修改,将只有读取要求的函数设为常函数(只读函数 用 C++实现,有很多优势,其中一个就是对象可以直接访问并修改数据成员,不用再想要修改的时候再传地址什么的 ==assert果然还是太暴力了,能不用就不用吧,但是一定要记住要判断 表指针 为空的情况== ==可以抛出异常信号 (建议用这个,因为运行错误的时候知道原因== ==可以直接返回== 判断指针head为空的方式 123456789if(!head) // if(!head)等价于if(head==NULL),head==NULL是head为空时等式成立,值为真 // head为空的话head就相当于0(假),非空就是真,所以当head为空的时候,!head就是真 t ...
数据结构_栈和队列_作业
2022.10.10智慧树作业_栈和队列[toc] 第一题相同点: 在逻辑上都是线性结构,栈和队列本质就是特殊的线性表,都可以用链表或者顺序表进行存储 不同点: 栈、队列具有特定的性质,特定的运算规则 第二题1 2 3 4 5、1 2 3 5 4、1 2 4 3 5、1 2 4 5 3、1 2 5 4 3、1 3 2 4 5、1 3 2 5 4、1 3 4 2 5、1 3 4 5 2、1 3 5 4 2、1 4 3 2 5、1 4 3 5 2、1 4 5 3 2、1 5 4 3 2、2 1 3 4 5、2 1 3 5 4、2 1 4 3 5、2 1 4 5 3、2 1 5 4 3、2 3 1 4 5、2 3 1 5 4、2 3 4 1 5、2 3 4 5 1、2 3 5 4 1、2 4 3 1 5、2 4 3 5 1、2 4 5 3 1、2 5 4 3 1、3 2 1 4 5、3 2 1 5 4、3 2 4 1 5、3 2 4 5 1、3 2 5 4 1、3 4 2 1 5、3 4 2 5 1、3 4 5 2 1、3 5 4 2 1、4 3 2 1 5、4 3 2 5 1、4 3 5 ...




