嵌入式软件 面经 笔试题 数据结构与算法篇

5.  数据  结构与  算法  (17道) 

5.1   数组与  链表   的区别?
(1)数组的元素个数在定义时就必须确定,且元素的类型必须一致;而  链表   的元素个数自由,且元素内可以有不同类型的  数据  。 
(2)数组的元素在内存中是按顺序存储的,而  链表   的元素是随机存储的。 
(3)要访问数组的元素可以按下标索引来访问,速度比较快;如果对它进行插入/删除操作的话,就得移动很多元素,所以对数组进行插入/删除操作效率很低。由于  链表   是随机存储的,如果要访问  链表   中的某个元素的话,那就得从  链表   的头逐个遍历,直到找到所需要的元素为止,所以  链表   的随机访问的效率就比数组要低;  链表   在插入/删除操作上有很高的效率(相对数组)。一句话总结就是:数组的访问效率高,而  链表   的插入/删除效率高。 

5.2 a = b * 2;  a = b / 4;  a = b % 8;  a = b / 8 * 8 + b % 4 ;  a = b * 15; 

效率最高的  算法   

答案:

a = b * 2

a = b << 1;

a = b / 4

a = b >> 2;

a = b % 8

a = b & 7;  // 7 =   0b111 

a = b / 8 * 8 + b % 4

a = ((b >> 3) << 3) + (b & 3);  // 3 = 0b11

a = b * 15

a = (b << 4) - b

解读:*、/、%分别可以用<<、>>、&来实现,效率更高。 


5.3 C   语言程序代码优化方法
(1)选择合适的  数据   结构与  算法   ; 
(2)使用尽量小的  数据   类型; 
(3)使用自加、自减指令; 
(4)用移位实现乘除法运算; 
(5)求余运算用&(如a=a%8改为a=a&7); 
(6)平方运算用*(如a=pow(a,2.0)改为a=a*a); 
(7)延时函数的自加改为自减; 
(8)switch语句中根据发生频率来进行case排序   ; 
(9)减少运算的强度。 

5.4   时间换空间、空间换时间的例子?
(1)时间换空间:冒泡  排序   。 
(2)空间换时间:快速  排序   。 

5.5   什么是满  二叉树   、完全  二叉树   、 平衡二叉树   ?
(1)当一个树每一层的结点个数都达到最大时,这个树是满  二叉树   。 
(2)当一个树除了最后一层外其他每一层的结点数都达到最大,且最后一层的叶子结点都靠左排列时,这个树是完全  二叉树   。满  二叉树   是一种特殊的完全  二叉树   。 
(3)当且仅当一个树两个子树的高度差不超过1时,这个树是  平衡二叉树   。 

5.6  堆和栈的的区别?

数据   结构的堆和栈

栈是一种先进后出的  数据 结构。堆是一种经过  排序 的树形  数据   结构(通常是二叉堆),每个结点都有一个值,根结点的值最小或最大,常用来实现优先队列,堆的存储是随意的。

C  语言内存分配的堆和栈

栈是向下生长的,栈中分配函数参数和局部变量,其分配方式类似于  数据   结构中的栈。堆是向上生长的,堆中分配程序员申请的内存空间(一旦忘记释放会造成内存泄漏),其分配方式类似于  数据   结构中的  链表  。


以上内容摘自牛客官方专刊《嵌入式岗位笔试面试真题讲解》,该专刊不仅有真题讲解,还有经验分享,不清楚嵌入式该学什么的同学,想找嵌入式实习/正式工作的同学,都可以来看看:           


引流:  华为   、  小米   、    OPPO、VIVO、荣耀、一加、     CVTE、    大疆 、insta360影石、    美的 、    TCL    、 海信、创维、烽火、 比亚迪   、吉利、长安、大众、   经纬恒润 、小鹏、    图森未来、    百度 、     滴滴、蔚来、理想、 联发科、    紫光展锐 、全志、     寒武纪 、    晶晨半导体 、汇顶、     华为、   中兴、     浪潮 、    TP-LINK、讯飞、商汤、     海康威视 、浙江   大华     、360、小马智行、    元戎启行       、    深信服       、移动、联通、电信、  旷视   、  四维图新   、  中芯国际  、复旦微电子。 
#面经##秋招##嵌入式##嵌入式招聘嵌入式面经CVTE##软件开发#
全部评论
1 回复
分享
发布于 2022-09-19 21:44 广东

相关推荐

7 83 评论
分享
牛客网
牛客企业服务