- 博客(45)
- 收藏
- 关注
原创 稀疏矩阵【快速转置法】【详解-C语言】
什么是稀疏矩阵?它没有确切的定义,一般是指矩阵中存储非零元素相对整个矩阵存储的总元素来说很少的矩阵称为稀疏矩阵,这个多少怎么看呢?计算矩阵的稀疏因子...
2024-10-20 13:04:44
2438
原创 力扣【48-旋转图像】【数组-C语言】
矩阵顺时针旋转90°就是矩阵的第一行变为倒数第一列,第二行变为倒数第二列,第三列变为倒数…(仅看行),相当于平时拿手机时竖着看,现要看电影手机则横着放。再看下对应的数字位置的变化情况,我们把矩阵中的每个元素所在的行列看作在平面坐标系下的坐标。以示例2中矩阵第一个数字(5)为例,数字5会移动到数字11的位置上,11移动到数字16的位置上,15移动到5数字最初的位置,这就是顺时针旋转90°后,一个元素的位置变化(一个数字位置的变化会导致其他数字位置相应的变化,我把这些变化的位置串起来(路径)称为“一轮”)
2024-10-13 15:19:43
639
原创 力扣【2187-完成旅途的最少时间】【数组-C语言实现】
(1)各车一趟花费的时间(time[i])可能相同也可能不相同,若跑一趟时间花费最长的一辆车来完成全部任务(totalTrips),则花费时间最多(设置为T)(2)全部车辆从0时刻开始就出发,每走过一个时刻检测当前所有车辆是否已经完成一趟,并累计趟数,直到等于totalTrips,这时时间最少,但这种“顺序时间方向”来求最少时间,时间复杂度很高(3)在上面(2)的基础上逆向思考,已经知到完成任务最多花费时间T,而最少时间是1(当time中只有一辆车且花费时间是1,而totalTrips=1时),因此在1~
2024-10-08 08:24:35
527
原创 并查集【数据结构与算法】【C语言版-笔记】
如何选择并查集的存储结构?从树的形状出发,我们知道一棵树上的叶子必定属于同一棵树(额,这好像是废话),把树看作集合,叶子作为集合的元素。给定一片叶子,找到它对应的树干(或根)就可以确定叶子的归属。数据结构中树的常用存储结构有三种方式:【双亲表示法,孩子表示法,孩子兄弟表示法】我们选择双亲表示法,因为这种设计方法很适合找到根结点,从而很容易确定元素所属集合。对于合并集合,我们只需要修改其中一个集合的parent指向另一个集合的 “根” 即可。
2024-10-02 14:40:33
1319
原创 归并排序【C语言版-笔记】
归并是一种算法思想,是将两个或两个一上的有序表合并成一个长度较大的有序表。若一开始无序表中有n个元素,可以把n个元素看作n个有序表,把它们两两合并得到n/2个长度为2或1(n为奇数时)的有序表,继续重复两两合并的操作,直到剩下一个有序表,即得到最终排序的结构,这是“*二路归并排序*”,还有多路的归并。
2024-10-01 19:19:04
1016
原创 堆【数据结构C语言版】【 详解】
已知一个混乱序列(10,8,6,9,7,5),和一个空堆H,然后遍历序列,每遍历一个序列往空堆添加元素,既要考虑每个元素满足堆的性质,又要思考新添加的元素位置(放在$i$的位置还是$i+1$的位置),发现这种代码逻辑很难实现。由堆的性质和完全二叉树的性质类似,把已知的混乱序列逻辑上形象的看成一个完全二叉树。那么问题就转化为如何把一个”混乱“的完全二叉树转变为一棵小根堆对于的完全二叉树
2024-09-30 17:51:03
901
原创 力扣【598-区间加法】【数组-C语言】
给你一个 m x n 的矩阵 M 和一个操作数组 ops 。矩阵初始化时所有的单元格都为 0 。ops[i] = [ai, bi] 意味着当所有的 0
2024-09-28 21:34:25
483
原创 力扣【485-最大连续1的个数】【数组-C语言】
遇到连续的1就累加求和(sum),为也就是1的个数,遇到0时,用max先记录当前最小连续1的个数,然后置sum=0,重新开始累计,若给定二进制数组是以1为最后一个元素,则程序最后再次更新max
2024-09-27 14:00:00
226
原创 力扣【448-消失的数字】【数组-C语言】
每遍历一个元素t,就把nums[t-1]处的元素值加上n,直到for循环结束,使nums数组中存在[1...n]范围内的数字都大于n,第二个for循环遍历nums数组,把其中大于n的数字,加入数组result中。
2024-09-27 08:30:00
206
原创 力扣【414-第三大数】【数组-C语言】
可以遍历数组,并用三个变量 a、b 和 c 来维护数组中的最大值、次大值和第三大值,以模拟方法二中的插入和删除操作。
2024-09-26 12:40:05
255
原创 散列(Hash)表【数据结构】【C语言】
散列表与线性表和树表的查找不同,后者是通过在表中进行一系列的关键字与给定值进行比较,达到检索的目的,关键字与其所对应的元素在表中的位置不存在映射关系,因此查找效率取决与给定值与关键字的比较次数。**散列表**却与之不同,*散列表会根据关键字直接访问表中的数据,即关键字与其所在的元素在表中的位置存在映射关系*。例如通过身份证号(身份证号作为关键字)可以找到这个人的信息。其中这种映射关系(规则)*叫做散列函数(也称”哈希函数“),它可以由用户自己定义。
2024-09-26 09:00:00
467
原创 力扣【118-杨辉三角】【数组-C语言】
1.每行第一个数和最后一个数都是1,2.把杨辉三角左端对齐,从第三行开始,非首尾的元素值等于上一行同列的元素与该元素之前的元素之和,即t[j] = returnColumnSizes[i - 2][j - 1] + returnColumnSizes[i - 2][j]
2024-09-25 08:14:14
841
原创 力扣【283-移动零】【数组-C语言】
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。请注意 ,必须在不复制数组的情况下原地对数组进行操作
2024-09-25 00:24:06
396
原创 力扣【303-区域检索】【数组-C语言】
给定一个整数数组 nums,处理以下类型的多个查询:计算索引 left 和 right (包含 left 和 right)之间的 nums 元素的 和 ,其中 left
2024-09-24 23:34:06
337
原创 C语言_局部变量和全局变量_零碎知识【笔记】
在程序中某一变量经常被频繁使用,如在某函数中存在一个1000次的循环,每次循环都要引用局部变量,每次引用都要经过取指寻址过程,从而把数据从内存传输到cpu中,相当耗时,这时可以把改变量定义为寄存器变量,这样不需要再去内存中取数据,而是直接在cpu的寄存器里取即可,且寄存器存储数据速度远超于内存,因此更加高效。
2024-02-27 19:43:29
1632
原创 C语言_数组作为函数参数【笔记】
1.可以作为函数实际参数,不能作为形式参数2.实参传递到形参,单向传递3.用数组元素作为实参时,向形参(数组元素类型地形参)传递的是数组元素的值,而用数组名作为函数的实参时,向形参(数组名或者指针变量)传递的是数组首元素的地址4.数组作为函数形参时,其指定的数组大小是不起任何作用的,实际上在编译后数组形参会转化为指针变量来处理,用来接收地址,因此在形参是数组类型时,这个数组可以不用指定大小(可写可不写),直接在数组名后面跟个[ ] 空的方括号即可。
2024-02-27 17:33:13
572
原创 C语言【scanf函数细节问题 笔记】
2.对于"%d"格式输入数据时,连续输入的数据间要用空格来隔开,以使系统区分两个数值,上面之所以不隔开是因为输入的是字符,系统能区别两个字符且空格等也是有效字符,除非格式控制符中存在普通字符,这是就要对照格式输入相应的数据。3.在输入数值数据时,如果输入空格、回车、tab键或非法字符(不输入数值的字符)时,认为该数据输入结束。函数一般形式:scanf(格式控制字符串,地址序列)地址序列:把输入的数据依次放入到对于的地址的内存中去。格式控制字符串:用来控制以什么格式输入数据。
2024-02-26 17:27:04
580
原创 C语言【零碎基础知识】
基本数据类型(格式:类型 占内存大小 …)整形数据类型基本整形(int)2/4字节 一般在32或64位下是4字节短整型(short int) 2字节 注意 int 可以省略长整型(long int) 4字节 指定该类型的字面值时加l\L后缀 注意 int 可以省略,在vc++6.0中 long 与 int 都是占4字节双长整型(long long)8字节 注意 C99所增加的,很多编译器未实现字符类型(char)1字节布尔类型(bool) 1字节 注意 C99所
2024-02-25 22:35:27
358
1
原创 【C语言】C语言中的转义字符 【详解干货】
它是一种特殊的字符常量,就是以 \ 符号开头的符号序列,比如:'\t','\a' ...等,这里的 \ 符号可以把它理解为转义的意思,既把a转变为其它特殊意义,而这里的 '\a' 在C语言中的作用是发出一个警告的声音或者视觉信号,显然这里的 '\a' 与 'a' 的作用是完全不同的,a 被搭配 \ 符号后已经被转义,改变了意义。
2024-02-25 17:46:44
1799
原创 C语言程序设计之基础篇-1初识C语言
C语言初步认识 学习笔记 期末复习。C语言是一门通用计算机编程语言,广泛应用于底层开发。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言...
2024-02-25 15:51:24
955
原创 模板方法模式【设计模式-行为型模式】
在面向对象程序设计过程中,我们常面对这样一种情况:设计一个系统时知道了算法所需的关键步骤,而且确定了这些步骤的执行顺序,但某些步骤具体实现还未知,或者说某些步骤的实现与具体的环境有关,例如,去银行办理业务一般要经过以下4个流程:取号、排队、办理具体业务、对银行工作人员进行评分等,其中取号、排队和对银行工作人员进行评分的业务对每个客户是一样的,可以在父类中实现,但是办理具体业务却因人而异,它可能是存款、取款或者转账等,可以延迟到子类中实现。
2023-04-23 09:25:41
129
原创 享元模式【设计模式-结构型模式】
运用共享技术有效的支持大量细粒度对象的复用,通过共享已存在的对象大幅度减少对象的创建数量,避免大量相似的开销,从而提升系统资源的利用率。比如共享单车,在没有它之前,想要骑自行车就需要购买,可能骑一两天就不想骑了,这样浪费了资源也浪费钱,而共享单车的出现,你只需要租赁即可,骑行好后归,别人也可以使用,达到共享
2023-04-21 10:03:35
133
原创 组合模式【设计模式-结构型模式】
组合模式又叫部分整体模式,它是一种对象组合成树状层次结构的模式,使用户对单个对象和组合对象具有一致的访问性,即访问单个对象和组合对象对于用户来说没有区别。
2023-04-20 08:50:34
90
原创 装饰者模式【设计模式-结构型模式】
指在不改变原有对象的结构下,动态的给对象增加一些额外的功能的模式。比如快餐店吃东西案例:在店里可以吃炒饭、粉面。如果吃炒饭可以加配料(火腿、鸡蛋、白菜、饮料等),如果吃粉面也是可以以上的配料,不同的配料不同的价格,最后计算总共花销多少钱。
2023-04-19 11:26:50
69
原创 外观模式【设计模式-结构型模式】
外观模式是迪米特法则思想实现的经典模式之一,又名门面模式,是一种为多个复杂的子系统提供统一的接口,从而让使用这些子系统客户更加容易访问,该模式对外有一个统一的接口,外部人员不用关心内部子系统具体实现细节与用法,这样大大降低了使用子系统的复杂程度,提高可维护性。
2023-04-18 18:39:36
58
原创 桥接模式【设计模式-结构型模式】
将抽象与实现分离,使它们可以独立变。它是用组合关系代替继承关系来实现,从而降低了抽象类和实现这两个可变维度的耦合度
2023-04-17 11:26:47
78
原创 代理模式【设计模式-结构型模式】
由于某些原因需要给某对象提供一个代理以控制该对象的访问。这时访问对象不适合或者不能直接引用目标对象,代理对象作为访问对象和目标对象之间的中介。Java中的代理按照代理类生成时机不同分为静态代理和动态代理。静态代理是在编译时期就生成,而动态代理类则是在java运行时虚拟机内部自动生成。动态代理又有jdk代理和cglib代理两种
2023-04-16 21:09:50
60
原创 适配器模式【设计模式-结构型】
如果去欧洲国家去旅游的话,他们的插座如下图最左边,是欧洲标准。而我们使用的插头如下图最右边的。因此我们的笔记本电脑,手机在当地不能直接充电。所以就需要一个插座转换器,转换器第1面插入当地的插座,第2面供我们充电,这样使得我们的插头在当地能使用。生活中这样的例子很多,手机充电器(将220v转换为5v的电压),读卡器等,其实就是使用到了适配器模式。
2023-04-15 15:04:15
56
原创 工厂模式【创建型模式之一】
;在java中,万物皆对象,这些对象的创建我们常用new来实现,方式比较简单,但是这种方式创建对象会使代码的耦合度比较高,如果要修改代码,那么我们需要重新再把所有的对象再new一遍,这是相当麻烦的事情,且不符合软件设计的开闭原则。如果使用工厂来代替我们自己创建对象,我们只需要跟工厂打交道就可以了,彻底和对象解耦,该模式有如下几种。
2023-04-13 16:11:49
64
原创 设计模式-单例模式【七种创建方式】
这种设计模式涉及到一个单一的类,该类主要是用来创建单一的对象,同时提供给客户唯一的访问该对象的方式/方法,想要使用这个对象,直接访问该方法即可。静态内部类单例模式中实例由内部类创建,由于jvm在加载外部类的过程中,是不会加载内部类的,只有内部类的属性/方法被调用时才会别加载,并初始化其静态属性。只需要在构造方法里写判非空抛出异常的代码,即当通过反射活动构造器来创建实例时,每次都判断实例是否已经存在,存在就抛出异常不让它继续创建。1、饿汉式-方式1(静态变量的方式)6、懒汉式-方式4(静态内部类方式)
2023-04-12 14:10:05
594
原创 实现按ESC键改变屏幕颜色【改写int 9中断例程-8086汇编】
修改“int 9”号中断例程的功能,在DOS中按下ESC键后改变屏幕的显示颜色,其他的键照原有功能处理要解决的问题(1)改变屏幕的显示颜色:一个屏幕是由4000个字节组成,偶数对应的字节存放字符的ascll码,奇数对应的字节存放的字符的属性(该字节左边一个字节内容的属性),所有总共要修改2000个属性字节(2)原“int 9”中断例程入口地址保存在"0:200"处,共两个字,低字单元存放偏移地址,高字单元存放段地址,而“新int 9”中断例程的入口地址则替换"旧int 9"的入口地址。
2023-03-29 12:53:42
139
原创 汇编语言第4章学习笔记【汇编语言第三版-王爽】
如果用户要执行一个程序,则输入该程序的可执行文件名称并按下回车,command程序会根据所给的文件名称找到对应的可执行文件,然后将其载入到内存中,并设置CS:IP指向可执行文件所占用的那段内存(本质上是指向程序的入口地址)。连接过程产生的文件:可执行文件(XXX.exe)、映像文件(XXX.MAP)、库文件(XXX.LIB),库文件包含了一些可以调用的子程序,如果程序中调用了某一个库文件中的子程序,就需要在链接的时候,将这个库文件和我么的目标文件链接在一起,生成可执行文件。:(基于DOSBox编译环境)
2023-03-23 12:31:55
132
原创 汇编语言第3章学习笔记【8086汇编汇编语言第三版-王爽】
在内存中,存储字长是指一个存储单元的位数,而实际上内存单元一般用来存储8位(一个字节一个内存单元),所以一个存储字就是多个连续的内存单元组合成。因此,在8086的CPU中用两个连续的字节(16位)等同于一个字,这个字的低位字节存放在低地址单元中,高位字节存放在高地址单元中。要把一段内存当作栈来使用,就先要知道这段内存的段地址,这个段地址就是栈的段地址(栈段地址),用寄存器ss来存放。数据段就是把内存中一块连续不断的内存单元当作存储数据的地方,这就是定义了一个数据段,用ds寄存器存放数据段的段地址。
2023-03-22 16:25:22
274
原创 call指令和ret指令【笔记+详解】
call指令是一个流程转移指令,就是让程序执行的顺序发生短暂的改变,去执行别处地址上的指令,遇到ret指令后再回到原来的地方继续往下顺序执行,本质和jmp大同小异,区别是在jmp基础上增加了程序回到原来跳转处的功能......
2023-03-20 19:40:57
22569
1
原创 jmp指令【原理详解 8086汇编语言+笔记】
指令格式示例jmp 标号-段间转移(远转移):jmp far ptr 标号-段内短转移:jmp short 标号;8位的位移-段内近转移:jmp near ptr 标号;16位的位移jmp 寄存器-jmp bx;等价于段内近转移,也是16位的位移jmp 内存单元(用地址表示的)-jmp word ptr 内存单元地址;段内转移-jmp dword ptr 内存单元地址;段间转移。
2023-03-19 13:03:00
21042
1
原创 汇编语言学习笔记(理解)第2章【汇编语言第3版-王爽】
你可能会想数据放在内存就好了啊(理论上是可以,但其他的不说,cpu的工作速度远高于内存,如果数据放在内存,那cpu<-总线->主存之间相互传输数据就会存在严重速度差,严重影响cpu效率),而寄存器就是一个很好暂存数据/指令的器件。段定义后,并往相应的段放入适合的数据(数据段-主放数据,代码段-主放汇编指令,栈段-可以放数据或者其他),但是cpu并不会知道你定义的代码段(程序的入口)在哪里从哪开始/结束程序,它只认CS:IP指向的内存单元,因此把CS:IP指向我们定义的代码段的第一个单元的首地址是必要的。
2023-03-17 15:22:54
159
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人