20210404面试问题总结

本文探讨了结构体与共用体的区别,共用体作为一种节省空间的数据结构,其成员共享内存。同时讲解了大端小端的概念。完全二叉树的叶子节点数量与总节点的关系被详细阐述。另外,还讨论了宏定义的常见错误以及堆和栈在数据结构和内存管理中的差异。堆用于动态内存分配,而栈由编译器自动管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

结构体和共用体的区别

结构体不再展开说明,具体对昨天面试问题中题目涉及知识点进行补充。
补充:同种结构体可以直接进行整个附值。

共用体

union 叫共用体,又叫联合、联合体。“联合体”是一种特殊的类,也是一种构造类型的数据结构。
这些数据共享同一段内存,以达到节省空间的目的。

关于大端小端

大端:高位字节放在地地址
小端:低位字节放在高地址
题目:在这里插入图片描述
题目1链接

注意:32位和64位表示CPU一次能处理的最大位数。但是各种数据(绝大多数,除了long)类型占用的字节数是相同的.
这个问题详细解答

字符串占空间问题

题目

完全二叉树节点关系

棵深度为k的有n个结点的二叉树,对树中的结点按从上至下、从左到右的顺序进行编号,如果编号为i(1≤i≤n)的结点与满二叉树中编号为i的结点在二叉树中的位置相同,则这棵二叉树称为完全二叉树。
在这里插入图片描述
完全二叉树的总结点数目和叶子结点个数关系:

如果是偶数个节点,叶子节点等于总节点除以2, 即 N % 2==0, n = N/2
如果是奇数个叶子节点等于(总节点+1)除以2, 即 N % 2 == 1, n = (N+1)/2
即向上取整。
推导可参考:https://blog.csdn.net/stpeace/article/details/40210563

题目:
一个完全二叉树有770个节点,那么其叶子的个数为:385个

关于宏定义的易错题

在这里插入图片描述

答案:宏是完全的文本替换,宏替换时容易犯的错误。使用宏时,带上括号是安全的做法。3*5+4=19,故选D

堆(heap)内存与栈(stack)内存的区别

首先区别堆栈分别在数据结构中的定义和在内存中定义的区别:

数据结构中描述堆栈:

堆(heap):是一种非连续的树形存储数据结构,每个节点存在一个值,整个树是经过排序的,特点是根节点最小(小顶堆)或根节点最大(大顶堆),且根节点的两个子树也是一个堆。常用来实现优先队列,存取随意。

栈(stack):是一种连续存储的数据结构,具有先进后出的性质。通常的操作有入栈(压栈),出栈和栈顶元素。想要读取某个元素就要将之前的元素全部出栈,才能完成。

原文链接:https://blog.youkuaiyun.com/lj130lj/article/details/83690820

内存中的栈区与堆区:

内存:计算机中的随机存储器(RAM),程序都在这里运行。
在这里插入图片描述
栈内存:编译器自动分配和释放,存放函数的参数,局部变量,临时变量等等。

堆内存:为成员分配和释放,由程序员自己申请,自己释放。如果没有手动释放,再程序结束时由操作系统自动回收,稍有不慎会发生内存泄漏,典型为使用new申请堆内存
其他区别参考这个博主的:https://blog.youkuaiyun.com/lj130lj/article/details/83690820

完成,后续任务,每天有空都要刷刷面试题库:https://www.nowcoder.com/questionCenter?mutiTagIds=640

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

gylagyl97

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值