前言 有一个汉罗塔的游戏如下: 汉诺塔:汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。 大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。 大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根 ...
分类:
编程语言 时间:
2020-07-14 13:52:30
阅读次数:
92
一、数据结构与算法基础 说一下几种常见的排序算法和分别的复杂度。 用Java写一个冒泡排序算法 描述一下链式存储结构。 如何遍历一棵二叉树? 倒排一个LinkedList。 用Java写一个递归遍历目录下面的所有文件。 二、Java基础 接口与抽象类的区别? Java中的异常有哪几类?分别怎么使用? ...
分类:
编程语言 时间:
2020-07-14 13:31:27
阅读次数:
74
时间复杂度 顺序查找(O(n) 字面意思,代码略 ?二分查找(O(nlogn) 这个算法要求被搜索的数据结构已排序。以下是该算法遵循的步骤。 (1) 选择数组的中间值。 (2) 如果选中值是待搜索值,那么算法执行完毕(值找到了)。 (3) 如果待搜索值比选中值要小,则返回步骤1并在选中值左边的子数组 ...
分类:
编程语言 时间:
2020-07-13 21:59:09
阅读次数:
82
双向链表类: 单链表只有一个方向的链接,只能做一个方向的扫描和逐步操作。 两端插入和删除操作都能高效完成,就必须修改结点的基本设计,加入另一个方向的链接。 结点增加了一个链接域,增加的空间开销与结点数成正比。 p.prev.next = p.next p.next.prev = p.prev 双向链 ...
分类:
编程语言 时间:
2020-07-12 22:33:55
阅读次数:
75
1.冒泡排序 def bubble_sort(list): for i in range(len(list)-1): for j in range(len(list)-i-1): if list[j] > list[j+1]: list[j], list[j+1] = list[j+1], list ...
分类:
编程语言 时间:
2020-07-12 20:42:52
阅读次数:
79
前言 续前一章。 正文 删除节点规则: 1.假如删除的是叶子节点,让他的父节点,断开和它的联系。 2.如果删除节点右左子树或者右子树的话,那么应该这样。 如果删除节点是它的父节点的左节点,而删除节点有左节点,那么删除节点的父节点的左节点就等于删除节点的左节点。 举个栗子哈: 假如要删除的是15,那么 ...
分类:
编程语言 时间:
2020-07-11 09:41:34
阅读次数:
68
前言 什么是二叉堆排序呢? 就是上面这种,一个节点大于左节点,但是小于右节点,再我写的例子中会写出大于等于右节点。 那么如何让一个数组进行变成这种二叉树呢? 其实只要有规律就很简单。 第一个元素(0)作为根节点。 第二个元素如果比第一个元素则判断是否有左节点,如果没有左节点,就是它的左节点,如果有左 ...
分类:
编程语言 时间:
2020-07-11 00:19:46
阅读次数:
87
周数 专业学习目标 专业学习时间 新增代码 博客发表量 知识技能总结 第八周 掌握数据结构与算法 6h 150h 1 了解二叉树的创建与遍历的递归思想 第九周 掌握数据结构与算法 8h 130h 1 掌握二叉树的查找 第十周 掌握数据结构与算法 7h 160h 1 学习l哈尔曼树 第十一周 掌握数据 ...
分类:
其他好文 时间:
2020-07-10 11:29:21
阅读次数:
96
前言 将下面按照从小到大排序: int[] arr = { 4, 6, 8, 5, 9 }; 这时候可以通过冒泡排序,计数排序等。 但是一但数据arr很大,那么会产生排序过于缓慢,堆排序就是一个很好的解决方案。 树的堆,有最大堆和最小堆。 看下最大堆: 它是这样子的,就是说一个节点的大小一定大于它的 ...
分类:
编程语言 时间:
2020-07-10 11:22:48
阅读次数:
72
前言 在排序那一节里,讲到排序时,利用递推公式推导时间复杂度来求解归并排序、快速排序的时间复杂度,但有些情况,例如快速排序的平均时间复杂度,利用递推公式,会涉及很复杂的数据推导。今天学习一种特殊的树来分析递归算法的时间复杂度,那就是递归树。 递归树与时间复杂度 递归算法的思路是把大问题分成小问题来解 ...
分类:
编程语言 时间:
2020-07-10 10:10:47
阅读次数:
73