【算法与数据结构】动态规划

摘要: 用递归求解问题时,反复的嵌套会浪费内存。而且更重要的一点是,之前计算的结果无法有效存储,下一次碰到同一个问题时还需要再计算一次。例如递归求解 Fibonacci 数列,假设求第 n 位(从 1 开始)的值,C 代码如下:#include int fib(in... 阅读全文
posted @ 2019-05-10 22:13 kikajack 阅读(2543) 评论(0) 推荐(1) 编辑

【算法与数据结构】图的最小生成树 MST - Prim 算法

摘要: Prim 算法属于贪心算法。#include #define VERTEXNUM 7#define INF 10000typedef struct Graph { int vertex[VERTEXNUM]; int edge[VERTEXNUM][VERT... 阅读全文
posted @ 2019-05-06 22:52 kikajack 阅读(303) 评论(0) 推荐(0) 编辑

【C语言工具】AddressSanitizer - 内存检测工具

摘要: Github 地址:https://github.com/google/sanitizersWiki 地址:https://github.com/google/sanitizers/wiki/AddressSanitizer参考:基本使用:https://b... 阅读全文
posted @ 2019-05-04 13:56 kikajack 阅读(8120) 评论(0) 推荐(0) 编辑

【算法与数据结构】二叉堆和优先队列 Priority Queue

摘要: 优先队列的特点普通队列遵守先进先出(FIFO)的规则,而优先队列虽然也叫队列,规则有所不同:最大优先队列:优先级最高的元素先出队最小优先队列:优先级最低的元素先出队优先队列可以用下面几种数据结构来实现:基于堆 heap,包括下面几种堆:二叉堆多项式堆Fibo... 阅读全文
posted @ 2019-05-03 22:17 kikajack 阅读(359) 评论(0) 推荐(0) 编辑

【算法与数据结构】三种简单排序 - 冒泡排序、选择排序、插入排序

摘要: 冒泡排序逐个比较相邻元素,如果逆序则交换。每一趟都会让一个元素就位,总共比较 n-1 趟。n 个元素,需要进行 n - 1 轮冒泡,每次冒泡都会有一个元素就位,所以每轮冒泡的循环次数都会减一。时间复杂度为:1 + 2 + … + n-1 = n(n-1)/2... 阅读全文
posted @ 2019-05-02 12:33 kikajack 阅读(372) 评论(0) 推荐(0) 编辑

【算法与数据结构】并查集 Disjoint Set

摘要: 并查集(Disjoint Set)用来判断已有的数据是否构成环。在构造图的最小生成树(Minimum Spanning Tree)时,如果采用 Kruskal 算法,每次添加最短路径前,需要先用并查集来判断一下这个路径是否会构成环。思路遍历图的每一条边,按照... 阅读全文
posted @ 2019-04-30 13:25 kikajack 阅读(250) 评论(0) 推荐(0) 编辑

【算法与数据结构】二叉堆和堆排序

摘要: 构建二叉堆二叉堆本身也是个二叉树,有两个限制:堆必须是完全二叉树堆中任一父结点的值大于其左右两子节点的值(大顶堆),或小于其左右两子节点的值(小顶堆)因为完全二叉树中,数据排列顺序是从上而下,从左至右,所以可以用数组的形式保存数据。通常根结点作为数组的 0 ... 阅读全文
posted @ 2019-04-29 13:30 kikajack 阅读(212) 评论(0) 推荐(0) 编辑

【Linux 应用编程】进程管理 - 进程间通信IPC之共享内存 mmap

摘要: IPC(InterProcess Communication,进程间通信)是进程中的重要概念。Linux 进程之间常用的通信方式有:文件:简单,低效,需要代码控制同步管道:使用简单,默认阻塞匿名管道 pipe:只存在于内核缓冲区,只能用于有血缘关系的进程有名... 阅读全文
posted @ 2019-04-14 13:37 kikajack 阅读(475) 评论(0) 推荐(0) 编辑

【Linux 应用编程】进程管理 - 进程间通信IPC之管道 pipe 和 FIFO

摘要: IPC(InterProcess Communication,进程间通信)是进程中的重要概念。Linux 进程之间常用的通信方式有:文件:简单,低效,需要代码控制同步管道:使用简单,默认阻塞匿名管道 pipe:只存在于内核缓冲区,只能用于有血缘关系的进程有名... 阅读全文
posted @ 2019-04-14 11:41 kikajack 阅读(472) 评论(0) 推荐(0) 编辑

【Linux 应用编程】进程管理 - 进程、线程和程序

摘要: 基本概念程序和进程的区别程序是平台相关的二进制文件,只占用磁盘空间。编写完程序代码后,编译为可执行的二进制文件即可。进程是运行中的程序,占用 CPU、内存等系统资源。通过 Shell 命令,可以在终端启动进程,例如执行 ls 命令:找到命令对应的二进制文件使... 阅读全文
posted @ 2019-04-08 22:24 kikajack 阅读(694) 评论(0) 推荐(0) 编辑

【Linux 应用编程】基础知识

摘要: 错误提示Linux 提供的系统调用API,通常会在失败的时候返回 -1。如果想获取更多更详细的报错信息,需要借助全局变量 errno 和 perror 函数:#include void perror(const char *s);#include const... 阅读全文
posted @ 2019-04-07 14:17 kikajack 阅读(170) 评论(0) 推荐(0) 编辑

【Linux 应用编程】文件IO操作 - 常用函数

摘要: Linux 系统中的各种输入输出,设计为“一切皆文件”。各种各样的IO统一用文件形式访问。文件类型及基本操作Linux 系统的大部分系统资源都以文件形式提供给用户读写。这些文件可以分为:普通文件:即一般意义上的磁盘文件;设备文件:系统中的具体设备;管道文件、... 阅读全文
posted @ 2019-04-06 22:37 kikajack 阅读(958) 评论(0) 推荐(0) 编辑

数据结构

摘要: 关于数据结构,可以大致分为以下两类:逻辑结构:抽象出来的数据模型。每一种逻辑结构都可以基于不同的物理结构进行存储。物理结构:数据在内存中的真实存储方式。基本数据结构(逻辑结构)集合:元素之间没有关系,各自独立线性结构:元素之间是一对一的关系,除首尾元素外每个... 阅读全文
posted @ 2019-01-31 18:41 kikajack 阅读(164) 评论(0) 推荐(0) 编辑

Linux 命令 - man 查看命令的文档

摘要: man 命令是 Linux 中最常用的命令,碰到任何让你疑惑的命令,都可以 man 一下来查看详情。不只是 shell 命令,C 语言库函数和系统调用等内容也可以通过 man 命令查看。man 命令默认查看的是 shell 命令的文档,可以指定参数 2 查看... 阅读全文
posted @ 2019-01-27 13:46 kikajack 阅读(1085) 评论(0) 推荐(0) 编辑

C 语言的函数 - 内存分析

摘要: 函数基本概念Linux 中,函数在内存的代码段(code 区),地址比较靠前。函数定义C 语言中,函数有三个要素:入参、返回值、函数名,缺一不可。函数使用前必须先声明,或者在使用之前定义。函数声明格式如下:int test(int a, char *p);函... 阅读全文
posted @ 2019-01-22 23:13 kikajack 阅读(544) 评论(0) 推荐(0) 编辑

程序的内存分布 - 以 Linux 为例,基于 C 语言分析

摘要: 这里以 Linux 为例,用 C 语言进行演示。内存模型-内存空间名称内容读写操作分配时机高地址kernel 内核空间命令行参数、环境变量等不可读写程序运行时-stack 栈空间局部变量可读写程序运行时-heap 堆空间malloc() new() 内存分配... 阅读全文
posted @ 2019-01-21 23:39 kikajack 阅读(365) 评论(0) 推荐(0) 编辑

C 语言结构体 struct 及内存对齐

摘要: struct 结构体对于复杂的数据类型(例如学生、汽车等),C 语言允许我们将多种数据封装到一起,构成新类型。跟面向对象语言中的对象相比,结构体只能包含成员变量,不支持操作。#include #include struct People{ int age; ... 阅读全文
posted @ 2019-01-20 22:43 kikajack 阅读(466) 评论(0) 推荐(0) 编辑

C语言的指针和数组

摘要: 指针和内存指针变量也是个变量,不过保存的是另一个变量的地址。另外编译器还会记住指针所指向变量的类型,从而在指针运算时根据变量类型采取不同操作。例如,char * a 定义了char 类型的指针变量 a,通过 *a 读取数据时,每次只会读一个字节(char 类... 阅读全文
posted @ 2019-01-20 22:15 kikajack 阅读(374) 评论(0) 推荐(0) 编辑

C 语言的运算符

摘要: 算术运算C 语言支持 + - * / % 五种运算,加减乘除取模。所有 CPU 都内建加法器,可以完成加法操作。减法操作可以转为加法操作。大部分 CPU 都没有内置乘法器,此时编译器会把 * / 乘除运算转为加法运算,用软件来模拟乘法。逻辑运算逻辑运算的返回... 阅读全文
posted @ 2019-01-19 22:04 kikajack 阅读(703) 评论(0) 推荐(0) 编辑

C 语言中的关键字 - 数据类型、数据修饰符及逻辑结构

摘要: C 语言中有 32 个关键字。这是留个编译器用的特殊字符串,用户不可以使用。特殊关键字sizeof 和 return 是 C 语言中的两个特殊关键字。sizeofsizeof 用于计算变量所占内存空间的字节数,返回值为 unsigned long 无符号长整... 阅读全文
posted @ 2019-01-19 20:18 kikajack 阅读(612) 评论(0) 推荐(0) 编辑

C 语言中的预处理

摘要: C 语言中以 # 开头的就是预处理指令,例如 #include 。预处理指令的用途所有的预处理指令都会在 GCC 编译过程的预处理步骤解析执行,替换为对应的内容。在下一步编译过程中,看不到任何预处理信息,只需要对独立的程序文件进行操作即可。预处理指令的类型包... 阅读全文
posted @ 2019-01-19 15:30 kikajack 阅读(670) 评论(0) 推荐(0) 编辑

GCC 使用-C语言编译过程

摘要: 任何一种高级语言,要想在机器上执行,必须翻译为机器能读懂的机器语言。编译器就相当于翻译官,将高级语言翻译为机器语言。GCC 最初只用了编译 C 语言程序,全称是 GNU C Compiler。后来扩展为可以编译多种语言,所以又称为 GNU Compiler ... 阅读全文
posted @ 2019-01-19 12:46 kikajack 阅读(520) 评论(0) 推荐(0) 编辑

51单片机的中断和定时器、计数器

摘要: 中断使得高低速设备可以协调工作(低速设备完成工作后通过中断的方式通知高速设备一次处理一批数据),中断还可以根据不同的优先级实现嵌套执行。定时器本质上是个 16 位的自增计数器,当发生溢出时,如果开启了溢出中断,单片机会自动向 CPU 报告这个溢出中断,处理相... 阅读全文
posted @ 2019-01-13 11:25 kikajack 阅读(5068) 评论(0) 推荐(0) 编辑

proteus 与 keil 的安装及联调

摘要: proteus 安装Win10 系统的下载链接可以参考这里:https://tieba.baidu.com/p/5644915130?traceid=百度网盘地址链接1: http://pan.baidu.com/s/1kVdtfnx 密码: vaib链接2... 阅读全文
posted @ 2019-01-12 20:26 kikajack 阅读(4911) 评论(0) 推荐(0) 编辑

Intellij IDEA 常见问题

摘要: 右击项目时,没有 Java Class,只能创建其他文件IDEA 还没有将这个项目识别为 Maven 项目时,会出现这种情况。此时右键无法创建类。解决办法:手动为 IDEA 指定项目类型:如果编辑器右下角的 event log 点开后有 add as mav... 阅读全文
posted @ 2019-01-01 19:19 kikajack 阅读(179) 评论(0) 推荐(0) 编辑

Spring Boot-配置

摘要: Spring 官方完整文档:https://docs.spring.io/spring-boot/docs/current/reference/htmlsingleSpring 官方配置文档:https://docs.spring.io/spring-boo... 阅读全文
posted @ 2019-01-01 15:48 kikajack 阅读(174) 评论(0) 推荐(0) 编辑

Spring Boot-入门

摘要: Java 企业级开发,经历了从 SSH (Spring + Struts2 + Hibernate)到 SSM(Spring + StringMVC + MyBatis)再到 Spring 全家桶(Spring + Spring Boot + SpringD... 阅读全文
posted @ 2019-01-01 14:05 kikajack 阅读(296) 评论(0) 推荐(0) 编辑

Java 项目管理工具 - Maven

摘要: 类似于 PHP 中的 Composer,NodeJS 中的 npm,Java 用 Maven 来管理依赖关系。实际上,Maven 负责管理 Java 项目开发过程中的几乎所有的东西:版本控制:Maven 有自己的版本定义和规则依赖管理:Maven 的基础功能... 阅读全文
posted @ 2018-12-30 12:21 kikajack 阅读(961) 评论(0) 推荐(0) 编辑

Java 语言特性之 Annotation 注解

摘要: 利用 Java 的反射机制,可以在运行时获取 Java 类的注解信息。注解注解的特性注解是 Java 5 的一个新特性,是插入代码中的一种注释或者说是元数据。注解并不是程序代码,可以对程序作出解释,类似于注释。但是注解可以被相关程序读取(例如编译器)。注解可... 阅读全文
posted @ 2018-12-23 21:05 kikajack 阅读(204) 评论(0) 推荐(0) 编辑

IntlliJ IDEA 注册码获取或离线破解

摘要: JB 的软件还是挺好用的,建议有钱的话支持正版。。 IntelliJ IDEA 有开源版,但是要想玩企业级开发,还是得用收费版。不管哪种方式,使用前都需要把“0.0.0.0 account.jetbrains.com”添加到hosts文件中。具体的方式可以参... 阅读全文
posted @ 2018-12-23 13:21 kikajack 阅读(676) 评论(0) 推荐(0) 编辑