随笔分类 - 数据结构和算法
偶尔看看提高一下自己的内功
摘要:二叉树的顺序存储 二叉树的顺序存储,就比如我们现在数据库大家都知道是用B+树,那你知道它是怎么存储的吗,总不可能说,内存中构建了一颗二叉树出来对吧,所以带着这个疑问,我们来了解一下二叉树的顺序存储(当然二叉树还有其他存储方式),我们从最简单的顺序存储开始。 分析思路如下: 代码如下: //前序遍历
阅读全文
摘要:二叉树的节点删除 二叉树节点的删除,大家马上脑海里就马上想到的是一颗二叉树,然后我们要删除它的叶子节点,删除的非叶子节点,应该怎么做呢,想到的时候,好像感觉很复杂的样子。其实我们只要慢慢分析,总是能把他搞出来的。 首先请看我们的分析过程,大概如下图所示: 这里的大概误区就是:我们一般删除,想到的方法
阅读全文
摘要:树的基本知识 树的基本结构,如下图所示: 二叉树: 每个节点最多只有两个子节点的树,叫做二叉。 满二叉树:如下图所示 完全二叉树: 这两个有啥用呢,他们有规律,要记住他们的规律即可,啥规律后面用到再说。 二叉树的遍历 前序遍历: 先出当前节点(root), 如果左子节点不为空,则递归前序遍历。 如果
阅读全文
摘要:单链表的增删改查的综合例子 需求描述:实现对水浒英雄榜的增删改查。进阶:按照顺序增加水浒英雄,并且支持反转。 第一步:首先定义一个HeroNode节点。代码如下所示: public class HeroNode { public String heroName; public String nick
阅读全文
摘要:单链表的简单介绍 我相信大部分人都知道单链表的结构,如下图所示: 一个是数据域,一个是指针域用来存放下个节点的。 单链表的添加和遍历 首先心中要有上面这个图的结构,按照这个图的结构进行理解。 头节点的作用是 用来表示单链表的头,不存放具体数据。 添加的理解 分两种情况把。 如果头节点的next指针为
阅读全文
摘要:数据结构,平时用得最多,接触最多的也是数组,先从数组说起。 数组的概念 什么是数组 一组数据,一秒钟可以申明1000个变量的骚操作。 存储相同的类型,连续的存储空间。 最重要的一点:按下标找元素。 数组是如何实现按下标访问元素的? 我们拿一个长度为5的int 类型数组 int [] arr=new
阅读全文
摘要:前面系列文章 插入排序: https://www.cnblogs.com/gdouzz/p/10759390.html 选择排序: https://www.cnblogs.com/gdouzz/p/10759239.html 冒泡排序: https://www.cnblogs.com/gdouzz/
阅读全文
摘要:(一)什么是插入排序 插入排序,是一种简单直观的排序算法,它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中,从后向前扫描,找到相应的位置并插入。 如果已经了解了插入排序,那么可以直接进入到总结篇:https://www.cnblogs.com/gdouzz/p/10759399.htm
阅读全文
摘要:(一)什么是选择排序 它的工作原理是每一次从待排序的数据中选出最大(小)的一个元素,存放在序列的起始位置,然后再从剩余未排序中继续寻找最大(小)小)元素,然后再从剩余从排序元素中继续寻找最大(小)元素,放到的已排序序列的末尾。以此类推,直到全部待排序元素派完。 如果已经了解了选择排序,那么可以直接进
阅读全文
摘要:今天,有个编程大概三年的过来面试,其中有道题目是冒泡排序,当然他也很快坐出来,并且答案也是对的,但是仔细一问,他自己也不怎么理解冒泡排序,问问怎么提高冒泡效率做法,他也答不上来,所以这篇文章就让我们好好的讲讲冒泡排序。 如果已经了解了冒泡排序,那么可以直接进入到总结篇:https://www.cnb
阅读全文
摘要:在平时唠嗑的时候,总是会听到有大神说,线程栈,函数栈,值类型是存在栈上的等等,好多关于栈的词,大家对这些有兴趣的,且听我慢慢道来。 (一)栈的定义 说起栈,感觉第一个反应就是明修栈道,暗度陈仓...。有一点数据结构的基础同学都知道栈就是先进后出的线性表,其实栈在我们生活中,就像类似洗盘子,先洗的盘子
阅读全文
摘要:斐波那契数列,大家都很熟悉了,从第三项开始,就是把前面两项之和加起来等于第三项,很多人也知道这道题目用递归来可以解,也很多人可以马上顺利的写出递归代码,但是如果你多问一句也许他们就懵逼了,叫他们说一下对递归的理解,或者说斐波那契数列能有什么改进的地方。 (一)递归的理解 很多人都知道斐波那契数列,汉
阅读全文
摘要:数组是一种线性表,用连续的内存空间来存放相同的类型的数据。 1.1 数组是一种线性表 线性表,元素之间的关系,可以连成一条线的就叫做线性表,它们的关系是简单的前后关系。比如常见的,链表,栈,队列等等 非线性表,元素之间不是简单的前后关系,比如,树和图。 1.2 连续的内存空间和相同类型的数据 正是因
阅读全文
摘要:在前面一篇文章中,我们讲了为什么要进行复杂度分析,以及如何分析复杂度。那么接下来我将举一个例子,请你按照之前的复杂度分析分析出来。 上面这段代码的复杂度是多少呢,假设数组长度为n,最好的情况下是i=0的时候,就找到相等的了,最坏情况下是:最后一个才找到,或者循环一遍之后一个都没找到。我们知道上面两种
阅读全文
摘要:(一) 复杂度分析的由来 我们平时写代码的时候,想要知道一段代码的运行时间,占用空间等等,一般都是在代码开始的记录一下当前时间,运行结束的时候,再记录一下时间,最后得出这段代码的运行时间,一般就是通过这个来判断我们的代码的执行效率。这种做法没有错,但是这样做统计出来的。 在我之前写业务代码的时候,比
阅读全文
摘要:快排和归并排序是比较经常见到的两种排序算法,下面我将用我自己的话来讲解快速排序和归并的知识点。 (一)快速排序 首先要明白,快速排序是基于冒泡排序的基础上做得改进,冒泡排序的交换次数太多了,快速排序就是为了来减少交换次数的,那接下来就好好的分析一下整个过程。 快速排序定义:快排是利用分治的思想,如果
阅读全文

浙公网安备 33010602011771号