1、C\C++中的内存分配问题。
C\C++程序中涉及到的内存大致分为3种情况:
- 堆栈区(stack),由编译器自动分配,存放函数的参数列表,局部变量等,其操作方法类似于数据结构的栈。
- 堆区(heap),一般由程序员动态申请的内存, 由程序员释放空间,或者在程序结束的时候由操作系统回收资源,其操作方法类似于数据结构的链表。
- 全局区(静态存储区),一般存放全局变量和静态变量,程序结束后由系统自己释放。
- 文字常量去,存放常量字符串等,由系统释放。
- 程序代码区,存放程序的二进制代码。
c语言中与内存申请相关的函数有:alloca,calloc, malloc, realloc, free.
其中alloca是向栈中申请内存,无需释放,malloc是向堆中申请内存,并没有对申请的内存块进行初始化,所以一般用memset函数进行初始化,memset()函数原型:
void *memset(void *s, int ch, size_t n);
realloc是对malloc申请的内存大小进行调整,用free进行释放内存。calloc申请的内存初始化为0。
C++中用new、delete操作符。用new申请的内存必须用delete,两者配合使用。
3、delete和delete []的区别
delete 释放一次,调用一次析构函数,而delete []针对对象数组形式,有多少个对象就调用多少次析构函数。
4、二叉平衡树和满二叉树的区别。
平衡二叉树(Balanced Binary Tree)又被称为AVL树(有别于AVL算法),且具有以下性质:它是一 棵空树或它的左右两个子树的高度差的绝对 值不超过1,并且左右两个子树都是一棵平衡二叉树。
除最后一层无任何子节点外,每一层上的所有结点都有两个子结点的二叉树。
5、无向图与有向图的区别。
无向图的边看成是两个方向,有向图的边只有一种方向,如果用邻接矩阵来表示,无向图是对称矩阵,有向图不一定是。