前言:被面试官问道什么是链表?应用场景有哪些?我晕了,赶紧来总结一下。
链表
1、什么是链表?
链表是一种常用的数据结构,通常由一系列结点组成,每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。
struct ListNode
{
double value;//节点的数据部分
ListNode *next;//指向下一个节点的后继指针
ListNode(double valuel, ListNode *nextl)
{
value = value1;
next = next1;
}
};
2、链表与数组的区别?
数组: 在内存中是连续存储的,地址连续,查找效率高。但是在定义时就必须申请一段连续的内存空间,在运行时空间大小不会随需要进行增减。数据量大,可能造成越界;数据量小,可能造成内存浪费。
链表: 在内存中是离散存储的,可以根据需要动态申请和删除内存空间。对于数据增加和删除以及插入比数组灵活。还有就是链表中数据在内存中可以在任意的位置,通过应用来关联数据
3、数组、链表应用场景有哪些?
数组应用场景:
- 数据比较少;
- 经常做的运算是按序号访问数据元素;
- 构建的线性表较稳定
链表应用场景:
- 对线性表的长度或者规模难以估计;
- 频繁做插入删除操作;
- 构建动态性比较强的线性表。
二叉树
1、什么是二叉树?
简单地理解,满足以下两个条件的树就是二叉树:
1)本身是有序树;
2)树中包含的各个节点的度不能超过 2,即只能是 0、1 或者 2;
二叉树是一棵空树,或者是一棵由一个根节点和两棵互不相交的,分别称作根的左子树和右子树组成的非空树;左子树和右子树又同样都是二叉树。
2、什么是满二叉树?
在二叉树中,如果除了叶子节点,其他节点的度都为2 ,则该二叉树就是满二叉树。
3、完全二叉树
如果二叉树中除去最后一层节点为满二叉树,且最后一层的结点依次从左到右分布,则此二叉树被称为完全二叉树。
4、二叉树应用场景
海量数据并发查询,二叉树复杂度是O(K+LgN)。二叉排序树就既有链表的好处,也有数组的好处, 在处理大批量的动态的数据是比较有用。