Fork me on GitHub

随笔分类 -  数据结构与算法

摘要:一、树的基本概念 (一)什么是树 数是一种抽象数据类型(ADT),用来模拟具有树状结构性质的集合,它是由n(n>=1)个有限节点组成一个具有层次关系的集合。树具有以下性质: 每个节点有零个或多个子节点; 没有父节点的节点称为根节点; 每一个非根节点有且只有一个父节点; 除了根节点外,每个子节点可以分 阅读全文
posted @ 2021-03-07 16:55 iveBoy 阅读(203) 评论(0) 推荐(0) 编辑
摘要:一、什么是栈 栈是一种容器,可存入数据元素、访问元素、删除元素,它的特点在于只能允许允许在容器的一端进行计入和输出元素。由于栈数据结构只允许在一端进行操作,因而按照后进先出(LIFO, Last In First Out)的原理运作。 栈结构可以使用顺序表实现,也可以使用链表来实现,只需要按照栈的特 阅读全文
posted @ 2021-02-28 11:03 iveBoy 阅读(92) 评论(0) 推荐(0) 编辑
摘要:一、什么是链表 链表是线性表的一种,它不像顺序表一样连续存储数据,而是在每一个节点中存储下一个节点的位置信息(下一个节点的链接地址)。那么为什么需要链表呢? 顺序表需要预先知道数据的大小用来申请连续的内存空间 顺序表进行扩充时需要进行数据搬迁 这样很不灵活,而链表可以充分利用内存空间,因为它可以不连 阅读全文
posted @ 2021-02-27 20:01 iveBoy 阅读(175) 评论(0) 推荐(0) 编辑
摘要:一、什么是顺序表 将元素顺序的存放在一块连续的存储区中,元素间的顺序关系由它们的存储顺序自然表示。 (一)顺序表的形式 顺序表由于存储的元素类型不同,分成: 基本顺序表 元素外置顺序表 为什么要这样分呢?因为元素类型不同占用的每个单元大小不同。 1、基本顺序表 数据元素本身连续存储,每个元素所占的存 阅读全文
posted @ 2021-02-27 12:03 iveBoy 阅读(562) 评论(0) 推荐(0) 编辑
摘要:一、什么是算法的时间复杂度 (一)引出算法 什么是算法?加入有下面一道题: 如果 a+b+c=1000,且 a^2+b^2=c^2(a,b,c 为自然数),如何求出所有a、b、c可能的组合? 刚开始的想法可能就是将a、b、c可能的值都列出来然后进行组合: a、b、c的可能取值范围是[0,1000] 阅读全文
posted @ 2021-02-21 12:23 iveBoy 阅读(759) 评论(0) 推荐(0) 编辑
摘要:一、原理 计数排序的核心在于将输入的数据值转化为键存储在额外开辟的数组空间中。作为一种线性时间复杂度的排序,计数排序要求输入的数据必须是有确定范围的整数。 步骤: (1)创建关键值(计数列表) (2)遍历序列中的每一个元素,相应的计数器增加1 (3)重新将元素存储列表中 二、实现 假如现在有一个列表 阅读全文
posted @ 2019-06-30 16:53 iveBoy 阅读(351) 评论(0) 推荐(0) 编辑
摘要:一、原理 桶排序是计数排序的升级版,如果计数排序中数的范围比较大呢?之前的计数排序数字范围是1-200,假如1-20000呢?利用桶排序就可以对其进行优化。 步骤: (1)将元素分在不同的桶中 (2)在对每一个桶中的元素进行排序 桶排序的的快慢取决于数据的分布: 当输入的数据可以均匀的分配到每一个桶 阅读全文
posted @ 2019-06-30 16:52 iveBoy 阅读(447) 评论(0) 推荐(0) 编辑
摘要:一、原理 基数排序是一种非比较型整数排序算法,其原理是将整数按位数切割成不同的数字,然后按每个位数分别比较。由于整数也可以表达字符串(比如名字或日期)和特定格式的浮点数,所以基数排序也不是只能使用于整数。 步骤: (1)创建10个桶(列表)分别给每一个数位 (2)遍历每个数位 (3)遍历列表中的每个 阅读全文
posted @ 2019-06-30 16:52 iveBoy 阅读(504) 评论(0) 推荐(0) 编辑
摘要:一、原理 希尔排序算法是一种分组插入排序算法,是插入排序的一种更高效的改进版本,希尔排序使整体的数据越来越接近有序。 希尔排序是基于插入排序的以下两点性质而提出改进方法的: 插入排序在对几乎已经排好序的数据操作时,效率高,即可以达到线性排序的效率; 但插入排序一般来说是低效的,因为插入排序每次只能将 阅读全文
posted @ 2019-06-30 10:29 iveBoy 阅读(369) 评论(0) 推荐(0) 编辑
摘要:一、原理 归并排序(Merge sort)是建立在归并操作上的一种有效的排序算法。将已有序的子序列合并,得到完全有序的序列。如下图: 归并过程: 两个指针的元素比较大小,小的元素就会被放入临时列表中,最后的结果就是: 算法步骤: (1)申请临时空间,使其大小为两个已经排序序列之和,该空间用来存放合并 阅读全文
posted @ 2019-06-29 11:09 iveBoy 阅读(570) 评论(0) 推荐(0) 编辑
摘要:一、堆排序原理 1、什么是堆? 采用树形结构‘实现优先队列的一种有效技术称为堆。堆就是节点里存储数据的完全二叉树。堆包括大根堆和小根堆: 大顶堆 一颗完全二叉树,满足任一节点都比其孩子节点大,在堆排序算法中用于升序排列。 小顶堆 一颗完全二叉树,满足任一节点都比其孩子节点小,在堆排序算法中用于降序排 阅读全文
posted @ 2019-06-28 09:48 iveBoy 阅读(1094) 评论(0) 推荐(0) 编辑
摘要:一、快速排序的思路 从序列中取出第一个元素E,并使其归位 序列被元素E分成左右两个部分 使用递归完成排序 关键点 归位 如何完成对元素E的归位,元素E将序列分成左右两部分,左边的部分比E元素小,右边的部分比E元素大,这样左边和右边排序后,中间的E元素位置未变,而且左边和右边使用同样的归位方式进行排序 阅读全文
posted @ 2019-06-27 14:34 iveBoy 阅读(309) 评论(0) 推荐(0) 编辑
摘要:一、原理 将序列分为有序区和无序区两个部分,刚开始有序区只有一个元素,每次从无序区选择一个元素插入到有序区的位置,直到无序区为空。 关键点: 插入到有序区时遵循从后向前进行扫描,然后将无序区的元素插入。 此时无序区的第一个元素作为有序区的第一个元素 二、实现 总结: 有序区已经有一个元素,第一层循环 阅读全文
posted @ 2019-06-22 19:03 iveBoy 阅读(225) 评论(0) 推荐(0) 编辑
摘要:一、选择排序原理 将未排序序列中的第一个元素标记为最小,存放到有序区的起始位置,然后,再从剩余未排序元素中继续寻找最小元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。 关键点: 无序区 记录最小元素的位置 二、实现 原文:https://github.com/hustcc/JS-S 阅读全文
posted @ 2019-06-22 19:03 iveBoy 阅读(245) 评论(0) 推荐(0) 编辑
摘要:一、思路 对一个序列中的元素,比较相邻的元素。如果第一个比第二个大,就交换它们两个,将大的元素放在右边,此时右边就称为有序区,左边就是无序区,不断重复的对左边区域相邻元素进行比较,右边有序区的元素不断增加,最后完成排序。 具体看下面的例子: 游标刚开始在第一个的位置,那么就会比较3和5的值,3没有5 阅读全文
posted @ 2019-06-22 19:02 iveBoy 阅读(459) 评论(0) 推荐(0) 编辑

TOP
点击右上角即可分享
微信分享提示