数据结构与算法
文章平均质量分 81
子夜求知
一个头发还很多的大学生码农
b站账号:https://space.bilibili.com/473692166?spm_id_from=333.337.0.0
展开
-
带哨兵节点和不带哨兵节点的单链表操作的对比
带哨兵节点和不带哨兵节点的单链表操作的对比定义哨兵结点:哨兵结点(sentinel)是一个哑元结点(dummy node),可以简化边界条件。是一个附加的链表结点,该结点作为第一个结点,它的值域中并不存储任何东西,只是为了操作的方便而引入的。如果一个链表有哨兵结点的话,那么线性表的第一个元素应该是链表的第二个结点。很多情况下,需要处理当前节点的前驱节点,如果是没有哨兵节点的链表,对第一个节点,即头节点,没有前驱节点。如果不作特殊处理,就可能出错;如果对它特别对待,就会增加代码复杂性,还会降低程序效率。原创 2021-10-19 17:33:34 · 405 阅读 · 0 评论 -
三种高级排序及其实现(希尔,归并,选择)
高级排序之前我们学习过基础排序,包括冒泡排序,选择排序还有插入排序,并且对他们在最坏情况下的时间复杂度做了分析,发现都是O(N^2),而平方阶通过我们之前学习算法分析我们知道,随着输入规模的增大,时间成本将急剧上 升,所以这些基本排序方法不能处理更大规模的问题,接下来我们学习一些高级的排序算法,争取降低算法的时间 复杂度最高阶次幂。希尔排序希尔排序是插入排序的一种,又称“缩小增量排序”,是插入排序算法的一种更高效的改进版本。前面学习插入排序的时候,我们会发现一个很不友好的事儿,如果已排序的分组元素为原创 2021-10-14 00:45:43 · 315 阅读 · 0 评论 -
三种简单排序及其实现(冒泡,选择,插入)
在我们的程序中,排序是非常常见的一种需求,提供一些数据元素,把这些数据元素按照一定的规则进行排序。比 如查询一些订单,按照订单的日期进行排序;再比如查询一些商品,按照商品的价格进行排序等等。所以,接下来 我们要学习一些常见的排序算法。 在java的开发工具包jdk中,已经给我们提供了很多数据结构与算法的实现,比如List,Set,Map,Math等等,都 是以API的方式提供,这种方式的好处在于一次编写,多处使用。我们借鉴jdk的方式,也把算法封装到某个类中, 那如果是这样,在我们写java代码之前,就需要原创 2021-10-12 01:05:35 · 369 阅读 · 0 评论 -
java实现二叉查找树
二叉查找树性质 开始这篇文章之前,首先我们回顾一下链表和数组元素查找方式,链表和数组查找某个元素必须从头节点往后遍历依次查找元素。这样的查找效率非常的低,如果使用二叉查找树则可以大大提高查找效率,接下来我们看看二叉查找树的创建规则。二叉查找树的性质和规则 首先我们来看看二叉查找树是什么:它或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树。原创 2021-10-10 01:01:21 · 1059 阅读 · 2 评论 -
使用二叉树解决折纸问题
题目:请把一段纸条竖着放在桌子上,然后从纸条的下边向上方对折1次,压出折痕后展开。此时 折痕是凹下去的,即折 痕突起的方向指向纸条的背面。如果从纸条的下边向上方连续对折2 次,压出折痕后展开,此时有三条折痕,从上 到下依次是下折痕、下折痕和上折痕。 给定一 个输入参数N,代表纸条都从下边向上方连续对折N次,请从上到下打印所有折痕的方向 例如:N=1时,打 印: down;N=2时,打印: down down up分析:咱们可以自己试着用值,折一次,两次,三次,观察折出来的折痕,博主自己尝试之后..原创 2021-09-28 01:11:44 · 256 阅读 · 0 评论