数据结构及算法知识点与题目整理(答案慢更)
本篇博文将对数据结构及算法的常见的题目进行总结,适合作为工作面试、考研机试与复试、自我检验、期末考试等的一份参考资料,囊括的知识点可能不会很全面,题目和答案都会在日后慢慢更新。
栈和队列
-
两个栈模拟一个队列
– 思路:栈1为入队,栈顶表示队尾;栈2为出队,栈顶表示队首。
入队直接入栈1;出队时,如果栈2不为空,则直接弹出栈首,如果栈2里面没有元素,则将栈1的元素依次弹出并压入栈2。入队时若栈1已满且栈2为空(栈2必须为空时才可以),则可以将栈1元素全部入栈2。 -
两个队列模拟一个栈
– 注意:用队列模仿栈和用栈模仿队列是不一样的!!!
略一思考就会知道,用两个栈模仿队列有点负负得正的意思,但是用队列模仿栈的话,这种方法肯定就行不通。那么怎么办呢?请看 -> https://www.cnblogs.com/DHUtoBUAA/p/7389076.html -
堆和栈的区别
– 堆是满足一定限制的树形结构(最大堆、最小堆)
– 栈是元素有先进先出顺序的线性结构 -
栈应用于括号匹配
-
栈里找最小值 -> https://blog.csdn.net/qq_32623363/article/details/87894111
串
- KMP -> https://blog.csdn.net/qq_32623363/article/details/87901947
- 最大子串和
- 最长公共子序列
- 翻转字符串
- 最长对称子串
- 最长无重复字符子串
数组、矩阵和广义表
- 螺旋矩阵
- 最大矩阵和
- 物理存储、稀疏图用什么存储结构 https://blog.csdn.net/qq_32623363/article/details/87909620
树
- 给定一棵树的两个节点,求最近的公共祖先节点
- 树的定义;二叉树;满二叉树;完全二叉树;二叉排序树;平衡二叉树;
- 树转换为二叉树
- 哈弗曼树与哈夫曼编码
- 二叉树删除节点
- 二叉排序树删除节点(涉及“排序”)
- 二叉树任意两个节点间的最大距离
- 树的前序中序后序
- 给出先序、中序,如何构造二叉树
- 森林转换为二叉树
图
- 怎么判断一个图中是否存在环?
– 无向图:一直删除度为1的节点并更新,如果剩下度为2的节点,则有环
– 有向图:拓扑排序,能够拓扑排序的就没有环。
排序
-
插入排序
– 直接插入排序
– 折半插入排序
– 希尔排序(缩小增量排序) -
交换排序
– 冒泡排序
– 快速排序 -
选择排序
– 简单选择排序
– 堆排序
– 归并排序
– 基数排序 -
外部排序
– 置换-选择排序
– 最佳归并树
– 败者树 -
上述各种排序算法的实现、及复杂度(最好、最坏情况)、稳定性
-
每轮排序都会确定一个最终位置:冒泡,快排,选择排序,堆排序
-
1000个数里找出最小的100个(最小堆)
-
二叉排序树删除节点
-
二叉排序树有两个节点交换了位置,怎么找出来
-
怎么把一颗二叉排序树变成双向链表
-
链表排序
查找
- 二叉搜索树怎么插入结点
- 红黑树
- B-树与B+树
- 链表如何使用二分查找
- 哈希表最坏情况下相当于什么?
– 复杂度为哈希表长度N,相当于一个N个长度的线性表 - treemap和hashmap(java的知识了)
- 哈希算法的平均查找长度(ASL)
- 无序表找到一个树的时间复杂度
- 哈希查找的几种冲突及解决办法
算法题
- 汉诺塔
- 最大子串和(属于知识点:“串”)
- 最长公共子序列(属于知识点:“串”)
- 上楼梯(1步或2步)
- 最长对称子串(属于知识点:“串”)
- 合并有序链表 -> https://blog.csdn.net/qq_32623363/article/details/87885652
- 最长无重复字符子串(属于知识点:“串”)
- 螺旋矩阵(属于知识点:“数组、矩阵和广义表”)
- 解释递归和递归的实现:递归包括两个部分:递归部分和终止条件
- 有序数组中找三个数之和为x
- 无序数组中只有一个出现一次的数,其余的都出现两次及以上,找出这个数
- 判断链表有没有环,如果有环,则找出环的入口 -> https://blog.csdn.net/qq_32623363/article/details/87890240
- 两个单链表判断是否相交 -> https://blog.csdn.net/qq_32623363/article/details/87885938
- 最大矩阵和(属于知识点:“数组、矩阵和广义表”)
- 最大字段和
- 什么是深度优先、广度优先
- 贪心算法举例
- 怎么把一颗二叉排序树变成双向链表(属于知识点:“排序”)
- BP算法(了解即可)
- 链表排序(属于知识点:“排序”)
- 三角形给坐标,求交点
- n个不同字符的所有全排列