嵌入式软件 面经 笔试题 数据结构与算法篇
5. 数据 结构与 算法 (17道)
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.6 堆和栈的的区别?
数据 结构的堆和栈 | 栈是一种先进后出的 数据 结构。堆是一种经过 排序 的树形 数据 结构(通常是二叉堆),每个结点都有一个值,根结点的值最小或最大,常用来实现优先队列,堆的存储是随意的。 |
C 语言内存分配的堆和栈 | 栈是向下生长的,栈中分配函数参数和局部变量,其分配方式类似于 数据 结构中的栈。堆是向上生长的,堆中分配程序员申请的内存空间(一旦忘记释放会造成内存泄漏),其分配方式类似于 数据 结构中的 链表 。 |