《数据结构与算法》之散列表
散列表 什么是散列表 “散列”的基本思想是: 1.以关键字key为自变量,通过一个确定的函数(散列函数),通过函数计算出确定的函数值,作为数据对象存储地址 2.可能不同散列对象会映射到一个散列地址上,则称之为冲突 需要某种解决策略 如上图: 我们依次读入数据时,对于同一个key值和散列函数,总有一些 ... »
散列表 什么是散列表 “散列”的基本思想是: 1.以关键字key为自变量,通过一个确定的函数(散列函数),通过函数计算出确定的函数值,作为数据对象存储地址 2.可能不同散列对象会映射到一个散列地址上,则称之为冲突 需要某种解决策略 如上图: 我们依次读入数据时,对于同一个key值和散列函数,总有一些 ... »
# 基本概念 双向链表概念和单向链表是一致的,区别在于双向链表在单向链表的基础上,指针区域多了一个指向上一个节点的指针。单向链表内容可以参考我的上一篇文章:http://t.csdn.cn/Iu56H。 基本的数据结构如图所示:,技术和职场问题,请关注公众号 [彭旭锐] 和 [BaguTree Pro] 知识星球提问。** > > 学习数据结构与算法的关键在于掌握问题背后的算法思 ... »
导言: 图是数据结构教材上的最后一种数据结构了,它的使用范围最广,最多,也是最贴合我们实际生活的,图是一个多对多的数据结构,在前面的学习,了解到了一对一的数据结构 线性结构,以及一对多的结构 树形结构,现在要学的多对多的结构 图, 图是对我们现实生活中很多实体的抽象,因为实际的生活中,的确关系是复杂 ... »
# 问题引入 在五子棋游戏或类似的游戏中,我们可以把整个棋盘想象成是一个有规律的二维数组,其值由0、1、2三个数字组成,0代表空白区域,1代表白子,2代表黑子。这种情况:即当一个数组中大部分元素为0或者为同一值时,存储该数组数据可以使用稀疏数组来对原始数组进行精简,以减少原始数组中无用数据所占的空间 ... »
导言: 我们在以前的学习中知道了堆栈,和队列,在系统处理上这两种数据结构的确是很高效的,但是在系统的任务调度上就是很高效了,我们cpu处理任务是有优先级的,要是按照队列和栈的思想都是线性执行,可能发生的情况就是输出一个字符比系统掉电请求处理的优先级高,可能输出一个字符先来,所以在任务调度上线性结构就 ... »
# 前言 遗传算法是一种模拟自然进化过程与机制来搜索最优解的方法,它由美国 John Holland 教授于20世纪70年代提出。遗传算法的主要思想来源于达尔文生物进化论和孟德尔的群体遗传学说,通过数学的方式,将优化问题转换为类似生物进化中的染色体基因的交叉和变异等过程,因此具有坚实的生物学基础和鲜 ... »
一.树结构之二叉树操作 二叉树的查找 二叉搜索树,也称二叉排序树或二叉查找树 二叉搜索树:一棵二叉树,可以为空,如果不为空,应该满足以下性质: 非空左子树的所有结点小于其根结点的键值 非空右子树的所有结点大于其根结点的键值 左右子树都是二叉搜索树 对于二叉树的查找,其实沿用的是分治法的思想,所以我们 ... »
大家好,我是五月。 前言 目前绝大数存储设备都是以闪存为存储介质的,内部许多固件算法方案都是在为闪存服务的。 无论是什么算法,都是遵循着Flash的特性为前提的。 那闪存究竟有哪些潜规则的特性呢? 先擦后写 闪存块(Block)是不能覆盖写的,它不允许开发者在一个地方上重复写入,必须先擦除一遍才行。 ... »
导言: 我们在前面的学习中认识到了栈还有队列这些线性的数据存储结构,而现在我们要了解的数据结构却不是线性的了,我们试想线性的结构最大的缺点查询不方便,不管你是从前往后开始查找数据,还是从后往前开始查找数据都是一个一个的比对, 效率很低,所以不推荐使用,那么我们的树结构来存储的话,查找数据会不会被优化 ... »
导言: 我们在上一次学习了堆栈的数据结构以后,可以了解到它是受限制的操作,比如我们操作只能在栈顶,现在我们要学习的东西叫做队列,它也是受限制的一种数据结构,它的特点是队头只出数据,而队尾只入数据, 它的结构就和它的名字,像我们平时排队一样先来的人肯定要先服务啊,所以它的英文叫做Frist In Fr ... »
这是一种Flash的内存管理算法,属于各个厂商的核心机密,每个厂商的处理方式不同,有的处理简单,有的处理复杂。 ... »
导言: 在计算机发明之初是为了计算,所以叫计算机,对我们给定的一个算式,然后给定的一套规则 加,减,乘,除,等,它就可以自己进行计算了,然后返回一个结果给我们 对于一般的算式 : 2+3+4 很显然,从左往右依次扫描,依次相加很简单的计算出来,因为它们是同级运算,可以很简单的做到 但是,常见的运算不 ... »
好书在精不在多,每一本经典书籍都值得反复翻阅,温故而知新! 下面分享几本计算机经典书籍,都是我自己看过的。 ## 重构 改善既有代码的设计  就像豆瓣评论所说的,看后有种醍醐灌 ... »
有小伙伴私聊我说刚开始刷LeetCode的时候,感到很吃力,刷题效率很低。我以前刷题的时候也遇到这个问题,直到后来看到这个谷歌师兄总结的刷题笔记,发现LeetCode刷题都是套路呀,掌握这些套路之后,就变得非常简单了! 这份笔记是作者在找工作的时候,刷了几百道的LeetCode题目,然后按照数据结构 ... »
本文从二叉搜索树倾斜的原因(自上而下生长)出发,推出维持树形数据结构平衡性的关键:自下而上裂变式生长,进而引出裂变式生长的理论模型:2-3 树。由于 2-3 树实现上的复杂性,引出其实现上的替代品:红黑树。最后,我们讨论如何通过左旋、右旋以及颜色翻转这“三板斧”来维护红黑树插入和删除元素后的动态平衡... ... »
一.冒泡排序 什么是冒泡排序? 冒泡排序是一种交换排序,它的思路就是在待排序的数据中,两两比较相邻元素的大小,看是否满足大小顺序的要求,如果满足则不动,如果不满足则让它们互换。 然后继续与下一个相邻元素的比较,一直到一次遍历完成。一次遍历的过程就被成为一次冒泡,一次冒泡的结束至少会让一个元素移动到了 ... »
题目: 给定N个整数的序列{ A1,A2,....An },求函数F(i,j)=Max{ Ai+.....Aj } 题目要求: 这道题的目的是要求给定的一个整数序列中,它所含的连续子序列的最大值,比如现在我有一个整数序列{ -3,2,3,-3,1} 它的最大子序列很显然是 { 2,3 } 第一种方法 ... »
好家伙,写大作业,本篇为代码的思路讲解 1.大作业要求 走迷宫程序 问题描述: 以一个 m * n 的长方阵表示迷宫, 0和1分别表示迷宫的通路和障碍。 设计一个程序, 对任意设定的迷宫, 求出一条从入口到出口的通路, 或得出没有通路的结论。 基本要求: (1) 实现一个以链表做存储的栈类型, 然后 ... »