
C
漫步的风暴
敏于思而慎于言
展开
-
leetcode[206]:反转链表 C语言解法
反转一个单链表。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL进阶:你可以迭代或递归地反转链表。你能否用两种方法解决这道题/** * Definition for singly-linked list. * struct ListNode { * ...原创 2019-03-24 11:35:58 · 516 阅读 · 0 评论 -
leetcode[2]:两数相加 C语言解法
给出两个非空的链表用来表示两个非负的整数。其中,它们各自的位数是按照逆序的方式存储的,并且它们的每个节点只能存储一位数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0开头。示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 -...原创 2019-03-24 11:36:58 · 966 阅读 · 0 评论 -
leetcode[1]:两数之和 C语言解法
给定一个整数数组nums和一个目标值target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]/**...原创 2019-03-24 11:37:04 · 638 阅读 · 0 评论 -
leetcode[21]:合并两个有序链表 C语言解法
/** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2) { ...原创 2019-03-24 11:37:09 · 414 阅读 · 0 评论 -
将一个输入字符串按照字符从小到大的顺序输出,并且剔除相同的字符串
#include <stdio.h>#include <string.h>#include <memory.h>/** @brief str_process 将输入的字符串中重复的部分剔除,并且排序输出* @param src_str 输入的源字符串* @param dest_str 处理后输出字符串* @return 成功:0;失败...原创 2019-03-24 11:37:14 · 4652 阅读 · 2 评论 -
递归函数及可变参数的几个经典编程练习
递归函数和可变参数函数的几个经典编程例子原创 2017-02-13 09:03:09 · 1654 阅读 · 0 评论 -
C和指针读书笔记(前四章)
C和指针这本书还是不错的,工作后深感基础需要进一步巩固,于是读了一遍,书中相关的例子和编程项目也做了一些,这里只给理论部分的总结。原创 2017-01-19 15:54:17 · 498 阅读 · 0 评论 -
找出1到1000中质数的个数
找出1到1000中质数的个数原创 2017-02-09 17:38:42 · 2143 阅读 · 0 评论 -
将一个字符串中的字符反向排列
将一个字符串中的字符反向排列原创 2017-02-09 17:36:22 · 1043 阅读 · 0 评论 -
编写一个函数,删除一个字符串中的子串
编写一个函数,删除一个字符串中的子串原创 2017-02-09 17:34:54 · 2734 阅读 · 0 评论 -
leetcode[3]:无重复字符的最长子串 C语言解法
给定一个字符串,请你找出其中不含有重复字符的最长子串的长度。示例1:输入: "abcabcbb"输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。示例 2:输入: "bbbbb"输出: 1解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。示例 3:输入: "pwwkew"输出: 3解释: 因为无重复字符的最...原创 2019-03-24 11:36:52 · 1566 阅读 · 1 评论 -
leetcode[7]:整数反转 C语言解法
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。示例1:输入: 123输出: 321示例 2:输入: -123输出: -321示例 3:输入: 120输出: 21注意:假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为[−231, 231− 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。...原创 2019-03-24 11:36:46 · 920 阅读 · 0 评论 -
leetcode[70]:爬楼梯 C语言解法
假设你正在爬楼梯。需要n阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定n是一个正整数。示例 1:输入: 2输出: 2解释: 有两种方法可以爬到楼顶。1. 1 阶 + 1 阶2. 2 阶示例 2:输入: 3输出: 3解释: 有三种方法可以爬到楼顶。1. 1 阶 + 1 阶 + 1 阶2. ...原创 2019-03-24 11:35:38 · 840 阅读 · 0 评论 -
leetcode[9]:回文数 C语言解法
判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。示例 1:输入: 121输出: true示例2:输入: -121输出: false解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。示例 3:输入: 10输出: false解释: 从右向左读, 为 01 。因此它不是一个回文...原创 2019-03-24 11:35:46 · 351 阅读 · 0 评论 -
leetcode[141]:环形链表 C语言解法
给定一个链表,判断链表中是否有环。为了表示给定链表中的环,我们使用整数pos来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果pos是-1,则在该链表中没有环。示例 1:输入:head = [3,2,0,-4], pos = 1输出:true解释:链表中有一个环,其尾部连接到第二个节点。示例2:输入:head = [1,2], pos =...原创 2019-03-24 11:35:51 · 941 阅读 · 0 评论 -
leetcode[83]:删除排序链表中的重复元素 C语言解法
给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。示例1:输入: 1->1->2输出: 1->2示例2:输入: 1->1->2->3->3输出: 1->2->3/** * Definition for singly-linked list. * struct ListNode { * ...原创 2019-03-24 11:36:04 · 733 阅读 · 0 评论 -
leetcode[617]:合并二叉树 C语言解法
给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠。你需要将他们合并为一个新的二叉树。合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否则不为NULL 的节点将直接作为新二叉树的节点。示例1:输入: Tree 1 Tree 2 ...原创 2019-03-24 11:36:10 · 792 阅读 · 0 评论 -
leetcode[442]:数组中重复的数据 C语言解法
给定一个整数数组 a,其中1 ≤ a[i] ≤n(n为数组长度), 其中有些元素出现两次而其他元素出现一次。找到所有出现两次的元素。你可以不用到任何额外空间并在O(n)时间复杂度内解决这个问题吗?示例:输入:[4,3,2,7,8,2,3,1]输出:[2,3]/** * Return an array of size *returnSize. * Note: ...原创 2019-03-24 11:36:16 · 710 阅读 · 0 评论 -
leetcode[392]:判断子序列 C语言解法
给定字符串s和t,判断s是否为t的子序列。你可以认为s和t中仅包含英文小写字母。字符串t可能会很长(长度 ~= 500,000),而s是个短字符串(长度 <=100)。字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace"是"abcde"的一个子序列,而"aec"不是)。示例1:s=...原创 2019-03-24 11:36:23 · 954 阅读 · 0 评论 -
leetcode[172]:阶乘后的0 C语言解法
给定一个整数n,返回n! 结果尾数中零的数量。示例 1:输入: 3输出: 0解释:3! = 6, 尾数中没有零。示例2:输入: 5输出: 1解释:5! = 120, 尾数中有 1 个零.int trailingZeroes(int n) { int num = 0; if(n < 5) { re...原创 2019-03-24 11:36:35 · 254 阅读 · 0 评论 -
leetcode[169]:求众数 C语言解法
给定一个大小为n的数组,找到其中的众数。众数是指在数组中出现次数大于⌊ n/2 ⌋的元素。你可以假设数组是非空的,并且给定的数组总是存在众数。示例1:输入: [3,2,3]输出: 3示例2:输入: [2,2,1,1,1,2,2]输出: 2int majorityElement(int* nums, int numsSize) { int nu...原创 2019-03-24 11:36:40 · 1509 阅读 · 0 评论 -
编写一个函数,它在一个字符串中进行搜索,查找所有在一个给定字符集合中出现的字符
编写一个函数,它在一个字符串中进行搜索,查找所有在一个给定字符集合中出现的字符原创 2017-02-09 17:33:04 · 3819 阅读 · 1 评论 -
深度搜索算法C语言实现--以走迷宫为例
深度搜索算法C语言实现,以走迷宫为例子原创 2016-12-29 15:37:36 · 6067 阅读 · 0 评论 -
c语言学习笔记(2)goto,void,extern和sizeof分析
摘要: 分析了goto的副作用,void的意义,void的指针类型的意义和用法,实现了memset,总结了extern的意义和使用方法,最后分析了sizeof的意义和用法。一、为什么不用goto 因为goto有可能跳过我们程序中需要执行的部分,破坏了结构化程序顺序执行的思路,在现代c当中已经越来越少的使用goto,而且最好剔除掉。可以看下面一段程序:#include原创 2015-09-21 18:37:58 · 1098 阅读 · 0 评论 -
c语言学习笔记(3)const和volatile以及const volatile int i=0分析
摘要: 分析了const和volatile的意义,const修饰数组,指针,函数参数和返回值的用法,最后解释了const volatile int i=0这个问题。一、const修饰变量的意义 在c语言中,const修饰的是只读变量,并不是一个常量,本质还是一个变量。const修饰的变量会占用内存空间,本质上const只对编译器有用,它告诉编译器,这个变量是只读的,不能对其进原创 2015-09-22 12:22:48 · 5037 阅读 · 0 评论 -
c语言学习笔记(11)宏定义使用与分析
摘要:总结了宏常量的用法,宏表达式及其与函数的优势对比,宏常量和表达式作用域,最后使用内置宏给出了一种编写使用日志宏的方法。一、宏常量 1.#define宏常量可以出现在代码的任何地方。 2.#define从本行开始,之后的代码都可以使用这个宏常量。 3.#define宏常量可以使用接续符来定义比较长的常量。 例如以下定义,编译器是不会报错的:原创 2015-10-10 00:17:47 · 754 阅读 · 0 评论 -
c语言学习笔记(1)基本数据类型及auto,register,static分析
摘要: 解释了c语言中什么是数据类型,什么是变量,他们的真正含义是什么。分析了属性关键字auto,register和static的用法。一、什么是数据类型 刚看视频的时候,我也理解为就是char,int这些东西,其实这些东西也是指定了我们后面变量他所占的内存的大小,所以数据类型其实是固定内存大小的别名。数据类型又是创建变量的模子。 比如我们char a;a是我们用模原创 2015-09-20 18:29:11 · 1389 阅读 · 0 评论 -
c语言学习笔记(15) 数组基础
摘要:总结了数组的概念,数组大小的计算方法,数组地址和数组名的关系,数组存在的一些盲点,最后用一个BUG实例对数组和指针的一个差别进行了分析。一、数组的概念 数组是相同类型变量的有序集合,比如我们定义一个数组int a[5],那么这个数组名字就叫a,a就代表数组元素中的第一个元素的起始地址,这个数组里面有五个元素,每个元素都是int类型的,其中a[0],a[1],a[2],a原创 2015-10-20 17:52:03 · 706 阅读 · 0 评论 -
c语言学习笔记(14)指针基础
摘要:总结了指针的本质,*的意义,以及传值调用和传址调用的根本区别,利用两个例程加深了理解。一、指针的本质 指针的本质也是一个变量,只是它里面存放的是一个内存的地址,指针也是需要占用内存空间的,按照平台不同,32位指针变量占四个字节,64位的话一般是8个字节,不同类型的指针变量都是这样。这是因为,我们指针既然是存放的内存的地址,那么理论上我们可以指向系统当中的任意一个内存,既原创 2015-10-16 20:06:49 · 691 阅读 · 0 评论 -
c语言学习笔记(10)编译器编译过程分析
摘要:总结了编译器编译的整个过程以及链接器的职责,分别介绍了每一步具体做了哪些事,最后通过一个实例演示了这个过程。一、整个编译过程描述 这里有一幅图,可以描述整个编译过程: 预处理:gcc –E file.c –o hello.i 1.处理所有的注释,以空格代替。 2.将所有的#define删除,并且展开所有的宏定义。 3.处理原创 2015-09-29 20:01:19 · 1085 阅读 · 0 评论 -
c语言学习笔记(9)优先级及类型转换分析
摘要:总结了c语言优先级易错的部分,隐式转换类型的规则,分析了一个实例。一、c语言易错优先级总结 如下表:优先级问题表达式实际结果.的优先级高于*,因此c引入了->消除该问题*p.f对p取偏移f,作为指针,然后进行解除引用操作*(p.f)[]高于*int *原创 2015-09-28 22:37:37 · 1616 阅读 · 0 评论 -
c语言学习笔记(8)位运算符,++,--运算符的用法
摘要:总结了位运算符,++,--运算符的用法,给出了一个使用异或方法巧解面试题的例子,分析了贪心法的规则。一、位运算符用法 c语言中的位运算符主要有以下几种: 使用的时候主要有以下几个注意点: 1.左移运算符将 2.右移运算符将>>将运算数的二进位右移,低位丢弃,高位补零。 3.避免位运算符,逻辑运算符和数学运算符出现在同原创 2015-09-28 17:45:33 · 5425 阅读 · 0 评论 -
c语言学习笔记(12)条件编译使用分析
摘要:总结了条件编译和if else的区别,#include在包含头文件时候的注意点,使用条件编译避免重复包含头文件,最后给出一个实例加深理解。一、什么是条件编译 我们在移植u-boot和linux内核的时候,经常会看到#ifdef…#endif或者#ifndef…#endif这样的代码,这个就是条件编译,总的来说: 1.条件编译行为类似if…else,都是条件原创 2015-10-11 21:15:16 · 1048 阅读 · 0 评论 -
c语言学习笔记(4)struct和union:柔性数组存储斐波那契数列以及union判断系统大小端
摘要:总结了空结构体所占内存大小的情况,分析了柔性数组的使用方法,利用柔性数组存储任意长度斐波那契数列,介绍了union和struct的区别,以及使用union判断系统大小端的模式。一、空struct所占内存大小 可以写一个程序验证一下,这里程序如下:#include struct _null{ }n1,n2; int main(void)原创 2015-09-23 11:26:44 · 1168 阅读 · 0 评论 -
C语言学习笔记(19) 多维数组和多维指针分析
摘要:总结了指向指针的指针的用法,以及这样使用的意义,分析了二维数组名,二维数组和二级指针的用法,文中用多个相关实例加深理解。一、指向指针的指针 我们都知道,指针其实也是一个变量,只是里面存放的是地址而已,所以指针本身也是有地址的,既然有地址,那么就可以用另外一个指针去存放,于是就有了指向指针的指针。 1.指针变量在内存中会占用一定的内存空间。 2.可以定原创 2015-12-07 16:34:25 · 895 阅读 · 0 评论 -
C语言学习笔记(21) 函数指针、回调函数及复杂指针阅读技巧
摘要:总结了函数类型的本质,回调函数的思想,以及负责指针阅读技巧右左法则。一、函数类型 1.C语言中的函数也有自己的类型,就像数组一样。 2.C语言中国的函数的类型由函数返回值,参数类型和参数个数共同决定,甚至包括参数的顺序。 3.例如:int add(int i,int j);的类型为int(int,int).int func1(double I,i原创 2015-12-17 22:20:18 · 1110 阅读 · 0 评论 -
C语言学习笔记(18) 指针数组和数组指针分析
摘要:总结了指针数组和数组指针的定义,以及main函数的入口参数的意义,每一个部分给出一个例子加深理解。一、三个问题 1.一维数组名代表了数组首元素的地址,二维数组名呢? 我的理解也是的,但是数组首元素的地址。 2.假设数组名为a,那么a和&a的地址值相同,意义不同,那么指向它们的指针类型相同吗? 答案是不同,这一点下面会解释到,因为a和&a的原创 2015-11-30 22:10:05 · 3196 阅读 · 2 评论 -
C语言学习笔记(17) 数组和指针分析
摘要:总结了数组的本质,通过实例阐述了a+1和&a+1的区别,指针的关系,比较运算,指出为什么只能进行相减运算及其意义,解释了数组与下标运算的优劣,解析了一道面试题,说明了数组和指针作为函数参数的时候需要注意的地方,最后总结了数组和指针的一些差别。一、数组的本质 数组是一段连续的内存空间,数组名指向数组首元素的地址。 数组占用的空间的大小为sizeof(array_原创 2015-11-19 16:30:55 · 860 阅读 · 0 评论 -
C语言学习笔记(20) 数组参数和指针参数分析
摘要:总结了数组指针传递给函数为什么会退化为指针,二维数组参数在传递的时候需要注意哪些地方,最后给出两个实例加深理解。一、数组作为参数为什么会退化为指针 1.C语言之中只会以值拷贝的方式传递参数,指针其实传递的也是值,只不过里面是地址罢了。那么加入我们需要向函数传递一个数组或者比较大的结构体的时候,是将整个数组都拷贝过去吗?是将整个结构体都拷贝过去吗?显然不是的。。。如果那样原创 2015-12-09 20:13:49 · 810 阅读 · 1 评论 -
C语言学习笔记(16) c语言字符串分析
摘要:总结了字符串的概念,字符串长度的计算方法,尝试实现了strlen和strcpy函数,最后介绍了受限和不受限的字符串函数。一、字符串的概念 1.从概念上讲,c语言中并没有字符串这一类型,它使用字符数组末尾加’\0’来模拟字符串。 2.C语言中的字符串是以’\0’结尾的字符数组。 3.C语言中的字符串可以分配于栈空间,堆空间或者只读存储区。这里的字符原创 2015-11-16 12:29:09 · 1965 阅读 · 0 评论