C语言
雨不落
希望自己可以坚持,坚持喜欢的事,坚持喜欢的人
展开
-
进击的小白——知识点:手把手学链表(C语言)
先来介绍关于链表的几个概念:首节点:存放第一个有效数据的节点。尾节点:存放最后一个有效数据的节点。头指针:头节点的数据类型与首节点的数据类型相同,并且头节点是首节点前面那个节点,并不存放数据,头节点的存在只是为了方便链表的操作。头指针:指向头节点的指针。尾指针:指向尾节点的指针。...原创 2019-03-11 16:00:27 · 653 阅读 · 0 评论 -
进击的小白Day028——遗传算法解决TSP问题(二)
写到交叉部分,调试成功。贴代码:#include <stdio.h>#include <stdlib.h>#include <memory.h>#include <math.h>#include原创 2019-03-07 19:01:28 · 161 阅读 · 0 评论 -
进击的小白Day031——LeetCode刷题笔记008:盛最多水的容器
题目来自LeetCode。题目描述:给定 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0)。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。说明:你不能倾斜容器,且 n 的值至少为 2。图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]...原创 2019-03-14 19:43:01 · 232 阅读 · 0 评论 -
进击的小白Day028——LeetCode刷题笔记004:最长公共前缀
题目来自LeetCode。题目描述:编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 “”。示例 1:输入: [“flower”,“flow”,“flight”]输出: “fl”示例 2:输入: [“dog”,“racecar”,“car”]输出: “”解释: 输入不存在公共前缀。说明:所有输入只包含小写字母 a-z 。贴代码:char* ...原创 2019-03-07 14:10:43 · 260 阅读 · 0 评论 -
进击的小白——知识点:能不能用二维指针做参数传递二维数组(数组名退化)
先说一下退化这个概念,退化出现在数组的引用过程中,当数组作为参数时会退化为指针,很好理解,在一定程度上,数组名可以等同于指针(一维数组)。C语言中,数组名作为参数传递给函数时,数组退化为指针,实际上传送的是指针而不是数组,因此就存在一个问题,传递进函数的不是数组本身,只是一个地址,因此,函数也不知道数组的大小,所以当需要数组大小的时候,需要再加一个参数来表示数组大小。一维和多维数组的情况:...原创 2019-03-07 13:33:54 · 531 阅读 · 1 评论 -
进击的小白——知识点:C语言里那些奇怪的表达式(未完待续)
if((i = -1) == -1)最开始看到这句话的时候,我觉得有两种理解,当然肯定有一种是错的,第一种理解是(i = -1)这个语句恒为1,这样理解是因为我觉得赋值语句执行的是赋值,但这条语句的返回值应该是复制成功的结果,就是1(True),第二种理解是先对i进行赋值,然后用i跟-1进行比较。用下面两端代码来测试是哪种情况:#include<stdio.h>void mai...原创 2019-03-04 19:34:47 · 166 阅读 · 0 评论 -
进击的小白——知识点:指针和malloc
先来理解几个概念:指针的类型:指的是指针指向的变量(值)的类型,如定义一个指针变量int *p = NULL,指针p指向一个int型的变量,即指针的类型是int型。指针指向的值的类型:与指针的类型相同,指针指向的值(变量)的类型就是指针的类型。指针的值的类型:指针本身是一个地址值,这个地址值对应的内存储存着指针所指向的变量,而不管指针的类型(上面两个概念)是什么,指针变量本身的值(地址)的...原创 2019-03-09 20:20:03 · 6443 阅读 · 4 评论 -
进击的小白Day031——LeetCode刷题笔记007:字符串转换整数 (atoi)
题目来自LeetCode。题目描述:请你来实现一个 atoi 函数,使其能将字符串转换成整数。首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。当我们寻找到的第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字组合起来,作为该整数的正负号;假如第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成整数。该字符串除了有效的整数部分之后...原创 2019-03-14 14:15:50 · 120 阅读 · 0 评论 -
进击的小白Day028——LeetCode刷题笔记003:回文数
题目来自LeetCode。题目描述:判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。示例 1:输入: 121输出: true示例 2:输入: -121输出: false解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。示例 3:输入: 10输出: false解释: 从右向左读, 为 01 。...原创 2019-03-07 09:16:40 · 181 阅读 · 0 评论 -
进击的小白Day031——LeetCode刷题笔记006:无重复字符的最长子串
题目来自LeetCode。题目描述:给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: “abcabcbb”输出: 3解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。示例 2:输入: “bbbbb”输出: 1解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。示例 3:输入: “pwwkew”输出: 3解释: 因...原创 2019-03-14 11:17:14 · 169 阅读 · 0 评论 -
进击的小白Day027——LeetCode刷题笔记002:整数反转(拆分整数、求整数的位数)
题目来自LeetCode。题目描述:给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。示例 1:输入: 123输出: 321示例 2:输入: -123输出: -321示例 3:输入: 120输出: 21用三句代码就可以实现:pop = x % 10; //取最后一个数x /= 10; //去掉最后一个数rev = rev * 10 +...原创 2019-03-06 11:38:10 · 239 阅读 · 0 评论 -
进击的小白——知识点:函数返回指针的应该指向什么变量
接上一篇博客。题目来自从LeetCode。本文部分内容转载自https://www.cnblogs.com/mascotxi/p/4394893.html#commentform。题目描述:给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素...原创 2019-03-05 13:34:57 · 535 阅读 · 1 评论 -
进击的小白Day029——遗传算法解决TSP问题(三)(完结)
完成,结果如下:收获:数组或者指针或者变量,用完后,如果之后的程序仍然需要用到而且与之前所得的值没有关系,一定要及时初始化,一面影响后面的使用。贴代码:#include <stdio.h>#include <stdlib.h>#include <memory.h>#include <math.h>#include <time....原创 2019-03-08 11:39:44 · 160 阅读 · 0 评论 -
进击的小白Day030——LeetCode刷题笔记005:两数相加
题目来自LeetCode。给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例:输入:(2 -&amp;gt; 4 -&amp;gt; 3) + (5 -&amp;gt; 6 -&amp;gt; 4)输出:7 ...原创 2019-03-13 09:06:25 · 162 阅读 · 0 评论 -
进击的小白Day038——LeetCode刷题笔记:知识点:报错总结(未完待续)
memset报错内存访问冲突解决办法:头文件中包含windows.h原创 2019-09-13 19:27:00 · 270 阅读 · 1 评论 -
进击的小白Day035——知识点:批量输入数值或字符串,并存入数组中
一次性输入一组浮点数,数值与数值之间用逗号隔开,输入完毕以换行符结束,将这一组数存入一个浮点数组中,输入的浮点数个数不定如:输入:1.2,2.4,6.0,7.8,9.66...原创 2019-04-10 09:34:24 · 967 阅读 · 0 评论 -
进击的小白Day033——LeetCode刷题笔记011:两两交换链表中的节点
题目来自LeetCode。题目描述:给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。示例:给定 1->2->3->4, 你应该返回 2->1->4->3。贴代码:struct ListNode* swapPairs(struct ListNode* head) { st...原创 2019-04-03 16:26:00 · 114 阅读 · 0 评论 -
进击的小白——LeetCode刷题总结(未完待续)
在写完一个算法的时候,尤其是算法中涉及到循环的时候,要考虑一下有没有哪些循环是完全无用的,如刷题笔记016中,每次循环可以先判断haystack中剩余长度是否足够容纳一个needle的长度,如果不够,那就没有继续循环的必要,直接返回flag即可,换一种说法就是,把i < (n2 - n1 +1)作为循环的条件,可以大大减少循环次数,提高程序运行效率。...原创 2019-04-12 11:48:20 · 263 阅读 · 0 评论 -
进击的小白Day036——LeetCode刷题笔记016:实现strStr()
题目来自LeetCode。题目描述:实现 strStr() 函数。给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回 -1。示例 1:输入: haystack = “hello”, needle = “ll”输出: 2示例 2:输入: haystack = “a...原创 2019-04-12 11:44:13 · 116 阅读 · 0 评论 -
进击的小白Day036——LeetCode刷题笔记015:移除元素
题目来自LeetCode。题目描述:给定一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。示例 1:给定 nums = [3,2,2,3], val = 3,函数应该返回新的长度 ...原创 2019-04-12 11:17:24 · 116 阅读 · 0 评论 -
进击的小白Day036——LeetCode刷题笔记014:删除排序数组中的重复项
题目来自LeetCode。题目描述:给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。示例 1:给定数组 nums = [1,1,2],函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。你不需要考虑数组中超出新长度后...原创 2019-04-12 10:26:59 · 105 阅读 · 0 评论 -
进击的小白Day032——LeetCode刷题笔记010:删除链表的倒数第N个节点
题目来自LeetCode。题目描述:给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。示例:给定一个链表: 1->2->3->4->5, 和 n = 2.当删除了倒数第二个节点后,链表变为 1->2->3->5.说明:给定的 n 保证是有效的。进阶:你能尝试使用一趟扫描实现吗?单指针遍历两次:struct ListNo...原创 2019-04-01 19:07:52 · 134 阅读 · 0 评论 -
进击的小白Day032——LeetCode刷题笔记009:合并两个有序链表
题目来自LeetCode。题目描述:将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4贴代码:struct ListNode* mergeTwoLists(struct ListNode* l1, struc...原创 2019-04-01 14:44:47 · 283 阅读 · 0 评论 -
进击的小白Day035——知识点:批量输入字符串,并循环右移(未完待续)
方法一:暴力法贴代码:#include <stdio.h>#include <string.h>void RightLoopMove(char *ss, int num){ int i = 0, j = 0; int n = strlen(ss); for (j = 0; j < num; j++) { char tmp = ss[n -...原创 2019-04-10 15:22:09 · 478 阅读 · 0 评论 -
进击的小白Day034——LeetCode刷题笔记013:删除排序链表中的重复元素
题目来自LeetCode。给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。示例 1:输入: 1->1->2输出: 1->2示例 2:输入: 1->1->2->3->3输出: 1->2->3贴代码:struct ListNode* deleteDuplicates(struct ListNode* head) {...原创 2019-04-04 11:00:22 · 207 阅读 · 0 评论 -
进击的小白Day034——LeetCode刷题笔记012:旋转链表
题目来自LeetCode。给定一个链表,旋转链表,将链表每个节点向右移动 k 个位置,其中 k 是非负数。示例 1:输入: 1->2->3->4->5->NULL, k = 2输出: 4->5->1->2->3->NULL解释:向右旋转 1 步: 5->1->2->3->4->NULL向右旋转 ...原创 2019-04-04 09:55:44 · 176 阅读 · 0 评论 -
进击的小白——国二笔记
字符串以’\0’结束答案为3,字符串s实际只有“0123xy”,‘\0’后面的直接忽略。sizeofsizeof(数组名)结果为数组所有元素所占内存之和。sizeof(*q)等价于sizeof(p[0]),是用指针表示数组。补充:sizeof(q)可能等于4也可能等于8,因为指针变量在32位计算机中占用4字节,在64位计算机中占用8字节。...原创 2019-03-18 19:11:30 · 405 阅读 · 0 评论 -
进击的小白——知识点:scanf与getchar、gets的区别
scanf原创 2019-03-18 16:08:01 · 10301 阅读 · 5 评论 -
进击的小白Day026——LeetCode刷题笔记001:两数之和(static、return的用法)
题目来自从LeetCode。题目描述:给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以...原创 2019-03-05 10:26:26 · 363 阅读 · 0 评论 -
进击的小白Day024——遗传算法解决TSP问题(一)
TSP问题,用遗传算法实现,今天只实现到种群初始化。贴代码:#include &amp;lt;stdio.h&amp;gt;#include &amp;lt;stdlib.h&amp;gt;#include &amp;lt;memory.h&amp;gt;#include &amp;lt;math.h&amp;gt;#include &amp;lt;ti原创 2019-01-28 19:30:31 · 215 阅读 · 0 评论 -
进击的小白Day014——计时器(完结)
今天因为老师那边例会需要,就自己diy了一个例会计时器。收获:键入指定按键中断循环,不用scanf,下面语句是键入Esc来中断循环的while (c != 27) { statement if (kbhit()) { c = getch(); } }...原创 2018-11-19 09:54:34 · 100 阅读 · 0 评论 -
进击的小白Day016——遗传算法(二)
以下四种方式实现通过指针形参对数组元素值进行改变。#include &amp;lt;stdio.h&amp;gt;void One_A(int *a){ int i; for (i = 0; i &amp;lt; 5; i++) { a[i] = i; }}void One_B(int b[]){ int i; for (i = 0; i &amp;lt; 5; i++) { b[i] = ...原创 2018-11-21 10:14:53 · 184 阅读 · 0 评论 -
进击的小白Day015——char与int互相转换
今天意外发现一个char和int互相转换的方法,但其实到现在我还不是能够很好的理解这个过程,所以写写笔记来理一下思路,花了接近一天的时间研究这个,是因为之前写的Socket程序中用到了char和int转换,但那里面是用函数来实现的,而且精度有损,这个方法相比之前的来说应该是可以达到无损转换的。今天先写一个char和int的转换,明天再写一下double和int的转换。今天才发现,现在自己的编程仅...原创 2018-11-20 19:08:11 · 1356 阅读 · 0 评论 -
进击的小白Day010——通讯录(三)
完善了前六个功能,还差最后一个排序。#include <stdio.h>#include <stdlib.h> #include <malloc.h> #define MAX 100/*建立结构体链表,固定结构,背下来*/typedef struct people{ char name[MAX]; char sex[MAX]; int ...原创 2018-11-12 15:28:56 · 132 阅读 · 0 评论 -
进击的小白Day011——基于TCP的Socket编程(六)
模式控制可以用BOOL来实现,比如BOOL hasMsg = FALSE;statement1if (!hasMsg){ statement2}原创 2018-11-14 09:23:21 · 205 阅读 · 0 评论 -
进击的小白Day012——遗传算法(一)
收获:要想子函数直接对主函数中多个值产生影响,可以考虑以地址作为形参, 比如希望子函数运行后产生一个数组,可以将主函数中的数组名作为子函数的形参,在子函数中以地址的形式影响主函数中的数值。...原创 2018-11-15 18:23:05 · 185 阅读 · 0 评论 -
进击的小白Day007——通讯录(一)
今天来diy一个通讯录,功能需求是从网上找的,然后这些功能恰好需要用到结构体、指针、链表这些功能,恰好可以练练手。通讯录可以用来存储1000个人的信息,每个人的信息包括:姓名、性别、年龄、电话、住址实现功能:添加联系人信息删除指定联系人信息修改指定联系人信息查找指定联系人信息显示所有联系人信息清空所有联系人以名字排序所有联系人今天只实现了1和5的功能,其他的明天继续,贴代...原创 2018-11-08 17:46:41 · 175 阅读 · 0 评论 -
进击的小白Day009——基于TCP的Socket编程(五)
还是这个程序,继续完善继续加功能。收获:单步的时候,遇到scanf会停止,可以在scanf后面加上getchar,就可以正常单步原创 2018-11-11 18:59:08 · 110 阅读 · 0 评论 -
进击的小白Day006——计算器(二)(完结)
今天的第一篇是用来补昨天的,不知道为啥昨天写的没有保存。今天写的比较少,只是在原来的基础上夹了一个幂乘,修复了选择运算模式的时候输入浮点数出错的问题,然后把所有整形运算扩充到可以进行浮点运算。贴代码:#define _CRT_SECURE_NO_WARNINGS /*预定义常量,解决scanf不安全的报错,需要放在#include &lt;stdio.h&gt;之前*/#include &...原创 2018-11-08 09:38:06 · 122 阅读 · 0 评论 -
进击的小白Day005——基于TCP的Socket编程(四)
接着昨天的继续。收获的经验:对于一些新的编译器,像VS2017,可以直接选中某个变量进行改名,而一些比较老的编译器只能用文本替换功能,但文本替换就会存在一个问题,替换短字节时,一些长字节有可能会包含这些短字节从而一起被替换,导致出错,如想要替换end,结果send中也包含end,那send也会一起被替换。...原创 2018-11-05 15:04:41 · 117 阅读 · 0 评论