C语言
夏夕阳
这个作者很懒,什么都没留下…
展开
-
求一个数字二进制中1的个数
1.一个很简单的思路,把每一位与1相与如果结果是1,就代表这一位是1,相反是0int BinaryNumOne1(int num){ int count = 0; while (num) { if (num & 1) { count++; } num = num >> 1; } return count;}原创 2017-03-21 21:09:25 · 357 阅读 · 0 评论 -
二叉树后序遍历
递归版本:void _PostOrderR(Node* pRoot) { //递归出口 if (NULL == pRoot) return; //遍历左子树 _PostOrderR(pRoot->LC); //遍历右子树 _PostOrderR(pRoot->RC); cout data << " "; }非递归版本:void _PostOrd原创 2017-05-06 00:37:33 · 365 阅读 · 0 评论 -
求两个单链表的交点(可能带环)
先简单分析:两个单链表相交分如图几种情况:实现如下:原创 2017-03-15 21:38:01 · 698 阅读 · 0 评论 -
C语言编译连接过程和宏
C语言代码到二进制代码中间的四个转换:1.预处理(宏替换、取注释、头文件展开、条件编译) 对应的linux指令(gcc -E test.c -o test.i)//E预处理指令,在预处理之后停止,生成test.i文件2.编译 (C语言代码 转换为 汇编代码) (gcc -S test.i -o test.s)//S编译指令,在编译之后停止,生成test.s文件原创 2016-11-02 20:41:15 · 777 阅读 · 0 评论 -
浮点数在内存中的存储方式
浮点数类型包括float、double、long double在这里以float为例。先看一段代码:#include#includeint main(){ int a = 9; float *pa = (float *)&a; printf("a = %d\n", a); printf("*pa = %f\n", *pa); *pa = 9.0; printf("a原创 2016-11-05 17:53:49 · 10230 阅读 · 3 评论 -
一组数字中,有两个数字出现一次,剩下数字出现两次,求这两个数
两个数不相同,则说明这两个数字的异或结果肯定不为0把两个数异或结果从低位到高位第一次不同的位置1,其他位置0,就有一个000...01000...的结果如果数组中有数字 & 这个数为0,则说明这个数有可能为单独出现的数字中的一个相反如果不为0,则说明有可能是另一个单独出现的数字然后把两组分出来的结果分别异或就得到了俩个不同的数字。#include#includevoid F原创 2016-11-14 14:45:23 · 725 阅读 · 0 评论 -
函数调用原理——栈帧
函数调用原理————栈帧1.栈栈是向下生长的,也就是由内存高地址-》低地址的。栈有自己的栈顶指针和栈底指针。ebp : 称为“基址指针”,在未改变之前一直指向栈底esp : 称为“栈指针” , 随着数据的入栈和出栈移动,也就是说一直指向的是栈顶2.了解一些简单的汇编指令call(函数调用) : 先将当前指令的下一条指令地址压栈,然后跳转到被调用的函数处。ret原创 2016-11-18 16:55:57 · 612 阅读 · 0 评论 -
可变参数列表
有一些函数希望能在不同的情况下接受一些数量不同的变量,比如说printf。为了解决这样的问题,C语言引入了可变参数列表的概念!可变参数的实现:可变参数列表是通过宏来实现的,这些宏定义在stdarg.h头文件中。在这个头文件中,声明了一个类型va_list,和三个宏,va_start、va_arg、va_end。①首先在函数里定义一具va_list型的变量,这个变量是指向原创 2016-11-26 21:58:44 · 350 阅读 · 0 评论 -
链表实现
////////////////////////////////////////////////////初始化#include #include #include void InitList(PNode *pHead){ *pHead = NULL;}//创建新节点PNode BuyNode(DataType data){ PNode pCur = (PNo原创 2017-03-12 21:54:17 · 280 阅读 · 0 评论 -
求带环单链表的入口点
我们可以设置两个指针,pFast和pSlow开始时都指向头结点,然后pFast一次向后移动两个节点,pSlow一次向后移动一个节点直到他们相遇这样我们就得到了一个相遇点,如上图所示:我们可以得到这样一个结论:2(L+x) = L + nR + x L + x = nR取极值n=1可得: L = R - x;也就是说从相遇点到交点的距离和头结点到交点的距离相等然后把原创 2017-03-15 16:14:03 · 473 阅读 · 0 评论 -
用冒泡排序模拟实现qsort
在学习使用过qsort之后,一直在想是否能用其他的排序算法去模拟实现它的功能,把自己的实现写出来,也是对自己的一种总结吧。因为模拟是实现qsort,实现原理与qsort基本相同所以,给出和它一样的参数列表。void BubbleSortNoType(void *arr, int dataNum, int typeSize, Fun fun)//数组地址,元素个数,元素类型大小,比较原创 2017-03-22 22:05:18 · 480 阅读 · 0 评论 -
字符串替换空格: 请实现一个函数,把字符数组中的每个空格替换成“%20”。 例如输入“we are happy.”,则输出“we are happy.”
#include #include #include #pragma warning(disable:4996)void str_switch(char *start, char *end){ assert(start); assert(end); while (start < end) { *start ^= *end;原创 2016-11-06 14:23:21 · 1196 阅读 · 0 评论