数据结构与算法
文章平均质量分 95
_inkrain
要像一张邮票,坚持一件事情直到你到达目的地。
展开
-
线性表--队列
概述 队列是一种限定性线性表,广泛应用于计算机系统中。它只许在表的一端进行插入,在另一端进行删除。由于它的操作特性与我们平时排队一样,体现出了先进先出的特点,所以把这种数据结构称为队列。队列的数据结构#define MAXSIZE <最大元素数>typedef struct { datatype data[MAXSIZE]; //队员的存储空间 int fron原创 2016-10-17 20:42:50 · 910 阅读 · 0 评论 -
Java网络爬虫(九)--海量URL去重之布隆过滤器
简介布隆过滤器当我们要对海量URL进行抓取的时候,我们常常关心一件事,就是URL的去重问题,对已经抓取过的URL我们不需要在进行重新抓取。在进行URL去重的时候,我们的基本思路是将拿到的URL与已经抓取过的URL队列进行比对,看当前URL是否在此队列中,如果在已抓取过的队列中,则将此URL进行舍弃,如果没有在,则对此URL进行抓取。看到这,如果有哈希表基础的同学,很自然的就会想到那么如果用哈希...原创 2017-06-06 19:40:14 · 8081 阅读 · 9 评论 -
查找--理解哈希算法并实现哈希表
我们喜欢使用数组进行数据的查找,就是因为数组是一种“随机存取”的数据结构,我们根据数组的起始地址和数组元素的下标值就可以直接计算出每一个数组元素的存储位置,所以它的查找时间是O(1),而与数组的个数无关。我们在这个思想的基础上,可以联想到,如果有一种数据结构,让我们在进行关键字查找的时候,也可以像数组一样,进行随机存储,使其时间复杂度从O(n)降到O(1),那就可以大大提高查找的效率。我们的前...原创 2017-06-01 22:12:17 · 3295 阅读 · 1 评论 -
排序--堆排序分析与实现
何为堆一个数组序列我们可以将其用完全二叉树或近似完全二叉树(不是满二叉树的完全二叉树)表示出来,当数组下标为i时,它的父节点为(i-1)/2,左孩子为(2i+1),右孩子为(2i+2),这种对应关系说明数组下标为0的地方也要存储数据。(关系完全二叉树和满二叉树我在这里不做介绍)堆是在完全二叉树的基础上递归定义的,堆分为大顶堆和小顶堆。 大顶堆:根节点的数值大于孩子节点,完全二叉树的左右子树同时满原创 2017-07-27 20:25:04 · 651 阅读 · 0 评论 -
排序--归并排序
了解归并归并排序算法和快速排序算法是java.util.Arrays中使用的排序算法。对于一般的基本数据类型,Arrays.sort函数使用双轴快速排序算法,而对于对象类型使用归并排序(准确的说使用的是TimSort排序算法,它是归并排序的优化版本)。这样做的原因有两点,第一个原因,归并排序是稳定的,而快速排序不是稳定的。第二个原因,对于基本数据类型,排序的稳定性意义不大,但对于复合数据类型(...原创 2017-07-21 15:04:15 · 645 阅读 · 3 评论 -
查找--二叉查找树分析与实现
为什么我们需要掌握这些“高端”的树型结构事实上,大型数据库的组织结构一般采用树型结构,我们必须要解决频繁更新数据的能力,要求支持高效的动态查找能力,包括记录的插入,删除,精确匹配查询,范围查询和最大值、最小值查询。但是由于数据库中包含了大量的记录,所以线性表的查询本身会因为记录太大而无法存储到主存之中,另外对于记录的插入和删除操作更需要移动大量的元素,这本身的效率是非常低下的。二叉...原创 2017-08-03 10:16:00 · 540 阅读 · 0 评论 -
排序--快速排序分析
快速排序实现代码:快速排序可以看到我的代码有一个错误版,我在这里给大家分析一下为什么会出现错误,并且将之记录以便今后进行查阅。快速排序(错误版分析)int Quick :: process(int array[], int l, int r) { int temp = array[l]; while(l != r) { while(array[r] >= temp) r原创 2017-07-22 00:20:16 · 502 阅读 · 0 评论 -
链表的逆置
链表的逆置原创 2016-06-09 21:37:16 · 780 阅读 · 0 评论 -
线性表--顺序表
最近开始学习数据结构与算法,一直认为数据结构与算法是值得一个程序员用一生去研究的东西,所以决定每次所学所得记录下来,加深自己的印象。顺序表什么是顺序表 我们知道在计算机中我们可以用不同的方法来存储数据,最常用的就是顺序存储,顺序存储指的是我们在计算机内存中用一块连续的地址内存空间按顺序存储线性表的各个数据元素。这就是顺序表。那么,我们立马能想到的一个顺序表是什么呢?没错,就是我们最常使用的数组原创 2016-10-13 23:50:53 · 1004 阅读 · 0 评论 -
链表排序--冒泡法
对于排序,相信大家都不陌生,对于数组来说,我们基本能熟练应用许多排序,像冒泡,选择,快排等等。对于链表的排序,在上学期做课程设计的时候忽略了这个问题,然后在最近才进行了实际的操作,结果发现问题还挺多的,实际解决起来学到了一些东西,决定给大家分享一下。排序的代码首先,给大家先把链表排序的代码附上,随后我会说明其中运行的过程,还有我当初写的时候,碰到的问题。void buttle_sort(node原创 2016-10-17 17:43:55 · 3281 阅读 · 3 评论