data structures and algorithms
文章平均质量分 88
数据结构和算法
oNightfall
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
递归转循环
通过手动维护一个栈结构,加上循环逻辑,那么,理论上递归就可以被取代了,事实也确实如此,所有的递归,都可以转为【栈+循环】的结构,这些可以找相应的文章查阅。栈有了,那还得来个循环,而循环首先要确定终止条件,这个倒是不难,由递归改造而来的循环,自然是递归调用结束,也就是栈里面没内容时。对于这剩下的三阶,就是重复计算了,而它们的计算结果显然是可以共用的,这就引出了一种通用的优化方案:利用。笔者认为,递归是不可控的,业务数据难免存在错误数据,一旦没有很好的把控,递归层数激增,对于递归,往往存在着重复计算,如本例,原创 2024-03-08 11:48:31 · 576 阅读 · 1 评论 -
平衡二叉树及代码实现
1 介绍平衡二叉树,又称AVL树,在学习AVL树之前,最好先掌握二叉查找树,因为AVL树,就是对二叉查找树的平衡性进行优化而得到的特殊的二叉搜索树。它有和二叉搜索树一样的特点:树中的任一节点总是大于其左子树的任一节点,小于其右子树的任一节点同时有着自己独特的特点树中任一节点的左右两个子树的高度差的不会超过1示例2 时间复杂度平衡二叉树的左右子树高度差不大于1,这个特点使它的时间复杂度和普通的二叉查找树相比要稳定得多,不会出现普通二叉查找树退化成链表的情况,树高和节点数的关系为 h =原创 2020-10-24 19:13:38 · 966 阅读 · 2 评论 -
常见数据结构及代码实现
1 Stack:栈1.1 介绍一种线性表,只允许在线性表的一端进行操作,即栈顶允许操作,而栈底不允许,像个桶状物,可以通过桶顶往桶里取放物品,而不能对桶底做什么,而且先放入桶中的物品总是在更底部,这就形成了栈的一个特性:先入后出。1.2 时间复杂度因为无论是入栈还是出栈,每次操作的都是栈最顶部的那一个数据,所以出入栈的时间复杂度都是:O(1)1.3 适用场景先入而后出的特点和递归的使用十分契合。1.4 代码实现1.4.1 实现思路JDK1.8的Stack类源码中有6个方法,这里我们实现其中原创 2020-10-23 21:49:09 · 2159 阅读 · 1 评论 -
常见排序及代码实现
1 冒泡排序1.1 排序说明所谓冒泡,说的是每次都是相邻元素进行比较,从开始索引到结束索引,不断冒出的过程。以升序为例:第一轮所有元素都参与,从索引0元素开始,和索引1元素相较,如果索引大的数值小,则互换位置,接着索引1元素继续以同样的方式和索引2元素相较……一直到最后一个元素。第一轮下来,就能将所有元素中最大的元素冒泡到最后索引的位置。第二轮一样从索引0元素开始冒泡,不过第一轮已经确定最后一个为最大元素,所以这次只需要冒泡到倒数第二个元素。第二轮也一样,可以将这次参与冒泡的元素中的最大原创 2020-09-17 21:30:46 · 538 阅读 · 0 评论
分享