![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C语言的经典面试题
ALfirewell
本人的目标是当一名嵌入式研发工程师,会把自己学习的历程以及自己的发现和心得记录下来,但愿最后能如愿以偿。
展开
-
红黑树-2 添加
前一篇博客介绍了红黑树的性质和旋转,这一片将具体介绍下红黑树的添加。在介绍红黑树的添加之前大家首先要理解这几点:1.红黑树在插入之前就已经是红黑树了2.当前要插入的节点必须是红色(不会影响黑高)3.父节点是红色的时候需要进行调整(父节点是红色它的孩子节点必须是黑色),祖父节点肯定是黑色的,叔父节点可能是红色可能是黑色。对于父节点和叔父节点都是红色的情况不需要进行左旋和右旋,可以直接通过改变颜色去保证红黑树。对于父节点是红色,叔父节点是黑色的情况必须通过旋转去保证红黑树。这种情况下还要区分当前插入原创 2020-09-20 23:34:11 · 126 阅读 · 0 评论 -
红黑树-1 介绍与旋转
红黑树是基于二叉树的一种非常重要的数据结构,它在二叉树的基础上加上了一下五点的限制,这也是红黑树的性质:1.每个节点是红色或者黑色2.根节点是黑色3.每个叶子节点是黑色4.如果一个节点是红色,那么它的两个孩子都是黑色5.对每个节点,从该节点到其子孙节点的所有路径上包含相同数目的黑节点这里重点要理解第四和五点根据这五点性质我们可以推断出第二张图是符合红黑树性质的。接下来介绍下红黑树的旋转:红黑树存在左旋和右旋两种,在插入节点和删除节点的时候需要进行旋转来调整红黑树使其始终满足上面介绍的五条原创 2020-09-20 23:07:33 · 231 阅读 · 0 评论 -
栈的原理与实现
栈是一种数据结构,它包括入栈和出栈,先入的放在最底下最后才会出栈。其实栈是非常简单和容易理解的,下面是我写的一个C语言小用例:#include <stdio.h>#include <stdlib.h>#include <assert.h>#define ALLOC_SIZE 512typedef int KEY_TYPE;typedef struct _stack{ KEY_TYPE *base; int top; int stack_size;}原创 2020-09-20 22:44:52 · 99 阅读 · 0 评论 -
快速排序的实现和总结
快速排序是在面试中经常被问到的一种排序,首先来介绍一下它的基本思想:选取一个哨兵(通常选择最左边的那个)作为一个关键元素,然后通过排序使得哨兵处于一个这样的位置:哨兵左边的数都比它要小,右边的数都比它要大,然后对其左边和右边的集合同样进行这样的操作,直至左右区间只有一个数为止。void quick_sort(int * data, int left, int right){ int i,j, key; if(left > right) return ; key = data[left]原创 2020-09-13 17:47:33 · 91 阅读 · 0 评论 -
希尔排序的实现与总结
希尔排序是经过分组的插入排序,那么怎么理解呢?在此之前我们先来再次认识一下插入排序。我们可以看到对于插入排序,前面的元素都是有序的,后面有新的元素插入进来时我们只需要找到对应的位置插入进来即可。void insert_sort(int * data, int length){ int i, j, temp; for(i = 1; i < length; i++) { temp = data[i]; for(j = i - 1; temp < data[j]; j--)原创 2020-09-13 14:39:47 · 194 阅读 · 0 评论 -
字符串对比判断
题目说起来很简单,你会读到两个字符串,每个字符串占据一行,每个字符串的长度均小于10000字符,而且第一个字符串的长度小于第二个字符串的。你的程序要找出第一个字符串在第二个字符串中出现的位置,输出这些位置,如果找不到,则输出-1。 注意,第一个字符的位置是0。 注意,第一个字符串在第二个字符串中的位置可能不止一处。 注意,字符串中可能含有空格。 注意,两个字符串的长度一定大于0。 ...原创 2018-03-27 19:02:52 · 424 阅读 · 1 评论 -
C语言中无符号整数和带符号的整数相加的结果
在C语言中,我们最常见的是整型与整型的相加,这里所说的整型都是带有符号的整数。 比如: 2+2 = 4; -1+5 = 4; 他们的类型都是int,即signed int,只不过我们在写代码时为了人为的方便而把signed给省略掉了。 我们通常在C语言中都是用%d进行输出的,那么大家有没有试过用%u来输出呢? 它的结果和用%d来输出是一样的吗? 我们都知道不论是int型还是float...原创 2018-03-21 17:16:59 · 5001 阅读 · 1 评论 -
const的含义 作用及应用
const关键字 const是constant的简写,只要一个变量前面用const来修饰,就意味着该变量里的数据可以被访问,不能被修改。const的几种用法: (1) 说明值常量 (2) 说明指针 (3) 说明函数参数及其返回值 (4) 说明类的常量和成员函数 (1)最简单 const int x = 10; x在程序运行过程中,永远等于10.其他的你是看看我给的链接 参考资...原创 2018-03-06 18:21:08 · 648 阅读 · 0 评论 -
什么是预编译?何时需要预编译?
什么是预编译:预编译又称为预处理 , 是做些代码文本的替换工作。 处理以# 开头的指令 , 比如拷贝 #include 包含的文件代码,#define 宏定义的替换 , 条件编译等,就是为编译做的预备工作的阶段。主要处理#开始的预编译指令,预编译指令指示了在程序正式编译前就由编译器进行的操作,可以放在程序中的任何位置。C 编译系统在对程序进行通常的编译之前,首先进行预处理。 c ...转载 2018-03-06 18:31:44 · 526 阅读 · 0 评论 -
数组和指针的区别
首先对于编译器而言,一个数组是一个地址,一个指针是一个地址的地址。数组要么在静态存储区被创建(如全局数组),要么在栈上被创建。数组名对应着(而不是指向)一块内存,其地址与容量在生命期内保持不变,只有数组的内容可以改变。例如:void main(void) { int a[10]; a ++;//error, a is left value,but can’t be chang...转载 2018-03-06 18:25:18 · 207 阅读 · 0 评论 -
C语言的经典面试题
例1:int main() { int i,k; for(i=0;k=1;i++,k++) { printf(“%d,%d”,i,k); } return 0; } 这个程序是一个死循环,原因在于for循环里的判断条件。 例2:#define SQR(x) x*x int main() { int a;原创 2017-12-06 01:43:06 · 431 阅读 · 0 评论 -
scanf和gets的用法和区别
scanf和gets的用法: 在C语言中,我们主要用scanf和gets这两个函数(在stdio.h文件中)进行输入。 首先来介绍下scanf函数: scanf在C语言中能对各种类型进行输入,同时也能对字符串输入。 格式如下: 输入整型:scanf(“%d”,&a) 在这里假设a是整型的。注意:对a要取地址 输入浮点型:scanf(“%f”,&a) 在这里假设a是浮点型的,也要对a取地址原创 2017-11-28 10:34:04 · 9773 阅读 · 0 评论 -
sizeof和strlen的区别
1.sizeof操作符的结果类型是size_t,它在头文件中typedef为unsigned int类型。 该类型保证能容纳实现所建立的最大对象的字节大小。 2.sizeof是算符,strlen是函数。 3.sizeof可以用类型做参数,strlen只能用char*做参数,且必须是以”\0”结尾的。 sizeof还可以用函数做参数,比如: short f(); printf(“%d转载 2017-11-23 17:49:08 · 406 阅读 · 0 评论 -
define和inline的区别
区别: 1.内联在函数编译时展开,而宏在预编译时展开。 2.编译时,内联函数可以直接被镶嵌到目标代码中,而宏定义只是一个简单的文本替换。 3.内联函数可以完成类型检查、语句是否正确等编译功能,宏定义则不可以。(宏定义不是函数,inline是函数)。 4.宏在定义时要小心处理宏参数,(一般情况是把参数用括弧括起来)。 举例:define1、宏定义只是简单的文本替换,所以注意将变量加上括号,例原创 2017-11-23 22:23:06 · 407 阅读 · 0 评论 -
字节对齐
一、什么是字节对齐,为什么要对齐?现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定类型变量的时候经常在特定的内存地址访问,这就需要各种类型数据按照一定的规则在空间上排列,而不是顺序的一个接一个的排放,这就是对齐。 对齐的作用和原因:各个硬件平台对存储空间的处理上有很大的不同。一些平台对某些特定类型的数据只能从某些特定地址开原创 2017-11-23 19:00:16 · 342 阅读 · 1 评论