一、基本概念
- 什么是线性结构和非线性结构,举例?线性结构是一个有序数据元素的集合,元素之间一对一关系,即除了第一个和最后一个元素外,其他元素首尾相接,如线性表、栈、队列、数组;非线性结构每个元素可能与零或多个其他元素发生关系,如二维数组、树、图等
- 数据存储结构分类?顺序(随机存取)、链式(顺序存取)、索引、散列
- 线性表的存储结构有哪两种,分别是如何存取的?顺序存储结构,随机存取;链式存储结构,顺序存取
- 什么是广义表?广义表的表头表尾是什么?又称列表(Lists),是一种非线性结构,表中的元素可以有自己的结构;表中第一个元素为表头,其他元素组成的表为表尾
- 单链表中增加一个头结点的目的是?使得空链表与非空链表的处理一致,方便了链表开始结点的插入和删除操作(与头指针区分,头指针指向链表第一个结点,无论有无头结点)
- 什么是静态链表,在c中如何实现?用数组描述的链表;结构体数组,结构体变量包括数据和游标,游标指向下一个元素在数组中的位置
- 什么是跳表,解决了什么问题?多级索引链表,可向有序链表中快速插入新结点(时间O(log(N)),空间O(N))
- 栈与队列的区别?栈的插入和删除在栈顶,需要一个指针;队列的插入在队尾,删除在队头,需要两个指针
- 循环队列解决了什么问题?解决了队列用数组存储时的“假溢出”现象
- 树的度指什么?结点拥有的子树个数称为结点的度,树中各结点的度的最大值为树的度
- 什么是二叉树,和普通树的区别,用来解决什么问题?每个节点最多有两个子树的树。普通树的结点个数至少为1,二叉树可以为0;普通树结点最大分支无限制,二叉树最多为2;普通树结点无左右之分,二叉树有
- 什么是树的遍历,二叉树有哪几种遍历方式?访问树的每个节点,且每个节点仅被访问一次。先序遍历、中序遍历、后序遍历,中间节点被访问的次序;层序遍历
- 二叉树如何存储?数组存储(适合不需修改的完全二叉树);链表存储(每个结点由数据和左右指针组成)
- 一般树如何转换为对应的二叉树?所有兄弟结点之间加连线,去掉与除第一个孩子外其他孩子的连线
- 什么是满二叉树(完美二叉树)?深度为k,有2^k-1个节点的二叉树
- 什么是完全二叉树,解决了什么问题?是一种特殊的满二叉树。每个节点都与相应满二叉树的节点对应,但总节点数可能少于相应满二叉树(叶结点只能出现在最下层和次下层,且最下层的叶结点集中在树的左部)
- 完全二叉树有什么性质?有N个结点的完全二叉树的深度为[log2N]+1;第i层最大结点数为2(i-1);深度为k的完全二叉树最大总结点数为2^k-1;对任何非空二叉树,n0=n2+1
- 什么是二叉查找(搜索)树(BST)?左子树所有键值小于根节点键值,右子树所有键值大于根节点键值,左右子树都是BST
- BST如何查找结点?比较要查找元素和根结点关系,若小于则在左子树查找,若大于则在右子树查找,若等于返回根节点指针
- BST如何插入结点?在查找终止的地方插入
- 平衡二叉树(AVL)的特点,解决了什么问题?是一种特殊的二叉查找树,任意节点的两个子树的高度最大相差1。插入、查找、删除操作均可在O(logN)时间内完成
- AVL树的平衡因子(BF)是什么,有什么用?每个结点左右子树的高度差,只能在-1,0,1中取值,是平衡的量化标准,用于插入结点时的调整
- 向AVL树中插入新结点时如何调整?每插入一个结点后,重新计算各结点的平衡因子,若有不平衡的结点则对树进行相应调整(左单旋、右单旋、左右双旋、右左双旋)
- 什么是堆,如何实现,有何应用?一种特殊的完全二叉树,最小堆满足所有父结点都比子节点小,最大堆反之。用数组存储。堆排序、优先队列
- 最小堆如何实现删除最小数并添加一个新数?先删除根结点,再把要插入的结点放在根结点,比较其与叶结点的关系,调整到合适位置
- 如何用O(N)时间建立一个堆?
- 堆排序的思路(从小到大)?先建立最小堆,然后每次删除顶部元素并将其放到新数组中;或先建立最大堆,然后每次交换头尾元素并将堆的大小-1
- 最小堆如何实现添加一个新树?把新数放在最后,再与其根节点比较,调整到合适位置
- 什么是哈夫曼树(最优二叉树),如何实现,有何应用?带权路径长度最小的二叉树;节省字符串编码空间、case总判定次数最小
- 如何存储图?邻接矩阵、邻接表
- 什么是连通图?结点i、j间有路径连接,则称结点i、j连通,任意两结点连通的图称为连通图
- 图的遍历方法,如何实现?深度优先(DFS)——栈实现;广度优先(BFS)——队列实现
- 什么是生成树,最小生成树?联通所有结点且不产生回路的所有子图;对于带权图,权值最小的生成树称为最小生成树
- STL容器list、vector、map、set的底层是什么?list——双向链表;vector——数组;map、set——红黑树
二、问题
- 完全二叉树一定是平衡二叉树(F)平衡二叉树是二叉查找树,结点需满足大小关系
- 平衡二叉树一定是完全二叉树(F)完全二叉树最下层叶结点只能在左边(完全二叉树侧重存储方便,平衡二叉树侧重查找方便)