摘要: ```c #include #include #include struct Node { int _id; char s[50]; struct Node* pre;// 指向前一个节点的地址 struct Node* next;// 指向下一个节点的地址 }; void node_free(struct Node** q) { if( *q != NULL) { print... 阅读全文
posted @ 2019-07-15 21:54 虎老狮 阅读(3107) 评论(0) 推荐(0)
摘要: 节点(结构体描述) 新建节点(开辟内存空间) 参数: 为新节点id字段赋值 返回值:新节点的地址(指针) 添加节点 如果只有一个节点,不用添加 在最后追加节点 图1 定位到最后的节点: 图2 最后节点的next指向新节点: 图3 新节点的preview指针指向(前)最后节点: 计算链表中节点的个数 阅读全文
posted @ 2019-07-15 21:51 虎老狮 阅读(304) 评论(0) 推荐(0)
摘要: fopen( ) 函数:创建一个新的文件或者打开一个已有的文件 关于参数mode的取值 | r | 读 | | | | | w | 写(无文件则创建)(从头写) | | a | 写(无文件则创建)(追加) | | r+ | 读写 | | w+ | 读写。如果文件存在,则截断为零长度,如果文件不存在, 阅读全文
posted @ 2019-07-15 21:47 虎老狮 阅读(296) 评论(0) 推荐(0)
摘要: DLL:Dynamic Link Library,动态链接库。一个应用程序可使用多个DLL文件,一个DLL文件也可以被不同的应用程序使用。 1. 先新建一个dll项目 2. 再创建C项目进行调用 3. 运行 阅读全文
posted @ 2019-07-15 21:44 虎老狮 阅读(1470) 评论(0) 推荐(0)
摘要: ```c #define EPERM 1 /* Operation not permitted */ #define ENOENT 2 /* No such file or directory */ #define ESRCH 3 /* No such process */ #define EINTR 4 /* Interrupted system call */ #define EIO 5 /*... 阅读全文
posted @ 2019-07-15 21:42 虎老狮 阅读(774) 评论(0) 推荐(0)
摘要: errno C语言不提供对错误处理的直接支持。 以返回值的形式表示是否出错。 在发生错误时,大多数的C函数调用返回1或NULL。 同时设置一个错误代码errno(全局变量),表示在函数调用期间发生了错误。 可以通过检查返回值,然后根据返回值决定怎么处理 把errno设置为0(没有错误),是一种良好的 阅读全文
posted @ 2019-07-15 21:38 虎老狮 阅读(435) 评论(0) 推荐(0)
摘要: 如果一些函数被频繁调用,不断地有函数入栈(Stack),会造成栈空间的大量消耗。 对应这种问题,可以使用内联函数(inline)。 编译器会将内联函数的代码整段插入到调用的位置。 c include inline int parity(int a) { return (a % 2 0) ? 1 : 阅读全文
posted @ 2019-07-15 21:37 虎老狮 阅读(525) 评论(0) 推荐(0)
摘要: C预处理器是一个文本替换工具,在实际编译之前完成一些预先的处理。 C预处理器(C Preprocessor)简写为 CPP 预处理器命令都是以 开头,如: define定义宏 1. 代码文本替换 2. 增强可读性 系统提供的预定义宏 | __DATE__ | 当前日期 | 字符串常量 | | | | 阅读全文
posted @ 2019-07-15 21:33 虎老狮 阅读(277) 评论(0) 推荐(0)
摘要: 结构体是一种变量类型,可以包含多个变量(变量类型不必相同)。 结构体的关键字是struct也是一种值类型。 例:设计一个表示“书本”的结构体: 说明:结构体中包含了double类型和char数组(表示字符串) 结构体是多个变量的集合,通过结构体加点【.】加内部变量名的形式,可以获得结构体中的字段。 阅读全文
posted @ 2019-07-15 21:32 虎老狮 阅读(478) 评论(0) 推荐(0)
摘要: 字符串库函数 | 求字符串长度(不含结束符’\0’ ) | strlen(str) | | | | | 字符串赋值(可能造成数组越界) | strcpy(str," 水浒传 "); | | 字符串追加(可能造成数组越界) | strcat(str," 三国演义 ") | | 字符串比较(小于: 1/ 阅读全文
posted @ 2019-07-15 21:29 虎老狮 阅读(372) 评论(0) 推荐(0)
摘要: 字符数组 C语言字符串就是字符数组。 单写字符,用单引号。如:’A’。 字符串用双引号。如:”A”、”ABC”。 ASCII码: | 字符 | 十进制数 | | | | | ‘0’ | 48 | | ‘A’ | 65 | | ‘a’ | 97 | 输出内容的换行:\n (这是一个字符’\n’) 打码 阅读全文
posted @ 2019-07-15 21:27 虎老狮 阅读(416) 评论(0) 推荐(0)
摘要: 指针函数 返回值是指针的函数,如void malloc(...) 函数中创建“数组” c include int addition(int x,int y) { return (x+y); } int subtraction(int x,int y) { return (x y); } int mu 阅读全文
posted @ 2019-07-15 21:26 虎老狮 阅读(907) 评论(0) 推荐(0)
摘要: 数组名表示的是这个数组的首地址。即如果有int a[10],则a 相当于&a[0]。 运行结果: 指针遍历数组 指针版字符串常量 “指针版”字符串常量可像数组一样输出,不能修改,但可以直接赋值。 指针版字符串复制 字符串转置 c include include main() { char str[] 阅读全文
posted @ 2019-07-15 21:22 虎老狮 阅读(256) 评论(0) 推荐(0)
摘要: 动态分配内存 动态分配内存,在堆(heap)中分配。 头文件 stdlib.h或malloc.h 向系统申请分配size个字节的内存空间 返回void 类型(未确定类型的指针) 可强制转换为任何类型的指针 头文件 string.h或memory.h 将内存空间s的前n个字节的值设为值c 二级指针 二 阅读全文
posted @ 2019-07-15 21:19 虎老狮 阅读(193) 评论(0) 推荐(0)
摘要: 传值 值类型在做参数的时候,函数内使用的是实参的 副本 。 函数执行完毕后,即使函数内对参数做了修改,调用方的参数还是原来的值。 运行结果: 传引用 将地址传入参数,在地址指向的内存空间中修改具体的值,则调用方亦可取也。 运行结果: 练习:返回值,返回参数 定义一个函数,要求能够同时得到一个整型数组 阅读全文
posted @ 2019-07-15 21:16 虎老狮 阅读(1491) 评论(1) 推荐(0)
摘要: 指针是C语言最重要的特性之一, 也是最容易被误解的特性之一。 现代计算机把内存分割为字节(Byte), 每个字节都有唯一的地址(Address), 如果内存中有n个字节,可以把地址看做0~n 1的数。 程序中的每个变量都占据字节(至少1字节),把第一个字节的地址称为”变量的地址”, 假设变量int 阅读全文
posted @ 2019-07-15 21:15 虎老狮 阅读(3058) 评论(0) 推荐(0)
摘要: 二维数组,又称为矩形数组 可以不太准确地理解为“数组的数组” 也可以认为是一个表格 然而内存中并不是表格存储: 二维数组的初始化 第一维度可以省略 所有元素可以写在一个花括号中,计算机认识,但是对人来说可读性太差。 具体代码如下: c include int main(int argc, char 阅读全文
posted @ 2019-07-15 21:12 虎老狮 阅读(396) 评论(0) 推荐(0)
摘要: qsort函数在在stdlib.h中。 函数原型 参数 base 这就是指针的数组的第一个元素进行排序 nitems 这是由基部指向的数组中的元素数目 size 这是在数组中的每个元素的大小(以字节为单位) compar 这个函数比较两个元素 返回值:不返回任何值 缺点:对于有多个重复值的数组来说, 阅读全文
posted @ 2019-07-15 21:11 虎老狮 阅读(2793) 评论(0) 推荐(0)
摘要: 快速排序是C.R.A.Hoare于1962年提出的一种划分交换排序 它采用了一种分治的策略,通常称其为分治法(Divide and ConquerMethod) 基本思想: 1.先从数列中取出一个数作为基准数。 2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。 3.再对 阅读全文
posted @ 2019-07-15 21:09 虎老狮 阅读(291) 评论(0) 推荐(0)
摘要: 冒泡排序三步走: 循环 交换 回一手 一个数和其它数比较(循环) 每个数都要做这种比较(再一层循环) 准备工作 绿色代表不必要的比较 通过以下处理可以提高效率: 1.内层循环每次 i 2.外层循环最后一次不需要 回一手 总结:冒泡排序三步走, 1. 循环 2. 交换 3. 回一手 不回一手也行,就是 阅读全文
posted @ 2019-07-15 21:07 虎老狮 阅读(1256) 评论(0) 推荐(0)
摘要: 数组是: 一组数据 一组类型相同的数据 在计算机底层,数组是一块连续的内存 为什么使用数组? 一年12个月 int m1=1, m2=2, m3=3, ... 麻烦 数组示例: c include int main(int argc, char argv[]) { // 数组赋值 int month 阅读全文
posted @ 2019-07-15 21:06 虎老狮 阅读(289) 评论(0) 推荐(0)
摘要: 函数直接或间接调用自身 每次调用必须获得一些进展,进一步靠近目标 达到目标就不再调用自身 阅读递归函数不要纠缠于执行过程,而是相信递归函数会顺利完成任务 例:阶乘 不用递归 使用递归 c include int factorial(int n) { if(n == 0) { return 1; } 阅读全文
posted @ 2019-07-15 21:04 虎老狮 阅读(731) 评论(0) 推荐(0)
摘要: 头文件.h Dev C++可以建C项目,也可以建C++项目,下面分C和C++两种情况讨论。 c.h C语言中,头文件往往不是必须的,只是描述性的文件。 因此,C项目中可以没有.h文件。 cpp.h 下面以C++项目为例解释头文件: 自定义函数可以先声明,在main函数之后定义 这个叫做函数原型(fu 阅读全文
posted @ 2019-07-15 21:02 虎老狮 阅读(618) 评论(0) 推荐(0)
摘要: 局部变量 普通的局部变量也叫动态变量,默认有个关键字叫auto,可以省略。有两种形式: 1.函数内的局部变量 2.复合语句内的局部变量:for(int i = 0; i void buy() { auto int timesAuto = 1;// 普通局部变量(auto可以省略) printf("买 阅读全文
posted @ 2019-07-15 21:00 虎老狮 阅读(899) 评论(0) 推荐(0)
摘要: 为实现特定目的而编写的一段可被调用的代码 简单地讲:函数就是一组语句,取了个名字 别名:子例程(routine)/方法(Method,一般面向对象的语言使用这个叫法) 函数的组成部分 以主函数为例: | 返回类型 | int | | | | | 函数名 | main | | 参数 | (int ar 阅读全文
posted @ 2019-07-15 20:57 虎老狮 阅读(494) 评论(0) 推荐(0)
摘要: 1. 顺序结构(从上到下) 2. 分支结构(也叫选择结构) 3. 循环结构 分支结构 if...else 最基本的分支结构是if(){}else{}。 为了代码的安全,同时也是出于代码规范的考虑,if()后面一定要加花括号,else后面也要加花括号。 如果不加花括号, if,else只能管一条语句 阅读全文
posted @ 2019-07-15 20:54 虎老狮 阅读(698) 评论(0) 推荐(0)
摘要: 运算符(operator) 算数运算符 7种 关系运算符 6种 逻辑运算符 3种 位运算符 6种 赋值运算符 11种 共5类33种 算术运算符 加 + 减 乘 除 / 取余 % (仅限于整数类型) 应用:%2可以用于奇偶数的判断: c int main(int argc, char argv) { 阅读全文
posted @ 2019-07-15 20:49 虎老狮 阅读(2300) 评论(0) 推荐(0)
摘要: 变量可以反复赋值;常量只能在定义时赋值,此后不得更改。 常量的定义需要加关键字const。如: 说明:π是一个不可能改变的值,定义为常量,防止在项目中万一不小心被修改。 用宏替代常量 再比如: ↑千万不要写这种代码↑ ↑千万不要写这种代码↑ ↑千万不要写这种代码↑ 阅读全文
posted @ 2019-07-15 20:46 虎老狮 阅读(2913) 评论(0) 推荐(0)
摘要: C89标准中没有定义布尔类型; C99中增加了_Bool类型。实际上是只能等于0或1的整数类型,凡是不为0的整数都被转变为1, C99还提供了一个头文件,该头文件提供了bool宏来代替_Bool,还提供了true和false代替1和0,如: 阅读全文
posted @ 2019-07-15 20:45 虎老狮 阅读(437) 评论(0) 推荐(0)
摘要: 注意两点: 1.scanf的第一个参数:中只写占位符(%_),不要写别的内容(不是输出给谁看)。 2.scanf的第二个参数:要加&,把变量的传参改为引用传递,否则程序极可能出错。 代码示例: 注意:输入的时候,double类型必须用%lf,float必须用%f。 阅读全文
posted @ 2019-07-15 20:43 虎老狮 阅读(1548) 评论(0) 推荐(0)
摘要: 变量输出·常规 头文件:stdio.h 函数: 需要占位符%_,要输出几个变量就需要几个占位符。 | 类型 | 占位符 | 助记 | | | | | | int | %d | d表示十进制decimal | | float | %f | f:float,浮点数 | | double | %lf | 阅读全文
posted @ 2019-07-15 20:40 虎老狮 阅读(5248) 评论(0) 推荐(0)
摘要: 变量(variable) 变量用于存放数据 变量是供程序操作的存储区的名字 变量有类型,该类型决定了变量占用内存的大小 字节→ C语言有以下6种简单变量类型: 类型细分: 变量在内存中需要占据空间,内存占用情况如下图所示:一个int变量占4字节空间(有的电脑上可能占2字节),一个double变量占8 阅读全文
posted @ 2019-07-15 20:36 虎老狮 阅读(2731) 评论(0) 推荐(0)
摘要: 注释 什么是注释? ——注释写在代码中的文字,不参与代码编译,不影响运行结果。 为什么要注释?——让代码可读性更强。 C语言有两种注释: 1. 单行注释 // 2. 多行注释 / / 多行注释可以只有一行,单行注释只能注掉一行。如下图所示: 更多奇葩的注释: c / ┌───┐ ┌───┬───┬─ 阅读全文
posted @ 2019-07-15 20:21 虎老狮 阅读(730) 评论(0) 推荐(0)
摘要: HelloWorld 最简HelloWorld 1. include 指令:标准输入输出头文件。 2. main函数 C语言程序的唯一入口。 main()是C语言中主函数名最简化的写法 C语言的“编译、链接” 我们写的代码,本质上是文本文件(txt),不管后缀怎么变,终究是文本文件,计算机只能显示, 阅读全文
posted @ 2019-07-15 20:17 虎老狮 阅读(369) 评论(0) 推荐(0)
摘要: 20世纪60年代,编程语言界发生“结构化程序设计”变革, 丹尼斯·里奇(Dennis Ritchie)& 肯·汤普森(Ken Thompson)发明C语言,率先建立了面向过程编程的规范。 C语言的故事——C语言本纪: https://zhuanlan.zhihu.com/p/61622264 本讲义 阅读全文
posted @ 2019-07-15 20:10 虎老狮 阅读(861) 评论(0) 推荐(0)
摘要: 排列组合介绍 排列,就是指从给定n个数的元素中取出指定m个数的元素,进行排序。 组合,则是指从给定n个数的元素中仅仅取出指定m个数的元素,不考虑排序。 全排列(permutation) 以数字为例,全排列就是从“第一个数字”起,“每个数字”分别与它“后面的数字”交换,复杂度为O(n!) 图示: 1. 阅读全文
posted @ 2019-07-15 19:55 虎老狮 阅读(498) 评论(0) 推荐(0)
摘要: 贪心算法 贪心算法:只顾眼前的苟且。 即在对问题求解时,总是做出在当前看来是最好的选择 如买苹果,专挑最大的买。 最优装载问题——加勒比海盗 货物重量:Wi={4,10,7,11,3,5,14,2} 海盗船载重:C 求如何拿货件数最多 阅读全文
posted @ 2019-07-15 19:43 虎老狮 阅读(587) 评论(0) 推荐(0)
摘要: 问题描述: 杨辉三角形又称Pascal三角形,它的第i+1行是(a+b)i的展开式的系数。 它的一个重要性质是:三角形中的每个数字等于它两肩上的数字相加。 下面给出了杨辉三角形的前4行: 1 1 1 1 2 1 1 3 3 1 给出n,输出它的前n行。 输入格式 输入包含一个数n。 输出格式 输出杨 阅读全文
posted @ 2019-07-15 19:41 虎老狮 阅读(1127) 评论(0) 推荐(0)
摘要: 求整数除法小数点后第n位开始的3位数 位数不足的补0,如0.125小数第3位后三位:0.12500→500 输入格式:a b n,空格分开,a是被除数,b是除数,n是小数后的位置 输出格式:3位数字,a÷b小数后第n位开始的3位数字 样例: 输入:1 8 1 输出:125 输入1 8 3 输出:50 阅读全文
posted @ 2019-07-15 19:39 虎老狮 阅读(427) 评论(0) 推荐(0)
摘要: Huffman树在编码中有着广泛的应用。在这里,我们只关心Huffman树的构造过程。 给出一列数{pi}={p0, p1, …, pn 1},用这列数构造Huffman树的过程如下: 1. 找到{pi}中最小的两个数,设为pa和pb,将pa和pb从{pi}中删除掉,然后将它们的和加入到{pi}中。 阅读全文
posted @ 2019-07-15 19:38 虎老狮 阅读(519) 评论(0) 推荐(0)
摘要: 快速排序(18JavaB5,9’) 以下代码可以从数组a[]中找出第k小的元素。 它使用了类似快速排序中的分治算法,期望时间复杂度是O(N)的。 请仔细阅读分析源码,填写划线部分缺失的内容。 2018JavaB组第5题的参考答案+注释如下所示: 阅读全文
posted @ 2019-07-15 19:37 虎老狮 阅读(549) 评论(0) 推荐(0)
摘要: 选美大赛 在选美大奖赛的半决胜赛现场,有一批选手参加比赛,比赛的规则是最后得分越高,名次越低。当半决决赛结束时,要在现场按照选手的出场顺序宣布最后得分和最后名次,获得相同分数的选手具有相同的名次,名次连续编号,不用考虑同名次的选手人数。例如: 选手序号: 1,2,3,4,5,6,7 选手得分: 5, 阅读全文
posted @ 2019-07-15 19:36 虎老狮 阅读(441) 评论(0) 推荐(0)
摘要: 剪邮票(16JavaB10) 如【图1】, 有12张连在一起的12生肖的邮票。 现在你要从中剪下5张来,要求必须是连着的。 (仅仅连接一个角不算相连) 比如,【图2】,【图3】中,粉红色所示部分就是合格的剪取。 请你计算,一共有多少种不同的剪取方法。 问题分析 按题目,从1开始计数的话: | 同行: 阅读全文
posted @ 2019-07-15 19:35 虎老狮 阅读(374) 评论(0) 推荐(0)
摘要: 压缩变换(16JavaB9) 小明最近在研究压缩算法。 他知道,压缩的时候如果能够使得数值很小,就能通过熵编码得到较高的压缩比。 然而,要使数值很小是一个挑战。 最近,小明需要压缩一些正整数的序列,这些序列的特点是,后面出现的数字很大可能是刚出现过不久的数字。对于这种特殊的序列,小明准备对序列做一个 阅读全文
posted @ 2019-07-15 19:31 虎老狮 阅读(440) 评论(0) 推荐(0)
摘要: 回文数、维密、约瑟夫环 回文数 问题描述: 123321是一个非常特殊的数,它从左边读和从右边读是一样的。输入一个正整数n, 编程求所有这样的五位和六位十进制数,满足各位数字之和等于n。 输入格式: 输入一行,包含一个正整数n。 输出格式: 按从小到大的顺序输出满足条件的整数,每个整数占一行。 样例 阅读全文
posted @ 2019-07-15 19:30 虎老狮 阅读(3486) 评论(0) 推荐(0)
摘要: 螺旋折线(18JB 7 19') 如图p1.pgn所示的螺旋折线经过平面上所有整点恰好一次。 对于整点(X, Y),我们定义它到原点的距离dis(X, Y)是从原点到(X, Y)的螺旋折线段的长度。 例如dis(0, 1)=3, dis( 2, 1)=9 给出整点坐标(X, Y),你能计算出dis( 阅读全文
posted @ 2019-07-15 19:29 虎老狮 阅读(591) 评论(0) 推荐(0)