03 2020 档案
摘要:11预处理命令下 程序的编译,是一个复杂的过程,其中重要的是三个阶段:预处理阶段,编译阶段和链接阶段 1. 初识宏定义 一个宏定义只能占一行代码,这可不是你所认为的一行代码,而是编译器所认为的一行代码 正如上图所示,宏定义以 define 作为语句的开头,之后两部分,用空格分隔,在预处理阶段期间,会
阅读全文
摘要:预处理命令上 程序中的“日志”,通常是指在程序运行过程中,输出的一些与程序当前状态或者数据相关的一些信息。这些信息,可以帮助程序开发人员做调试,帮助运营人员做数据分析,帮助管理人员分析日活等等。总而言之,一份合理的日志信息,是非常有价值的数据。 结果为: log 方法的输出中,会输出额外的两个信息:
阅读全文
摘要:函数 1. 函数的基础知识 数学中的函数,大家都不陌生,一般的形式是 f(x) = y,x 是自变量,y 是函数值。程序中的函数,和数学中的函数基本一致,有自变量,我们称作“传入参数”,还有函数值,我们叫做返回值。 第一个部分,是函数返回值的类型。 第二个部分,是函数名字,调用函数的时候,需要给出这
阅读全文
摘要:指针变量也是变量 1. 深入理解:指针变量的类型 根据 p 变量中的内容,我们可以找到一个存储区的首地址,然后再根据 p 的类型,就可以确定要取几个字节中的内容了。 这段上面代码中,p 和 q 同时指向了 a 变量的存储区。而取值 p 和取值 q 的结果,却截然不同。这是因为,取值 p 时,程序会从
阅读全文
摘要:指针变量也是变量 1. 初识:结构体 可以通过 C 语言里面的工具来描述这种类型的特点,这个可以用来描述和定义新类型的工具,就叫做:结构体。 struct point,也就是结构体点类 通过点类来定义对象 在这个过程中,有没有一种盖房子的感觉?先有地基,再盖一楼,然后是二楼。也就是在程序中,先有基础
阅读全文
摘要:思考题(1):位数输出 计算一个输入整数的十进制表示的位数? 条件 1:允许有多余输出的情况下,怎么实现? 条件 2:只允许输出数字位数的时候,又该怎么实现? 请单纯考虑使用 printf 一族函数方法实现。 思考题(2):读入一行字符串 请大家自行实现一个读入一行字符串,并且输出相关内容的程序,思
阅读全文
摘要:高级树、AVL 树和红黑树 二叉树遍历 Pre order/In order/Post orde 1. 前序(Pre order):根 左 右 2. 中序(In order):左 根 右 3. 后序(Post order):左 右 根 示例代码 二叉搜索树 Binary Search Tree 二叉
阅读全文
摘要:字符数组 一种用来存储字符串信息的数组。 %lf 是 double 双精度浮点型输出的格式占位符,当我们想要保留小数点后两位的时候,只需要在 % 和 lf 中间加上 .2 即可,2 写在 .(点) 的后面代表小数点后 2 位。 1. 值和变量 整型变量,就是存储整型的变量。 整型变量存储整型值,浮点
阅读全文
摘要:基本的程序结构 第一种结构就是顺序结构,它指的是我们所写的按照顺序执行的代码,执行完上一行,再执行下一行这种的。第二种就是分支结构,主要是用 if 条件分支语句来实现,主要特征是根据表达式的真假,选择性地执行后续代码。最后一种就是循环结构,用来重复执行某段代码的结构。 例题:请输出 1 到 7 的每
阅读全文
摘要:如何用计算机知识求π 我们做大量的随机实验,最终落在圆内部的次数除以总次数再乘以 4 得到的值,应该接近圆周率 π。随机次数越多,所得到的数值越接近 π。 上述代码,第一个没有产生随机数种子,所以运行结果始终不会变,第二个因为有随机数种子,所以每次运行结果都是会改变的。 思考题:设计迷你随机函数 设
阅读全文
摘要:```cfor (int i = 1, k = 0; i int main() { int y, m, d, X,i; // 定义存储 年月日 和 X 的变量 scanf("%d%d%d", &y, &m, &d); // 读入年月日 scanf("%d", &X); // 读入 X 值 for (i = 0; i 31) d = 1, m += 1; ...
阅读全文
摘要:在终端输出带颜色的字符 输入:red:color content, 输出红色的:color content 输入:blue:color content,输出蓝色的:color content 输入:yellow:color content,输出黄色的:color content 输入小技巧 prin
阅读全文
摘要:IDEA 集成开发环境 主要将下面三个集成在一起 1. 文本编辑器 2. 编译器 3. 调试器 学习编程的选择 最适合学习编程的操作系统是 Linux,Linux 中有一个核心设计思想,叫做“一切皆文件”,理解了文件,就理解了整个 Linux 操作系统,这里说的文件,可不是你所认为的常规的 wind
阅读全文
摘要:浅谈斐波那契数列 斐波那契数列是老生常谈的问题,他也是一个经典的例题,很多应用问题最后殊途同归都能归结到斐波那契数列,我们重新回归浅谈一下斐波那契数列。 一、重识斐波那契数列 所谓斐波那契数列也就是每一项等于前两项之和的数列,它最早来自于一个兔子繁殖的应用问题,是由斐波那契这位人研究的 假设:一对成
阅读全文
摘要:什么是斐波那契数列? 斐波那契数列是这样一个数列,它满足: f(0) = 0; f(1) = 1; f(n) = f(n 1) + f(n 2) (当n =2时) 到底有几种方法,这些思路里蕴含的优化思路究竟是怎么样的,今天和大家聊一聊。 一、递归法 伪代码: uint32_t f(uint32_t
阅读全文
摘要:进程与线程的关系 1. 线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程。 2. 资源分配给进程,同一进程的所有线程共享该进程的所有资源。 3. 线程在执行过程中,需要协作同步。不需要进程的线程间要利用消息通信的办法实现同步。 4. 处理机分给线程,即真正在处理机上运行的是线程。 5
阅读全文
摘要:动态规划 回顾分治、回溯、递归学习动态规划 递归模板 java代码 Python代码 分治代码模板 感触 1. 人肉递归低效、很累 2. 找到最近最简方法,将其拆解成可重复解决的问题(寻找重复子问题) 3. 数学归纳法思维(抵制人肉递归的诱惑) 本质:寻找重复性—— 计算机指令集 动态规划 Dyna
阅读全文
摘要:二分查找 二分查找的前提 目标函数单调性(单调递增或者递减) 存在上下界(bounded) 能够通过索引访问(index accessible) 代码模块
阅读全文
摘要:P、V操作描述简单同步 设同步信号量empty,含义为缓冲单元为空,初值为1 设同步信号量full,含义为缓冲单元为满,初值为0 输入进程: 申请空缓冲单元; P(empty); 输入数据到缓冲单元; 输入数据到缓冲单元; 释放满缓冲单元; V(full) 计算进程 申请满缓冲单元; P(full)
阅读全文
摘要:余数 1.余数的特性 整数岁没有边界的,它可能岁正无穷大,也可能是正无穷小,余数却总岁在一个固定的范围内。生活中余数可以用来计算星期,web编程中可以用在分页中。 2.同余定理 两个整数a和b,如果它们除以正整数m得到余数相等,我们就可以说,a和b对于模m同余。同余定理其实就是用来分类的。 3.求余
阅读全文
摘要:二进制 1.什么是二进制? 十进制计数使用10作为基数,二进制使用2作为基数,二进制的位数就是2^n的形式。 例如:二进制110,首先基数是“2”;坐高右低原则就是“2 1 0”分别对应最左边的“1 1 0”;其实坐高右低就是从右边以0开始然后依次加一,这个是进行幂运算的多少次方的数字。所以这个二进
阅读全文
摘要:m序列密码的破译 虽然n级LFSR产生的m序列具有良好的伪随机特性,然而直接用其构造密钥流序列是极不安全的,因为可以利用连续2n位明文密文对进行破译,找到其起始状态及特征多项式。 明文M={m1,m2,……,m2n}, 密文C={c1,c2,……,c2n}, 由ci=mi+ki,ki=ci+mi,i
阅读全文
摘要:线性移位寄存器(LFSR) 定义 一个n级寄存器是一个由n个存储单元b1,b2,……,bn和一个计算单元f(b1,b2,……,bn)构成的装置, bn+1=f(b1,b2,……,bn) 若f为线性函数 f(b1,b2,……,bn)=t1 b1+t1 b2+……+tn bn 称为线性反馈寄存器,即为L
阅读全文
摘要:序列密码 引言 序列密码又称流密码,它是将明文串逐位地加密成密文字符。并有实现简单、速度快、错误传播少等特点。 密码按加密形式可分为: 分组密码 序列密码 密码按密钥分为: 对称密码(私钥密码) 非对称密码(公钥密码) 1. 加解密算法 明文序列:m=m1m2……mn…… 密钥序列:k=k1k2……
阅读全文
摘要:信号量及PV操作 一个特殊变量 用于进程间传递信息的一个整数值 定义如下 信号量说明:semaphore s; 对信号量可以实施的操作:初始化、P和V P、V操作定义 down up 有关说明 P、V操作为原语操作 在信号量上定义了三个操作 初始化(非负数)、P操作、V操作 最初提出的是二元信号量(
阅读全文
摘要:进程间制约关系 进程的制约关系:并发进程之间彼此相关,相互影响,一个进程的执行可能影响其他进程的执行结果。 制约关系的类型:根据共享资源性质的不同,可分为: 直接制约关系:也称"合作关系",是指一个进程执行完后,另一个进程才能开始,否则不能开始。 间接制约关系:也称"竞争关系",指一个进程访问共享资
阅读全文
摘要:DES的子密钥生成 step1: 最初64bit密钥通过置换选择PC 1得56bit密钥 步骤一: 去掉第8、16、24、32、40、48、56、64八位; 剩余的56bit按照表打乱次序。 step2: 56bit密钥分为2个28bit数据C0D0,每轮迭代中,Ci 1和Di 1分别循环左移1位或
阅读全文
摘要:数据加密标准(DES) 概述 DES(Data Encryption Standard)是由1971年IBM公司设计出的一个加密算法,1977年经美国国家标准局(NBS)采用作为联邦标准之后,已成为金融界及其它各种民间行业最广泛应用的对称密码系统,是第一个被公布出来的标准算法。四十年来,尽管计算机硬
阅读全文
摘要:分组密码 概述 所谓分组密码,简单地说就是对明文进行分组,每组的长度都相同,然后对每组明文使用密钥进行加密得密文,解密即对每组明文使用密钥进行解密得到明文。 通常情况是明文、密文等长。(好处是处理速度快,节约了存储,避免了浪费带宽.) 1. 定义 分组密码包含5个部分{M,C,K,E,D}, M=F
阅读全文
摘要:贪心算法 贪心算法Greedy 贪心算法是一种在每一步选择中都采取在当前状态下最好或最优(即最有利)的选择,从而希望导致结果是全局最好或最优的解法。 贪心算法与动态规划的不同在于它对每个子问题的解决方案都做出选择,不能回退。动态规划则会保存以前的运算结果,并根据以前的结果对当前进行选择,有回退功能。
阅读全文
摘要:深度优先搜索和广度优先搜索 遍历搜索 在树(图/状态集)中寻找特定结点 搜索 遍历 每个节点都要访问一次 每个结点仅仅要访问一次 对于结点的访问顺序不限 深度优先: depth first search 广度优先:breadth frist search 深度优先搜索 Depth First Sea
阅读全文
摘要:分治、回溯 递归状态树 分治Divide&Conquer 分治代码模板 回溯Backtracking 回溯法采用试错的思想,它尝试分布的去解决一个问题。在分步解决问题的过程中,当它通过尝试发现现有的分步答案不能得到有效的正确的解答的时候,它将取消上一步甚至是上几步的计算,再通过其他的可能的分步解答再
阅读全文
摘要:泛型递归、树的递归 递归Recursion 递归 循环 通过函数体来进行循环 1. 从前有个山 2. 山里有个庙 3. 庙里有个和尚讲故事 4. 返回1 盗梦空间 向下进入到不同梦境中,向上又回到原来一层 通过声音同步回到上一层 每一层的环境和周围的人都是一份拷贝、主角等几个人穿越不同层级的梦境(发
阅读全文
摘要:树、二叉树、二叉搜索树 二叉树Binary Tree 图Graph linked list是特殊化的tree tree是特殊化的graph 示例代码 二叉树遍历Pre order/In order/Post order 1. 前序(Pre order):根 左 右 2. 中序(In order):左
阅读全文
摘要:哈希表、映射、集合 哈希 哈希表(Hash table) ,也叫散列表,是根据关键码值(Key value)而直接进行访问的数据结构。 它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。 这个映射函数叫作散列函数(Hash Function),存放记录的数组叫作哈希表(或散列表) 工程
阅读全文
摘要:链表LeetCode练习 "反转链表" "两两交换链表中的节点" "环形链表" "环形链表 II" "K 个一组翻转链表"
阅读全文
摘要:栈、队列、双端队列、优先队列 栈和队列的基本实现和特性 栈 1.Stack:先入后出;添加、删除皆为O(1) 2.查询为 O(n) 时间复杂度 方法 | 复杂度 | Access | O(n) Search | O(n) Insertion | O(1) Deletion | O(1) 成员函数 元
阅读全文