数据结构和算法
iamsongyu
一个研究僧,酷爱编程,喜欢web安全,专业为网络安全。欢迎大家一起交流进步,有问题请联系QQ:1528736192
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
数据结构与算法-为什么要学数据结构和算法(开篇)
最近的发论文和毕业耽误了一段时间,不过并没有停止学习,这段时间学习了小灰漫画算法和网络安全的一些书籍。以前的我总是浮于表面(不是说我浮躁),看到什么东西或者有什么想法,就会想如何用编程实现这么一个目标。这么长时间走过来,虽然这个语言那个语言的学着,然后造出来点有用的东西,最后才发现这些其实都是弯路。对于学编程而言,你学会了一门语言实际上就很容易的触类旁通其他的语言,所以出刚开始的时候只要选...原创 2019-08-19 18:18:12 · 809 阅读 · 2 评论 -
数据结构与算法-散列表冲突的解决办法
我们上文以字典作为例子,描述了散列表这种结构。它以函数H(哈希函数)作为纽带,连接一对键值,通过H(键)计算得出数组的下标用于存储键值对。它的优势是可以绑定键值,允许我们通过键来访问特定的值,并且寻找的复杂度不精准的来说是O(1)。但是我们发现了问题,我们的数组是有限长度的,但是输入在某些情况下,不同的键可能会得到同样的下标,即产生了冲突。如这两个图所示,键值1和存储之后,键值...原创 2019-09-20 20:30:12 · 1043 阅读 · 0 评论 -
数据结构与算法-链表
链表链表也是一个非常基本的数据结构,跟数组有很大的不同。我们知道数组是占用连续内存的线性结构ADD就是该数组的首地址,访问元素可以使用ADD【下标】。然而我们可以发现数组占用连续的空间,需要扩容的时候需要开辟更大的连续空间然后复制过去,并且当我们移除 插入元素时,需要遍历数组将元素进行前移补位和后移空位。数组虽然访问方便,但是对于这样的操作是在是太不友好了。为了,出现了链表结构...原创 2019-09-14 16:40:38 · 437 阅读 · 0 评论 -
数据结构与算法-散列表
散列表我们前面已经说过数组这个数据结构,他非常的方便,使用连续的内存和下标来操作元素。但是这难以满足一些其他的需求,比如我们需要将两个对象进行一一对应,没错我们常用的字典就是其中的一种类型。字典这种结构使用键(key)---值(value)的对应关系,我们可以根据键获得对应的值。a = {"liu":98,"zhang":99}a["liu"]# 98我们可以...原创 2019-09-14 16:40:29 · 530 阅读 · 0 评论 -
数据结构与算法-队列
今天可能要多说几句,因为又遇到点事有点感触哈。出去开会结果讲的大多数都是个我的专业无关的专题,专家讲的那些名词别说不了解,听都没听过。我就突然联想到平时的学习,既然我们作为某个领域的人,就一定要了解领域里的相关专业术语。要不无论是跟其他人交流,或者是出去学习,人家拿出来一个术语,咱还不知道就很难受。先不说知不知道的问题,对术语的了解一定程度上可以判断一个人对该领域的研究和学习是否深入...原创 2019-09-06 09:32:49 · 503 阅读 · 0 评论 -
数据结构与算法-栈
数据结构的数组已经简单的说了,本来中间应该是链表的,但是还是决定先说栈的知识,先将一整套的流程理一遍,然后在切换到链表上。数据结构其实可以分为物理结构和逻辑结构,像数组由于是在内存中连续存储的,所以支持下标访问,这就是物理结构,因为该特性是由自身的物理存储方式而带来的。那么逻辑结构就大相径庭了,它是依靠逻辑关系来控制的结构。固然任何数据都需要存储和分布,我举一个简单的例子你就会理解。...原创 2019-08-28 19:19:22 · 646 阅读 · 0 评论 -
数据结构与算法-排序算法(鸡尾酒排序-特殊情况的排序方法)
说起来排序,始终会出现这样的问题这是一个普通的数组,如果我们想从小到大排序的话,无论是简单的选择排序还是冒泡排序都会有额外的工作。举例子,使用冒泡排序:第一轮显然现在已经是有序的了,但是冒泡排序还需要进行七轮,虽然不会移位,但是还是会逐个比较,这明显是额外的,多余的工作。这就是这次要说的重点,算法这东西学的是原理,考的是应用,要会的是根据实际情况调整,优化,使得算...原创 2019-08-27 19:56:49 · 517 阅读 · 0 评论 -
数据结构与算法-数组的插入、删除、与查找(高效的二分查找法)
在前文我们简单的聊了聊数组的初步的原理,数组是如何获取元素的,数组又是如何在内存中存储的。除此之外就是我们今天要说的,数组的一些应用方式。我们可能各种语言常见一些函数 int[] array (这里以int数组举例子)插入函数 array.Insert(int index,int item)删除函数 array.Remove(int item)删除函数 array.Removea...原创 2019-08-26 19:57:25 · 2526 阅读 · 0 评论 -
数据结构与算法-使用下标访问的数据结构(数组)
这个是正好是前面讲了一些排序算法,也用到了不少次数组了,所以就在这里想直接说一下。数据结构有很多,每个都有自己的优点,因为每一个结构的产生都是因为实际的需要。学习数据结构需要,需要牢牢记住一句话:结构决定功能每一种结构的特点,决定了他们的用途,功能。还是用java举例子,我么常用的数组class Untitled { public static void main(Stri...原创 2019-08-22 18:56:00 · 1342 阅读 · 0 评论 -
数据结构与算法-排序算法(计数排序)
这其实是一个"投机取巧"地方法,应用的范围不是那么宽,还没有涉及到更深的思想,所以就放在前面来讲。我们的排序问题实际上就是大的跟小的按照顺序输出。排序的结果很显然是1235677思考这样一个问题,我们输出的实际上就是数字的大小和数目。我们事先可以维护一个已经排序好的数字,然后根据遍历数组,按照数字的个数输出,不就是排好序的了吗我们遍历数组,开始统计7 1...原创 2019-08-21 19:54:36 · 628 阅读 · 0 评论 -
数据结构与算法-时间复杂度与空间复杂度
这两个词是编写算法时需要考虑的,在实际的场景中,可能老板就跟你说他要实现一个什么功能,让你实现一个O(n)的算法,此时我们是这个表情??一个算法中需要考虑到的有两点,一个是执行的速度,另外一个则是执行占得资源。距离子来说查询数据库,然后将查到的数据进行排序我们的实现:先获取所有数据,然后从内存中筛选,选择一个冒泡排序(O(n^2))路人A的实现:利用查询语句从数据库获取筛选后的数据...原创 2019-08-21 18:53:40 · 506 阅读 · 0 评论 -
数据结构与算法-排序算法(选择排序)
冒泡排序真的是太烦了,需要一直两两比较,将最大的浮动到上面的位置去,可能有人在想,我为什么不记住最大或最小的位置,遍历完成之后只需要交换最大或最小的和对应的位置不就可以了,省去了来回串来串去的烦恼。确实是这个道理,这个方法就是选择排序。我们使用例子演示一下首先从第一位遍历 我们假设当前最小的是第一个第一位跟第二位比较,第二位更小,记录的序号更新为1最小值变为...原创 2019-08-20 20:07:13 · 453 阅读 · 0 评论 -
数据结构与算法-排序算法(冒泡排序)
排序是一个我们经常遇到的问题,这也是一个非常基本的问题,例如我们平时大小个站队?搜索数据之后的排序,常见的还是数字的排序等等(该图像素材来源于网络)那么想象我们站队的时候是怎么排序的,来时看到谁最高就让谁站到第一位,然后再找第二高的,以此类推。我们看出高低也是互相比较得出的,计算机也可以使用这个方法,首先找到最高的,然后是第二高的,这种方法就是冒泡排序,因为他是按照大小一个一个的得到结果,就...原创 2019-08-19 20:22:40 · 1163 阅读 · 1 评论 -
数据结构与算法-初识树和图
对于很多人来说,字典和数组是非常熟悉也经常用的数据结构。链表也还算比较常用。他们的特点如下:1.字典和数组都是线性结构2.字典和数组,链表都是按照位置来存储数据的,例如字段是通过哈希计算下标,数组是使用下标,链表则是一个一个的链接在一起3. 字典和数组,链表都是实现的几乎都是一对一的结构,既数据之间的关系的关系是一一对应。树我们可以看出,上述的数据结构几乎是一对...原创 2019-10-02 12:16:27 · 1093 阅读 · 0 评论
分享