
算法与数据结构
文章平均质量分 65
斯内科
这个作者很懒,什么都没留下…
展开
-
C#快速排序QuickSort将递归算法修改为堆栈Stack非递归方式
实现方法:我们可以发现:对于递归Recursive代码更新为堆栈Stack循环代码,仅需三个步骤即可实现:①将所有参数封装为元组Tuple或者一个自定义类如递归方法void QuickSortRecursive(int[] arr, int left, int right)就定义一个元组 Tuple<int[], int, int> 作为整体元素[参数集合]传递②定义一个泛型Stack,每个元素都是一个元组③将原来的使用递归方法调用自身的使用修改为推入堆栈中[Push]原创 2025-02-10 16:15:21 · 361 阅读 · 0 评论 -
C#树图显示目录下所有文件以及文件大小(使用Stack元组来替换递归)
C#树图显示目录下所有文件以及文件大小(使用Stack元组来替换递归)思路:我们注意到递归段 BindTreeView(treeNode.Nodes, directories[i]); 两个递归参数(TreeNodeCollection nodes, string directoryPath) 都需要传入新的递归参数因此,将递归更新为Stack时,两个参数需要同时传递(即成对传递),我们可以使用元组Tuple来同时传递.原创 2025-02-10 13:47:24 · 353 阅读 · 0 评论 -
C#中深度解析BinaryFormatter序列化生成的二进制文件
如果将二进制文件读取出来,然后篡改指定的字节码,生成新的二进制文件,然后重新读取,结果就会发现数据被篡改了.很多单机游戏的存档文件修改就是这么干的.这也是不提倡使用BinaryFormatter类进行序列化的原因,可能被劫持篡改二进制文件,因此在最新的net 5.0中会被标记为不安全的和过时的原因。原创 2025-02-08 17:36:56 · 497 阅读 · 0 评论 -
C#中结构struct能否继承于一个类class,类class能否继承于一个struct
一般来说,当数据类型较小且需要频繁创建并传递时,例如表示坐标或颜色等简单的值类型,使用结构体更加合适,因为它们可以被分配在栈上,速度更快,且不需要垃圾回收。不能,因为在我现有的知识中理解的话,因为结构体是值类型而类是引用类型,所以类的资源是在堆上面的这样就可以达到我想象中的继承,因为它可以在堆上面存在,而不会像值类型那样随着程序运行结束终结,在C#设计中,所有的结构stuct都认为是一种轻量型的密封类,密封类sealed是无法被继承的。同样,类对象可以作为结构的成员变量,结构的示例也可以作为类的成员变量。原创 2024-05-29 11:41:18 · 1428 阅读 · 0 评论 -
C#中数组与列表,集合等的联系
C#中,所有数组都自动继承于System.Array这个抽象类,数组都为引用类型,所有对数组的更新都会导致源数组的元素值的篡改。而所有集合的根都来自可枚举接口IEnumerable数组有三种样式:数组的Rank(秩)属性代表数组的维数原创 2024-05-12 21:32:00 · 613 阅读 · 0 评论 -
C#中字典Dictionary与自定义类型CustomType之间的转换
C#中字典Dictionary与自定义类型CustomType之间的转换思路:可以使用反射System.Reflection来获取类的具体属性,属性名称就映射字典的键Key。新建控制台程序DictionaryCustomClassConversionDemo原创 2024-05-10 19:06:18 · 533 阅读 · 0 评论 -
C#实现坐标系转换
部分类文件FormCoordinateTrans.Designer.cs。新建关键的坐标转换类CoordinateTransHelper。已知坐标系的向量线段AB,旋转指定角度后平移到达坐标A'B'文件FormCoordinateTrans.cs。获取旋转角度以及新的其他坐标转换。新建坐标结构Coord。原创 2024-02-04 12:11:21 · 1857 阅读 · 0 评论 -
C#使用随机数模拟英雄联盟S13瑞士轮比赛
C#使用随机数模拟英雄联盟S13瑞士轮比赛,仿真窗体应用程序LOL_S13Demo。原创 2023-11-05 16:31:14 · 1373 阅读 · 1 评论 -
C#使用Linq和Loop计算集合的平均值、方差【标准差】
方差的算术平方根=s=sqrt(((x1-x)^2 +(x2-x)^2 +......(xn-x)^2)/n)总体标准差=σ=sqrt(((x1-x)^2 +(x2-x)^2 +......(xn-x)^2)/n )当所有数(个数为n)概率性地出现时(对应的n个概率数值和为1),则x为该组数的。数组的所有数分别减去平均值,得到的n个差值分别取平方,再将得到的所有。所有数(个数为n)记为一个数组[n]。则除以n,若所求为样本标准差则除以(n-1),最后把得到的商取。(n个数据)的标准差。原创 2023-07-19 13:54:15 · 3164 阅读 · 0 评论 -
C#通用的二进制转化为float和double方法
float(Real、Single) 32位 第一位为1代表负数,第一位为0代表正数或者0第二位到第九位代表 指数位,对应的值减去127就是移位数【shiftCount】第十位开始】尾数23位前面加一个1,凑够24位,这个24位尾数的前【shiftCount+1】个数就是整数部分,剩下的就是小数部分double(LReal、Double) 64位 第一位为1代表负数,第一位为0代表正数或者0第二位到第十二位代表 指数位,对应的值减去1023就是移位数【shiftCount】第十三位开始】尾数52位前面加一原创 2023-05-22 15:17:54 · 4690 阅读 · 0 评论 -
C#中将32位二进制转换为float【Real】十进制类型
二进制32位转换为float【Real】规则第一位为1代表负数,第一位为0代表正数或者0第二位到第九位代表 指数位,对应的值减去127就是移位数【shiftCount】【第十位开始】尾数23位前面加一个1,凑够24位,这个24位尾数的前【shiftCount+1】个数就是整数部分,剩下的就是小数部分整数二进制转为10进制:从低位到高位分别是2的0次幂、1次幂、2次幂……,分别相乘再相加,得到的和即为10进制结果。小数部分的二进制转换位10进制:与整数部分类似,从小数点开始分别是2的-1次幂、原创 2023-05-17 17:49:51 · 3514 阅读 · 0 评论 -
C#使用Spire.OCR框架识别图片中的字母,数字,文字等
OCR文字识别是指电子设备(例如扫描仪或数码相机)检查纸上打印的字符,然后用字符识别方法将形状翻译成计算机文字的过程;即,对文本资料进行扫描,然后对图像文件进行分析处理,获取文字及版面信息的过程。衡量一个OCR系统性能好坏的主要指标有:拒识率、误识率、识别速度、用户界面的友好性,产品的稳定性,易用性及可行性等。注意托管Spire.OCR.dll需要自动引用如上六个框架包,因此Spire.OCR.dll和六个框架包必须在同一路径下。选择目标平台为X64。原创 2023-01-18 17:41:25 · 14070 阅读 · 16 评论 -
C#使用迷宫地图来模拟新冠疫情的传播速度(一)
按钮Init绑定Click事件btnInit_Click,按钮Spread绑定Click事件btnSpread_Click。一个感染源 可以传播附近相邻的8个网格【类似于扫雷】,假如每个感染源一天只能感染相邻的8个网格。初始所有单元格都是绿色的,初始当前红色的单元格可以感染8个最近的单元格【九宫格】,为窗体绑定Paint事件FormNovelVirusSpread_Paint,国家开始发布疫情放开政策,本人于2022-12-21开始感染并发高烧。,问:一个感染源多久可以感染所有N*M网格。原创 2023-01-04 14:56:37 · 469 阅读 · 2 评论 -
C#使用随机数模拟器来模拟世界杯排名(二)
接上一篇:C#使用随机数模拟器来模拟世界杯排名(一)我们使用洗牌随机数算法来匹配世界杯对战国家:新建洗牌随机数相关类RandomUtil用于随机世界杯参赛国家的列表索引并分配:洗牌算法的时间复杂度是 O(N)原创 2022-12-13 21:43:24 · 1208 阅读 · 0 评论 -
C#中的整数的二进制原码、反码、补码
计算机采用二进制补码【Complement】的格式来表示十进制整数,无论正整数、0、负整数都是采用二进制补码的方式来存储数据。基本概念原码: 一个正数,按照其本身大小转换成的二进制数,称为原码 一个负数,按照其绝对值大小转换成的二进制数,最高位补1,称为原码反码: 正数的反码与原码相同 负数的反码为对该数的原码除符号位【最高位】外各位取反(0变1,1变0,符号位为1不变)补码: 正数的补码与原码相同 负数的补码为对该数的原码除符号位外各位取反,然原创 2022-11-01 15:11:40 · 5572 阅读 · 1 评论 -
判断两个相同引用类型的对象的属性值是否相等,增加对List,Dictionary的支持
之前看到 有递归遍历的,发现 对 List,Dictionary会出现【个数不一致的】异常。这里增加对列表,字典的支持 与解析新建控制台应用程序CompareObjectDemo,选择.NET4.6.1使用反射来进行处理.新建关键类ComparePropertyUtil.cs原创 2022-10-21 19:43:34 · 287 阅读 · 1 评论 -
权重图的最短路径算法【使用元组】
权重图的最短路径算法【使用元组】①InitGraph() 初始化图的顶点,边,以及最短距离默认为无穷大②GetRouterPath()设置第一个顶点A到其他顶点的距离是直连的 ~如果当前顶点A到其他顶点的距离小于Infinity,就以当前距离作为初始最小的距离 ~找出未访问的顶点中,距离最小的顶点的顶点,然后标记顶点为已访问的 ~如果当前节点未访问,并且 最短距离+【最短距离的顶点可到达的顶点的距离之和】,那么就设置当前路径为最小距离 需要一个双重循环原创 2022-09-27 20:51:55 · 879 阅读 · 1 评论 -
C#计算设备已运行时间,返回D天H时M分S秒,使用普通与递归两种方式
已知设备已运行时间【比如:时间间隔12345678秒】,计算出已运行dd天HH时mm分ss秒新建C#窗体应用程序CalculateTimespanDemo,输入一个时间间隔,计算出耗时原创 2022-09-20 12:08:31 · 680 阅读 · 0 评论 -
C#数字黑洞之一(水仙花数黑洞153)
水仙花数黑洞水仙花数黑洞也叫作153数字黑洞。任意找一个3的倍数的数(n>=3),先把这个数的每一个数位上的数字都立方,再相加,得到一个新数,然后把这个新数的每一个数位上的数字再立方、求和,......,重复运算下去,就能得到一个固定的数——153,我们称它为数字“黑洞”。...原创 2022-05-11 22:10:42 · 3297 阅读 · 0 评论 -
C#使用GDI绘制EightDiagram
GDI绘图:阳爻:实线,由三个连续的宽度为40,高度为20的小矩形组成 阴爻:虚线,由两个宽度为40,高度为20的小矩形 与 中间的宽度和高度都为0的小矩形组成原创 2022-05-11 08:42:14 · 685 阅读 · 0 评论 -
C#自恋数字黑洞—水仙花数、玫瑰花数、五角星数
自恋数当一个n位数的所有数位上数字的n次方和等于这个数本身,这个数就叫自恋数。显然1,2,3,...,9是自恋数。【比如6的一次方仍然是6】,自恋性数字也是数字黑洞的一种。水仙花数三位数中的自恋数,三位数的所有数位上数字的三次方之和等于这个数本身三位数中的自恋数有四个:153,370,371和407(这四个数被称为“水仙花数”)。比如371=3的三次方+7的三次方+1的三次方玫瑰花数四位数中的自恋数,四位数的所有数位上数字的四次方之和等于这个数本身四位的“玫瑰花数”原创 2022-05-11 01:27:44 · 4667 阅读 · 0 评论 -
C#数字黑洞之一(西绪福斯黑洞:123数字黑洞)
西绪福斯黑洞(123数字黑洞)数学中的123就跟英语中的ABC一样平凡和简单。然而,按以下运算顺序,就可以观察到这个最简单的数字。黑洞的值:设定一个任意数字串,数出这个数中的偶数个数,奇数个数,及这个数中所包含的所有位数的总数,例如:1234567890,1.偶:数出该数数字中的偶数个数,在本例中为2,4,6,8,0,总共有 5 个。2.奇:数出该数数字中的奇数个数,在本例中为1,3,5,7,9,总共有 5 个。3.总:数出该数数字的总个数,本例中为 10 个。4.新数:将答原创 2022-05-04 16:34:57 · 1956 阅读 · 0 评论 -
C#数字黑洞之一(卡普雷卡尔黑洞:重排求差黑洞)
数字黑洞数字黑洞,又称指的是某种运算,这种运算一般限定从某些整数出发,反复迭代后结果必然落入一个点或若干点的情况叫数字黑洞。黑洞原是天文学中的概念,表示这样一种天体:它的引力场是如此之强,就连光也不能逃脱出来。黑洞数又称陷阱数,类具有奇特转换特性,任何数字不全相同的整数,经有限重排求差操作,总会得某或些数,这些数即黑洞数重排求差操作即把组成该数数字重排得大数减去重排得小数。卡普雷卡尔黑洞(重排求差黑洞)1.三位数黑洞495:只要你输入一个三位数,要求个,十,百位数字不相同,如不允许输原创 2022-05-04 13:05:39 · 6360 阅读 · 0 评论 -
C#将数字自动翻译为中文,使用循环迭代的方式
这次我们使用循环迭代的方式。思路(除基取余迭代法):以数字4567为例,首先除以1000,获取商为4,以及余数567,拼接 四千,此时处理余数567,除以100,获取商为5,余数为67,拼接 五百,此时处理余数67,除以10,获取商为6,余数为7,拼接 六十,此时处理余数7,直接加上个位 七即可。原创 2022-03-25 16:29:14 · 771 阅读 · 0 评论 -
C#将数字自动翻译为中文
C#将数字自动翻译为中文,比如数字1234 , 翻译为 一千二百三十四数字56789 , 翻译为 五万六千七百八十九原创 2022-03-24 11:35:15 · 2592 阅读 · 4 评论 -
C#使用递归和堆栈计算含有小括号,加减乘除的表达式(2)
这次我们使用栈Stack<T>的方式:思路:1.生成数字和运算符列表:根据运算符的优先级,依次添加到堆栈中,生成的列表不存在左右小括号,只有数字 以及 加减乘除运算符。2.解析列表:计算数字与运算符列表,如果遇到数字时,就进入栈中。如果遇到任何一个运算符时,就使用该运算符计算前两个数字【连续出栈两个数字】,然后将结果放入栈中,直到栈没有任何运算符就终止。此时栈只有一个数字,就是最终结果原创 2022-03-21 15:16:41 · 700 阅读 · 0 评论 -
C#使用递归和堆栈计算含有小括号,加减乘除的表达式(1)
C#使用递归和堆栈计算含有小括号,加减乘除的表达式。实现思路:1.查找小括号,然后依次消去所有的小括号,此时表达式没有小括号2.进行乘除运算3.最后进行加减运算原创 2022-03-18 17:01:21 · 803 阅读 · 0 评论 -
C#使用System.IO.Compression.GZipStream压缩和解压缩文件
新建类GZipStreamUtil,源程序如下:using System;using System.Collections.Generic;using System.IO;using System.IO.Compression;using System.Linq;using System.Text;using System.Threading.Tasks;namespace SiemensPlcDemo{ /// <summary> /// 压缩与解压缩操原创 2022-03-14 10:21:54 · 2257 阅读 · 0 评论 -
C#的几种位操作运算,与、或、非、异或、左移、右移
C#的几种位操作运算,与&、或|、异或^、补码~、左移<<、右移>>原创 2022-03-05 17:34:27 · 16121 阅读 · 0 评论 -
C#几种集合列表List,链表LinkedList,集HashSet,队列Queue,栈Stack,字典Dictionary的区别与说明
C#几种集合列表List,链表LinkedList,集HashSet,队列Queue,栈Stack,字典Dictionary的区别与说明原创 2022-01-09 10:10:52 · 3027 阅读 · 0 评论 -
火车票站点、订票、C#多人抢票模拟器【多线程】
多人抢火车票模拟器,多线程原创 2021-12-26 21:18:35 · 2882 阅读 · 0 评论 -
C#根据Base64规则自己编写相应的Base64加密和解密函数
上一篇我们已经使用C#函数Convert.ToBase64String()和Convert.FromBase64String()来加密和解密Base64,这里我们使用字典Dictionary<byte,char>来实现Base64加密和解密。Base64介绍以及加密解密新建控制台程序Base64ConsoleDemo...原创 2021-12-11 21:20:07 · 1214 阅读 · 0 评论 -
C#二维数组【图、矩阵】与【稀疏矩阵】相互转化
Java算法与数据结构——稀疏数组_简明编程的博客-优快云博客稀疏数组稀疏数组就是数组中大部分的内容值都未被使用(为零为null或相同值),在数组中仅有少部分的空间使用。因此造成内存空间的浪费,为了节省内存空间,并且不影响数组中原有的内容值,我们可以采用一种压缩的方式来表示稀疏数组的内容。应用场景大量冗余的相同数据存储方法稀疏数组第一行存放二维数组的行数和列数以及非零值的个数第二行开始 存放各个值所对应的坐标【行索引、列索引】和值的大小...原创 2021-11-15 22:43:50 · 1253 阅读 · 0 评论 -
C#关于代码行数与程序运行性能的关系
C#中,代码行越多,程序执行性能就越差吗?在项目开发中,我曾经遇到一个 补焊选择焊接点选中的逻辑,假设有500个焊接,使用 16的uint(DWORD)来标记焊接点 是否被选中。for (int i = 0; i < GlobalUtil.PoleCount; i++) { if (i < 32 * 1 && (reweldSelectedArray[0] & (1 << i原创 2021-11-03 22:16:18 · 935 阅读 · 0 评论 -
C#关于64位双精度浮点数Double(DReal)一步步按位Bit进行解析
有一篇我们是获取float如何转化为字节的过程,这次我们测试doubleC#关于32位浮点数Float(Real)一步步按位Bit进行解析原创 2021-11-01 22:20:05 · 4536 阅读 · 0 评论 -
完全平方数的几种判定方法与算法用时
如果一个正整数 a 是某一个整数 b 的平方,那么这个正整数 a 叫做完全平方数。零也可称为完全平方数。完全平方数的性质如下:1、平方数的个位数字只能是 0, 1,4,5,6,9 。2、任何偶数的平方一定能被 4 整除;任何奇数的平方被 4(或 8)除余 1,即被4 除余 2 或 3 的数一定不是完全平方数。3、完全平方数的个位数字是奇数时,其十位上的数字必为偶数。完全平方数的个位数字是 6 时,其十位数字必为奇数。4、凡个位数字是 5 但末两位数字不是 25 的自然数不是完全平方数;末尾原创 2021-09-30 17:17:17 · 14644 阅读 · 0 评论 -
C#对于非数字double.NaN的神奇现象,无穷大的处理以及整数除以0
double xx; Console.WriteLine(double.TryParse("非数字", out xx)); Console.WriteLine(xx); Console.WriteLine(double.TryParse("非数字123", out xx)); Console.WriteLine(xx); Console.WriteLine(double.TryParse(...原创 2021-09-30 16:15:47 · 4977 阅读 · 0 评论 -
C#泛型集合的交集、并集、去重、差集等操作
List<int> A = new List<int> { 2, 3, 4, 5, 6, 7, 8 }; List<int> B = new List<int> { 1, 3, 5, 7, 9, 11 }; Console.WriteLine($"交集:{string.Join(",", A.Intersect(B))}"); Console.WriteLine($"并集有重复:{stri...原创 2021-09-23 19:48:23 · 3328 阅读 · 0 评论 -
科拉茨猜想,统计最终变成1所运算的次数,以及数列是否有重复
https://baijiahao.baidu.com/s?id=1710291588934292399&wfr=spider&for=pc任意挑选一个正整数。如果它是一个奇数,那么就乘以3再加1。如果它是一个偶数,那么就除以2。对得到的新数字做同样的事,一直这样做。如果你在某一时刻得出了数字1,那么就停止。我知道这可能不是世界上最有趣的游戏,但请你多玩一会儿。我向你保证,这将是很有趣。例如,如果我们从7开始,我们会得到下面的数列(从现在开始,我们称它为科拉茨序列)。7, 2原创 2021-09-10 22:04:45 · 4576 阅读 · 0 评论 -
几种判断整数是偶数(Even)的算法对比
一个数能被2整除,这个数就是偶数,如果不能被2整除【余数为1】,这个数就是奇数列举出几种判断某数是否偶数的方式 以及执行10000万次,计算其算法用时。第一种:取余 即 num%2==0第二种,库函数 Math.IsOdd(num)第三种,位运算符& 即(num&1)==0第四种,异或运算符^ 即 (num^1) == num+1^也是将数字转换成二进制运算,只要两者不同才为1,否则为0(运算规则:0^0=0;0^1=1;1^0=1;1^1=0;),01...原创 2021-09-03 00:20:28 · 3096 阅读 · 0 评论