数据结构
renxhui
android 开发工程师
展开
-
数据结构和算法--数组
定义数组 :是一种线性表数据结构,他用一组连续的内存空间,来储存一组相同的数据类型的数据这里边有几个关键词线性表数据结构顾名思义,线性表就是数据排成一条线型的结构,每个线性表上的数据,最多有前后俩个方向,其实除了数组,链表,队列,栈也是线性结构...原创 2018-12-28 19:14:17 · 183 阅读 · 0 评论 -
数据结构与算法--排序(中)
今天我们讲,时间复杂度为O(nlogn)的俩种算法,归并排序和快速排序归并排序归并排序的核心思想如果我们要排序一个数组,我们就把这个数组中间分开,成为前后俩个部分,然后对前后俩个部分分别进行排序,再把排序后的俩个部分合并成一个数组,这样整个数组就有序了归并排序就是用的这中分治思想,顾名思义,分而治之,把大问题分解成小问题,然后解决小问题,小问题解决了大问题自然也就解决了我们可以看出,...原创 2019-01-16 19:50:20 · 221 阅读 · 0 评论 -
数据结构与算法--二叉树基础(上)
什么是树树这种结构很像我们生活中的树,这里的每个元素叫做节点,用线连接的节点,我们叫做父子关系比如下面这个图,A节点就是B节点的父节点,B节点是A节点的子节点,BCD三个节点的父节点是同一个父节点,他们互相称为兄弟节点,我们把没有父节点的称为根节点,比如E,我们把没有子节点的叫做叶子节点或叶节点比如图中的G H I J K L都是叶子节点树还有几个相似的概念,高度,深度,层,他们的定义是...原创 2019-01-22 16:09:21 · 659 阅读 · 0 评论 -
数据结构和算法--哈希算法
什么是哈希算法前面我们学习了散列表,散列函数,和哈希算法啥关系?其实不管散列还是哈希,都是翻译的差别,对于英文都是hash,所以散列=哈希=hash哈希算法的定义将任意长度的二进制串映射为固定长度的二进制串,这种映射规则就是哈希算法。通过原始数据映射成的规定固定长度的二级制串就是哈希值一个优秀的哈希算法应该满足以下几个要求:一 哈希值不能反向推导出原始数据二 对输入数据非常敏感,哪怕原...原创 2019-01-22 11:37:10 · 739 阅读 · 0 评论 -
数据结构与算法--如何实现LRU缓存淘汰算法
基于链表实现我们维护一个有序的单链表,越靠近链表尾部的越是越早之前访问的,当有一个新的数据访问时,我们从头遍历链表1 如果此数据之前已经被缓存到了链表中,我们遍历得到这个数据节点,然后从原位置删除,插入到链表的头部2 如果此数据没有缓存到链表中,分为俩种情况2.1 如果此时链表未满,就将此节点缓存到链表头2.2 如果此时缓存已经满了,则把链表尾节点删除,再将新的数据添加到头结点。这就是...原创 2019-01-21 17:32:25 · 1309 阅读 · 0 评论 -
数据结构与算法--散列表
什么是散列表散列表英文名叫“hash table”,我们平时也叫做哈希表或者hash表散列表用的是数组支持下标随机访问数据的特性,所以散列表就是数组的一种扩展,由数组演化而来,可以说没有数组就没有散列表用一个例子解释一下,假如有89位同学参加学校运动会,每位同学都有自己的编号,用6位数字来表示,例如051167,05表示年级,11表示班级,67表示排名。为了方便查找,该如何储存呢?我们可以...原创 2019-01-21 15:44:24 · 189 阅读 · 0 评论 -
数据结构和算法--递归
怎么理解递归我们举一个小例子假如你跟你女朋友去电影院看电影,你不知道你的座位是几排,但是这个难不到你,你只需要问一下你前面的人是几排,然后你再+1就行了,但是你前面的人也不知道他是几排,你前面的人也向前问,知道问到第一排,他说我这是第一排,然后在一排一排的数据传回来,直到你前边的人告诉你他在几排,你就知道了答案这就是一个非常标准的递归求解的过程,去的过程叫递,回来的过程叫归,基本上所有的递归...原创 2019-01-10 11:42:08 · 875 阅读 · 0 评论 -
数据结构和算法--排序(上)
如何分析一个排序算法算法的执行效率对与算法的执行效率,我们一般用三个方面去衡量1 最好,最坏,平均时间复杂度我们分析一个算法时,需要分析出最好,最坏,平均时间复杂度,还要指出什么时候最好,什么时候最坏在接近有序的数组,和接近完全无需的数组,时间复杂度肯定是有区别的,我们需要知道,时间在不同数据下的性能表现2 时间复杂度的系数,常数,低阶我们知道当数据规模很大时,常常会忽略低阶,系数。...原创 2019-01-15 15:28:24 · 195 阅读 · 0 评论 -
数据结构和算法--堆和堆排序
什么是堆堆是一种特殊的树,他有俩个要求1 堆是一个完全二叉树2 堆每一个节点的值,都大于等于(或小于等于)其左右子树节点的值解释一下:第一点,完全二叉树就是除了最后一层,其它层的节点数都是满的,最后一层的节点都靠左排列每个节点都大于等于左右子树节点的叫做大顶堆,每个节点都小于等于左右子树节点的叫做小顶堆12 是大顶堆,3是小顶堆,4不是堆如何实现一个堆要实现一个堆,首先我们需要...原创 2019-01-25 15:29:41 · 354 阅读 · 0 评论 -
数据结构和算法--队列
## 如何理解队列我们可以把它想成买票,先来的先买,后来的排到队尾,不允许插队,**先进者先出,这是典型的队列**队列只包含来个操作,**入队enqueue()**,放一个数据到队列尾部,**出队dequeue()**,从队列头部取一个元素原创 2019-01-09 11:26:33 · 279 阅读 · 0 评论 -
数据结构和算法--栈
如何理解栈栈就像放盘子一样,放的时候从下向上依次放,取得时候从上向下依次取,不能从中间抽取,后进者先出,先进者后出,这就是典型的栈结构。从操作特性上,栈是一个受限制的特性表,只允许在一端插入和删除数据,相比数组和链表,栈带给我的只是限制,并没有任何的限制,为什么不直接用数据和链表?从功能上讲,链表和数组确实可以代替栈,但是你要知道,特定的数据结构是对特定的场景进行的抽象,而且数组和链表暴露了...原创 2019-01-08 15:44:47 · 835 阅读 · 0 评论 -
数据结构与算法--跳表
什么是跳表如果一个单链表,储存数据是有序的,我们要查找一个数据,需要遍历一遍链表,时间复杂度为O(n),效率不是很高那么该如何提高效率呢?如果我们像下图一样对链表建立一层索引,查找起来会不会快一些,每俩个结点提取一个结点到上一级,我们把抽出来的一层叫做索引层,down代表down指针,指向下一级比如我们要查找16,我们可以先在索引层查找,当查到13,下一个是17大于16,那么就向下查找,...原创 2019-01-18 16:56:06 · 504 阅读 · 0 评论 -
数据结构与算法--平衡二叉查找树(红黑树)
什么是平衡二叉查找树我们之前依次讲了,树,二叉树,二叉查找树,二叉查找树非常常用,支持快速查找,删除,插入,理想的时间复杂度为O(logn),但是如果频繁插入删除,会导致左右子树的分布不均衡,极端情况下退化成链表,时间复杂度退化成O(n),这个时候我们就需要设计一种平衡二叉查找树,解决时间复杂度退化问题平衡二叉树的严格定义:二叉树中任意一个节点的左右子树盖度相差不能大于1,所以满二叉树和完全二...原创 2019-01-23 19:21:29 · 636 阅读 · 0 评论 -
数据结构和算法--二分查找
二分查找的思想查找0–99之间的数字,如果查找一个数字,我们每次取中间middle数判断,如果中间数大了,就像0–middle区间找,如果小了就像middle–99区间找,假如我们查找的是23二分查找是针对的有序集合,每次都跟区间中间元素的对比,将待查找的区间缩小一半,直到找到元素,或者区间缩小到0二分查找的时间复杂度O(logn)假设查找的区间为n,每次缩小一半,最坏情况下直到缩小到0...原创 2019-01-18 11:53:58 · 228 阅读 · 0 评论 -
数据结构与算法--排序(下)
今天我们学一下,时间复杂度为O(n)算法,时间复杂度为O(n),也叫做线性排序桶排序桶排序的核心思想将要排序的数据,分别装入到结构有序的桶中,将每个桶中的数据分别进行排序,桶内排序完之后,再依次吧桶中的数据取出来,组成的序列就是有序的。桶排序的时间复杂度如果要排序的数据为n个,我们把它均匀的分入m个桶中,每个桶中就有k=n/m个数据,每个桶中使用快速排序进行排序时间复杂度为O(klo...原创 2019-01-17 16:20:13 · 119 阅读 · 0 评论 -
数据结构与算法--链表
概述数组需要连续的内存空间来储存,所以对内存要求比较高,如果我们申请一个100MB的数组,如果内存中没有连续的,内存足够大的空间时,即使剩余总内存大于100MB,也会申请失败链表需要不连续的内存空间来储存,他通过指针,把一组不连续的内存块连接起来使用,所以如果申请100MB的链表,不会有问题常见的链表有,单链表,循环链表,和双向链表,我们先看一下单链表单链表链表通过指针,将一组不连续的...原创 2018-12-28 19:13:58 · 306 阅读 · 0 评论 -
数据结构和算法--复杂度分析
大O复杂度表示法算法的执行效率,粗略的讲就是算法的执行时间,那么如何在不运行代码的情况下,估算代码的执行时间呢我们先看一个简单的求和代码1 int cal(int n) {2 int sum = 0;3 int i = 1;4 for (; i <= n; ++i) {5 sum = sum + i;6 }7 return sum;8 }从cpu...原创 2018-12-28 19:14:08 · 329 阅读 · 0 评论 -
数据结构和算法--二叉树基础(下)二叉查找树
二叉查找树定义二叉查找树顾名思义,他是为了快速查找而生的,不过他除了快速查找,还支持快速插入,快速删除,这些都依赖于二叉查找树的特殊结构二叉查找树要求,在树中任意一个节点,其左子树的每个节点都要小于这个节点值,其右子树的每个节点都要大于这个节点的值如下图:二叉树查找如何在二叉查找树中查找一个数据呢? 首先我么你需要首先选取根节点,如果他等于我们查找的数就返回,如果查找的数比这个根节点小,...原创 2019-01-23 15:35:13 · 164 阅读 · 0 评论