- 博客(50)
- 收藏
- 关注
原创 最近点对问题(算法与数据结构设计)
递的部分完成后开始归,从左右子部分当中取最小的min,并在点集Y中直接取属于(X[mid]-min,X[mid]+min)的点存放到点集Y_中,并把属于(X[mid]-min,X[mid])的左子部分做标记flag=0,把属于(X[mid+1],X[mid]+min)的右子部分做标记flag=1。其中任一点pi=(xi,yi),编写程序求出最近的两个点。Point_X结构体,用于表示点集,n用来存放点集中点的数量,dis_min用来存放求得的最近点对的距离,p数组用于存放所有点的x轴和y轴坐标。
2024-07-08 21:48:07 467
原创 顾客排队购买蛋挞问题(算法与数据结构设计)
若mount小于或等于K_,则将K_的值减去mount的值,并添加该顾客的购买记录,接着判断该顾客的购买记录数record是否大于购买情况结果列数list_col,若大于则将record值赋值给list_col,置该顾客的mount为0,此时该顾客已经购买完M个蛋挞,将该顾客的序号cu_cal加1后(加1后才是顾客真正的序号)赋值给购买顺序结果result[re_cal],re_cal加1使数组result下标后移。烘焙员每次烘焙1到K个蛋挞放入盘中,顾客只能购买盘中的蛋挞,未达到M个需重新排队。
2024-07-08 21:43:28 811
原创 最小代价生成树实现(算法与数据结构设计)
由普利姆算法的时间复杂度O(n2),普利姆算法更适合当图中边的数量远大于点的数量的情形,在电路设计中可以应用于印刷电路板的布线问题以减少导线长度。由克鲁斯卡尔算法的时间复杂度O(eloge),克鲁斯卡尔算法更适合当图中点的数量远大于边的数量的情形,与普利姆算法类似,也可以用于优化连接路径的问题。
2024-07-06 20:14:38 682
原创 26-ARM常用汇编指令
汇编格式:label:instruction @ comment常用段名:.section .vector常见伪操作:寄存器间数据传输:内存与寄存器数据传输:压栈和出栈跳转算术运算指令逻辑运算
2024-07-06 20:02:13 342
原创 22-system-V消息队列
左边发送,右边接收,先启动发送的程序,后启动接收的程序。功能:设置或获取消息队列的相关属性。功能:发送消息到消息队列。功能:从消息队列读取消息。功能:获取消息队列ID。成功:该消息队列的ID。功能:获取一个key。
2024-05-28 15:03:22 398
原创 18-有名管道
(在虚拟机中新建两个终端然后分别执行,先执行fifo_read程序,然后在执行fifo_write程序,并且执行fifo_write程序增加一段字符串参数)使用函数:mkfifo。
2024-05-19 07:42:26 239
原创 16-僵尸进程和托孤进程
父进程比子进程先退出,子进程变为孤儿进程,Linux系统会把子进程托孤给pid为1号的进程(init)进程。子进程退出后,父进程没有调用wait()函数处理身后事,子进程变成僵尸进程。若进程没有按正常退出步骤,则有可能变为僵尸进程或者托孤进程。查看进程状态,发现状态为“Z”的僵尸进程。编写程序实现僵尸进程。
2024-05-15 12:17:08 183
原创 14-串口通讯
串口通信,设备间常用的串行通讯方式,简单便捷,大部分设备都支持。本人使用的开发板默认使用串口终端。windows上使用串口通讯工具来来接开发板,如putty,xShell,MobaXterm等等。使用工具时通常需要配置端口号、波特率、校验位、数据位、以及停止位的参数。端口号:用于区分同一台电脑上的不通串口设备,在Windows上通常以COM1,COM2等方式命名。波特率:指每秒传输的比特位数。由于没有时钟信号同步数据,所以通讯双方需要约定好数据的传输速率。串口最常用的是异步通讯。
2024-05-08 14:35:52 250
原创 13-Makefile_04
第一个函数调用中,由于“hello_main.c”符合“%.c”的匹配规则(%在Makefile中的类似于*通配符),而且“%”从“hello_main.c”中提取出了“hello_main”字符,把这部分内容放到替换规则“build_dir/%.o”的“%”号中,所以最终的输出为”build_dir/hello_main.o”第二个函数调用中,由于由于“hello_main.xxx”不符合“%.c”的匹配规则,“.xxx”与“.c”对不上,所以不会进行替换,函数直接返回空的内容。注意工程结构如上图。
2024-04-26 15:15:55 308
原创 12-Makefile_03(续)
特殊的变量”$@”,”$<”,可理解为Makefile文件保留的关键字,是系统保留的自动化变量,”$@”代表了目标文件,”$<”代表了第一个依赖文件。即”$@”表示”%.o”,”$<”表示”%.c”。”,即等价于o文件依赖于c文件的默认规则。分支会比较括号内的参数“arg1”和“arg2”的值是否相同,如果相同,则为真,执行分支 1 的内容,否则的话,执行分支 2 的内容,参数 arg1 和 arg2 可以是变量或者是常量。“%”是一个通配符,功能类似“*”,如”%.o”表示所有以”.o”结尾的文件。
2024-04-23 19:20:50 516
原创 10-Makefile_01
回顾之前的hello.c程序的编译,过程很简单,但是在项目工程中,势必会有相当多的C文件和H头文件。哪怕只是修改一个文件,也需要重新编译所有的文件,白白浪费了很多开发时间。要解决这个问题,最好的方式就是把工程的编译规则写下来,让编译器自动加载该规则进行编译。解决方法就是使用和Makefile中的语法复杂、晦涩难懂,但是都是为了更好的解决文件依赖问题而存在的。
2024-04-17 15:11:29 772
原创 09-ARM开发板的HelloWorld
如图所示,程序无法正常运行,终端提示ARM开发板在执行x86架构(Intel或AMD)的hello程序时提示格式错误,原因是x86_64和ARM架构的程序不兼容,本质是由于这些CPU使用的指令集不同。前面在Ubuntu系统编译生成了X86_64平台的HelloWorld程序,通过NFS服务器,尝试在开发板上直接运行。交叉编译出来的程序在开发板上提示gblic版本不对应,程序运行不了,除了想到能静态编译想不到其他方法,后面换了。,编译复杂的程序时,可能需要巨大的存储空间以及强大的CPU运算能力加快编译速度。
2024-04-13 10:33:26 444
原创 08-GCC和编译流程
调用库文件*.so中的内容,不同的程序可以共用代码库。所以动态链接生成的程序比较小,占用较少的内存。优点就是占用小,缺点就是如果在一台机器上编译的程序到另一台机器上因为没有对应的库可能执行不了,也就是兼容性问题。静态链接,链接时使用选项“–static”,它在编译阶段就会把所有用到的库打包到自己的可执行程序中。,例如printf 函数的C标准代码库*.so文件存储在Linux系统的某个位置,hello程序执行时。GCC编译工具链是指以GCC编译器为核心的一整套工具,用于把源代码转化成可执行的应用程序。
2024-04-12 16:19:59 556
原创 07-挂载NFS网络文件系统
应用场景中开发主机和开发板需要通过网络互相访问,另外由于NFS文件系统暴露到公网需要处理很多安全问题,为简化操作,只把开发主机和开发板连接到局域网,即都使用网线把它们连接到同一个网段(还没学网络,不知道这个说法对不对,有错希望指出)。至于为什么这样应用,服务器端的硬件相比开发板更加好,有时候开发板的硬件条件不能够编译软件是可以用服务器端来编译,一方面提高开发效率,还有一方面节省开发板的空间。开发主机开启NFS服务后,还需要在开发板安装NFS客户端,让开发板使用NFS服务。
2024-04-09 20:37:14 683
原创 06-编辑器
虽然Ubuntu的图形界面也能通过gedit打开文件,但是用终端打开gedit可以动用更高的权限,在图形界面下默认使用的是用户身份,要修改某些需要管理员权限的文件是无法操作的,只能读不能写。图形界面虽好,但网上教程一般都是用vi或者vim来修改配置文件,因为系统一般自带vi,而且不需要区分系统是否需要使用图形界面。在一般命令模式下,按下键盘的冒号键“ :”,就可以进入命令行模式,继续输入要执行的命令按回车即可执行。以上一般是较常用的命令或快捷键,还有很多操作就不列出来了,以上的命令对日常的编辑足够使用了。
2024-04-03 15:46:35 1850
原创 05-apt及yum包管理工具
用户需要安装软件时,通过包的形式进行分发,包提供了操作系统的基本组件,以及共享的库、应用程序、服务和文档,当用户需要时,可以运行特定的指令来安装。目前大多数类Unix操作系统都提供了异种中心化的机制用来搜索和安装软件,软件开发者先行在固定的硬件平台上将软件编译好然后将软件的所有相关文件打包存放在公开的服务器中。命令中的dpkg(DebianPackager)是Debian专门开发的包管理工具,它可以用来安装、更新和移除软件,安装时它需要使用deb类型的软件包。dpkg只能对已经下载到本地的软件包进行管理。
2024-04-02 20:11:16 1039
原创 04-Linux命令行-续
注::IMX6ULL 开发板在使用poweroff命令关机后,需要长按ON/OFF键1~2秒才能正常开机。从上图知,除了能查看Shell命令,还能看到man手册支持9种类型的内容。需要注意的是,如果我们需要查命令等等,需要在对应的章节进行查找。除了–help选项来查看命令,Linux还提供了man命令,可以用来查看Linux系统自带的参考手册。打开说明后,按键盘方向键的“↑”“↓”键可以实现上下切页,按“q”来退出手册。左上角的“PRINTF(1)”中的数字1表示它在man手册中的章节号。
2024-04-01 21:09:37 335
原创 03-Linux命令行-续
有时我们希望把命令执行的结果保存到文件进行分析,这时我们可以使用输出重定向到文件的控制符“>”或“»”,其中“>”会直接用输出覆盖原文件,而“»”则把输出追加到原文件的末尾。ls 命令是list 的简写,在前面就已经频繁使用,它是Linux下最常用的指令,功能为显示指定目录下的内容(文件及子目录),还可以查看文件大小,修改日期等等信息。其中“目录名”就是要创建的目录路径,“-p”选项可以不输入,如果使用了“-p”选项,则当创建的目录名包含的上级目录不存在时,它会自动创建所有不存在的目录。
2024-03-31 10:37:10 987
原创 01-Linux简介、目录
我们说的Linux系统时,其含义往往指采用Linux内核的操作系统。Linux内核负责控制硬件、管理文件系统、进程管理、网络通讯等等,但是其本身并没有给用户提供必要的工具和应用软件。
2024-03-26 09:12:27 261
原创 C++虚析构函数作用
当基类指针指向派生类对象时,如果基类的析构函数不是虚函数,那么在删除该指针时只会调用基类的析构函数,而不会调用派生类的析构函数。这会导致派生类对象的资源无法正确释放,从而引发内存泄漏和未定义行为。
2024-03-20 14:35:40 165
原创 Java笔记12-25
Stack栈容器,是Vector的一个子类,它实现了一个标准的后进先出的栈(LIFO:Last In Frist Out)
2023-12-25 08:16:26 394
原创 Java笔记12-19
ArrayList底层是用数组实现的存储。在1.7版本中,创建容器默认大小为10,在1.8版本中创建容器大小默认为0,节省了空间,需要添加元素时再扩容为10,后续再添加超过容量时会以原来大约1.5倍扩容。将list_C中与list_D相同的元素删除,删除成功返回true,失败返回false。与并集一致,若list_a为空,则会返回false。方法执行成功返回true,失败返回false。
2023-12-19 07:51:37 412
原创 Java笔记12-16
有序:有序(元素存入集合的顺序和取出的顺序一致)。List中每个元素都有索引标记。可以根据元素的索引标记(在List中的位置)访问元素,从而精确控制这些元素。可重复:List允许加入重复的元素。跟确切地讲,List通常允许满足e1.equals(e2)的元素重复加入容器。查找Object o对象,若查到则返回该元素最后一次出现的位置索引号,若查找不到该元素则返回-1。
2023-12-16 10:49:19 920 1
原创 Java笔记12-8
Collection是单例集合根接口,子接口为List接口和Set接口方法说明增加元素到容器中从容器中移除元素容器中是否包含该元素int size()容器中元素的数量容器是否为空清空容器中所有元素获得迭代器,用于遍历所有元素本容器是否包含c容器中的所有元素将容器c中所有元素增加到本容器移除本容器和容器c中都包含的元素取本容器和容器c中都包含的元素,移除非交集元素转化成Object数组。
2023-12-08 08:38:40 352
原创 Java笔记11-3
泛型主要用于编译阶段,编译后生成的字节码class文件不包含泛型中的类型信息。类型参数在编译后会被替换成Object,运行时虚拟机并不知道泛型。基本类型不能用于泛型这样写法是错误,可以使用对应的包装类;不能通过类型参数创建对象运行时类型参数T会被替换成Object,无法创建T类型的对象,容易引起误解,所以在Java中不支持这种写法。
2023-11-03 20:02:57 60
原创 Java学习笔记11-1
上限限定表示通配符的类型是T类以及T类的子类或者T接口以及T接口的子接口。该方法同样适用于与泛型的上限限定。”表示类型通配符,用于代替具体的类型。只能在“”中使用。可以解决当具体类型不确定的问题。在泛型方法中,泛型也可以定义可变参数类型。
2023-11-01 12:34:31 80 1
原创 Java笔记10-30
类型参数可以有多个,用逗号隔开,例:<K,V>。定义时,类型参数一般放到返回值前面。调用泛型方法时,不需要像泛型类那样告诉编译器是什么类型,编译器可以自动推断出类型来。
2023-10-30 12:57:02 76 1
原创 Java笔记10-28
泛型标记对应单词说明EElement在容器中使用,表示容器中的元素TType表示普通的Java类KKey表示键,例如:Map中的键KeyVValue表示值NNumber表示数值类型?表示不确定的JAVA类型。
2023-10-28 10:40:21 55 1
原创 Java学习笔记10-26
整型、char类型所对应的包装类,在自动装箱时,对于-128~127之间的值会进行缓存处理,其目的是提高效率。缓存原理为:如果数据在-128~127这个区间,那么在类加载时就已经为该区间的每个数值创建了对象,并将这256个对象存放到一个名为cache的数组中。每当自动装箱过程发生时(或手动调用valueOf()时),就会先判断数据是否在该区间,如果在则直接获取数组中对应的包装类对象的引用,如果不在该区间,则会通过new调用包装类的构造方法来创建对象。注:一月是0,二月是1,以此类推。
2023-10-26 08:42:11 49
原创 Java学习笔记10-11
如果try语句块出现异常,则中断执行并根据发生的异常类型跳至相应的catch语句块执行处理。代码中可能会产生并抛出一种或几种类型的异常对象,它后面的catch语句要分别对这些异常做相应的处理。Exception类是所有异常类的父类,通常Java的异常可分为:RuntimeException(运行时异常),CheckedException(已检查异常)抛出异常:在执行一个方法时,如果发生异常,则这个方法生成代表该异常的一个对象,停止当前执行路径,并把异常对象交给JRE。不管是否发生了异常,都必须要执行。
2023-10-11 09:51:19 56 1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人