
笔试专栏
文章平均质量分 56
KimLinks
服务器Linux,嵌入式,STM32都略有涉及,希望可以一起学习进步!
展开
-
二叉树:前序遍历/中序遍历/后序遍历—代码实现
二叉树:前序遍历/中序遍历/后序遍历—代码实现说明搭配上一篇文章一起食用更佳: 二叉树的遍历_一看就会系列代码实现初始化二叉树函数:void BinaryTree(void)前序遍历函数:void TraverseTree_Preorder(struct BinaryTreeNode* root)中序遍历函数:void TraverseTree_Inorder(struct BinaryTreeNode* root)后序遍历函数:void TraverseTree_Postord原创 2022-05-30 06:34:50 · 329 阅读 · 0 评论 -
二叉树的遍历_一看就会系列
二叉树的遍历_一看就会系列遍历方法:先序遍历: 根节点、左节点、右节点(根左右)中序遍历: 左节点、根节点、右节点(左根右)后序遍历: 左节点、右节点、根节点(左右根)对于每一个结点的查看都是“先左后右”,注意:对象是每个子树。遍历操作:先序遍历:根左右=== 整棵树 ===根节点:【A】左节点:【B 子树】根节点:【B】左节点:NULL右节点:【C 子树】根节点:【C】左节点:【D】右节点:【E】右节点:【F 子树】根节原创 2022-05-30 05:44:22 · 193 阅读 · 0 评论 -
二叉树的基本概念
二叉树的基本概念二叉树的定义:N(N > 0)个节点的有限集合,由一个根节点以及两颗互不相交的、分别称为左子树和右子树的二叉树组成。二叉树的结构特点:每个节点最多只有两棵子树 ,不存在度大于2的节点(1 : 2);左子树和右子树次序不能颠倒(有序树)二叉树的分类满二叉树一颗深度为k,且有 2k-1个节点的二叉树完全二叉树除最后一层外,每一层上的节点数均达到最大值,在最后一层上只缺少右边的若干接点。一个满二叉树一定是一个完全二叉树,但是一个完全二叉树不一定是满二叉树。二叉原创 2022-05-30 05:13:39 · 276 阅读 · 0 评论 -
树的基本概念
数据结构:树的基本概念原创 2022-05-30 04:32:02 · 198 阅读 · 0 评论 -
用两个栈实现队列 及 两个队列实现栈功能
前言最近笔试遇到这个问题,感觉蛮有意思的,分析看看实现一、问:用两个栈实现一个队列的功能,要求给出算法和思路示意图答:设2个栈A,B,初始化为空入队:将新元素push入栈A;出队:(1) 判断栈B是否为空;(2) 如果不为空,则将栈A中所有元素依次pop出并push到栈B;(3) 将栈B的栈顶元素pop出;说明:利用栈的两次先进后出实现队列的先进先出还是蛮有意思的。同时,这样实现的队列入队和出队的平摊复杂度都还是0(1)二、问:用两个队列实现一个栈的功能原创 2020-08-27 18:42:03 · 368 阅读 · 0 评论 -
嵌入式软件工程师岗位基础题(2)
自加自减a++:先执行a,之后再加1。++a:先加上1,再执行a。例程:请写出下列代码的输入内容#include <stdio.h>int main(){ int a,b,c,d; a = 10; b = a++; c = ++a; d = 10*a++; printf("b, c, d: %d, %d, %d\n",b,c,d); return 0;}答: 10, 12, 120当出现难以区分的若干个“+”或“-”组成运算符串时,C语言规定:从左到右取尽可能原创 2020-08-25 00:47:18 · 270 阅读 · 0 评论 -
嵌入式软件工程师岗位笔试、面试题(1)
一、前言最近在找嵌入式软件开发岗位,由于第一次面临秋招,所以准备做个长文,将一些可能会问的、考的包括C语言问题记录下来。二、经典面试题预处理和宏用预处理指令 #define 声明一个常数,用于表明1年中有多少秒(不考虑闰年)#define SECONDS_PER_YEAR (60*60*24*365)UL这个计算会使16位机的整形数溢出,需要使用长整型L#define 和 typedef 的区别宏定义中#和##的使用...原创 2020-08-24 09:22:26 · 2344 阅读 · 0 评论 -
进程与线程的理解及区别
区别进程:资源分配的最小单位线程:程序运行的最小单位(资源调度的最小单位)进程有自己的地址空间,当一个进程建立,系统就会为它分配地址空间,而线程是共享进程的数据,使用相同的地址空间。一个进程中可以包含多个线程,但是至少有一个线程。一个进程死掉不会影响其他进程,进程与进程之间相互独立,但是一个线程死掉,整个进程都死了。线程之间的通信更加方便,同一进程下的线程共享全局变量,静态变量等,而进程间通信需要以IPC方式进行。...原创 2020-08-23 12:37:01 · 628 阅读 · 0 评论 -
内存空间分布及堆栈的区别
内存空间分布 内存模型(4G) 大小 内核空间(应用不可访问) 约1G 栈空间(局部变量) 约3G 堆空间(申请的内存空间(malloc)) 全局的数据空间(static)(初始化、未初始化) 代码段(只读数据段) 起始地址 0x00 数据段 = 全局 + 只读内存中的栈区处于相对高的地址,如果以地址的增长的方向为上的话,栈地址是向原创 2020-08-22 00:24:40 · 794 阅读 · 2 评论 -
#define和typedef 区别与用法
一、前言虽然都是为一种类型创建自定义的名字,但之间还是有很打的差别的。eg:#define my_int inttypedef int my_int二、typedef的用法1. 用途一:用作同时声明指针类型的多个对象,比如:int *pa,pb;//相当于int *pa;int pb;这里相当于只定义了一个指向int型变量的指针pa,而pb是int整型变量,不是指针。但是typedef可以实现定义多个指针类型变量typedef (int*) P_INT;P_INT pa,原创 2020-08-21 00:30:37 · 583 阅读 · 0 评论 -
C语言:指针函数和函数指针的理解
前言关于指针数组,数组指针的解释:C语言:指针数组和数组指针的理解正文定义// 正常函数int fun(int x, int y);// 指针函数int *fun(int x, int y);// 函数指针int (*fun)(int x, int y);** 指针函数本质是一个函数,其返回值为指针。**** 函数指针本质是一个指针,其指向一个函数。**正常函数:函数名为fun,两个形参为(int x, int y),返回值为int整形。声明格式:类型标识符 函数名(参数原创 2020-08-20 23:02:54 · 357 阅读 · 2 评论 -
C语言的宏定义中#和##使用与区别
解释#:“字符串化”,把#后面的参数变为 字符串##:连接,把##前面和后面的参数连接在一起举例#include <stdio.h>// 转字符串的宏定义 #define STR(s) #s// 连接的宏定义 #define CON(a,b) (a##_love_##b)int main(){ printf("After STR: %s\n",STR(Hello)); printf("After CON: %s\n",CON(I,you)); ret原创 2020-08-20 01:15:01 · 605 阅读 · 0 评论 -
C语言:指针数组和数组指针的理解
概念int p0[5];int *p1[5]; //指针数组int (*p2)[5]; //数组指针运算符优先级:** () > [] > ***对于int p0[]来说,p0先与[]组合构成一个数组,数组名叫p0 ,而int 修饰的是数组内的内容,即每次数组的元素都是int类型的,改数组包含5个指向int整形的数据。对于 int *p1[5] 而言,因为[]的优先级大于*,所以,p1先和[]结合构成数组,数组名为p1,而此时 int * 就相当于...原创 2020-06-07 15:03:05 · 350 阅读 · 0 评论