基本概念
- 什么是数据结构
数据结构如何存储数据,组织数据以表现出数据之间关系的一门学科 - 数据,数据元素,数据项,数据对象
数据是客观事物的符号表示,数据项是某个数据主体(数据元素)的属性,数据对象相同性质的元素集合 - 什么是算法
完成某一个事务的步骤和顺序 - 数据的逻辑结构和物理结构
逻辑结构:线性结构,树形结构,图形结构
物理结构:顺序结构,链式结构
线性表
-
单链表
单链表可以方便的在尾部插入结点(设置尾指针的单链表),但不支持高效的表尾删除操作(因为要删除某个节点,必须要知道前一个结点,所以单链表不适合尾部删除) -
数组与链表的区别
- 数组是固定长度,方便存取,但不能动态增减
- 链表是动态长度,方便动态增减,但不方便存取
-
循环链表的优点是什么
可以从任何一个节点访问到其他的节点
栈与队列
- 栈的两个应用:括号匹配和表达式(口述)
串
- 口述朴素匹配算法
树
-
树中节点的高度和深度的区别
深度是从上往下数,高度是从下往上数。树的高度和深度一样,但节点的高度和深度未必一样 -
树的遍历
-
如何构造哈夫曼树
从给定节点中选择最小权值的两个节点,将两个节点生成其双亲节点,节点权值为该两个节点之和,然后从剩余节点和这个双亲节点中继续选择最小的两个重复前面的步骤 -
各种树的数据结构
二叉排序树:左子树均小于根,根均小于右子树;
平衡二叉树:左右子树的高度差绝对值小于 1,且一定是二叉排序树
满二叉树:节点要么是叶子节点,要么是两个子节点,且叶子节点在同一层
图
-
最小生成树的两个算法口述,以及最小生成树和最短路径的区别
最小生成树是关于给 n 个村庄修路,开销最小的问题。而最短路径是村庄之间路径最短的问题 -
迪杰斯特拉算法和弗洛伊德算法(口述)
-
图的遍历
DFS 是先序遍历,BFS 是层序遍历 -
邻接表和邻接矩阵的区别
邻接矩阵关注的是边之间的连接关系,但是对于稀疏矩阵来说浪费空间,而邻接表是则是节省空间,关注点之间的关系
排序
- 各种排序算法
- 为什么快速排序当数据有序的时候反而慢
因为快速排序会选择第一个元素作为枢纽,如果是有序的情况,从右向左寻找小于该枢纽的值,但因为有序,所以从右向左遍历完也找不到复合条件的值,第二轮快排同样的道理 - 基数排序
是一种按位来比较的排序,将键值切分开来,键值的组成可以不是数字 - 稳定的排序算法
序列中存在两个相同的数字,排序前后位置不变
查找
- 各种查找算法
- 散列表建立方法:直接定址法,数字分析,平方取中,除留取余
- 冲突处理办法:开放地址法(线性探测,平方探测法,再散列法),地址链接法
- B 树与B+树的区别
- B+ 树有一个指针指向叶子节点,但 B 树没有
- B 树的数据存储在所有节点,而B+树存储在叶子节点,其他节点只是索引