数据结构与算法
在屋顶听歌
Stay Focused And Work Hard !!!
展开
-
数据结构之树(九)
目录前言一、什么是树二、常见的树<二叉树>链表式的存储二叉树数组存储二叉树三、二叉查找树(Binary Search Tree) 二叉查找树基本操作与时间复杂度分析1. 查找2. 插入3. 删除四、树的遍历二叉查找树遍历代码实现有了如此高效的散列表,为什么还需要二叉树呢?五、树的应用场景前言 在前面几篇博文学习了...原创 2019-06-23 18:52:10 · 305 阅读 · 0 评论 -
数据结构小结
目录一、时空复杂度二、数据结构分类图三、细分数据结构1. 数组2. 链表3. 栈4. 队列5. 散列表6. 跳表7. 树8. 图一、时空复杂度 小结:通常所说的时空复杂度分析其实是描述程序运行过程中所需要的时间与额外空间的一种度量方式并非真实所需要的时间与空间,因此也称为渐近时间复杂度或渐近空间复杂度。二、数据结构分类图总结...原创 2019-07-01 18:54:21 · 528 阅读 · 0 评论 -
数据结构之图(十)
前言一. 图的基本概念二. 图的存储方式 1. 邻接距阵存储 2. 邻接表存储图 3. 十字链表三. 图的实际应用 1. 存储微信或微博的好友关系四. 图的遍历 广度优先遍历(BFS) 深度优先遍历简称 DFS五. 学习过程中的疑问前言 相信大家都有听过《哥尼斯堡七桥》这个故事吧,正是这个故...原创 2019-06-25 23:08:01 · 811 阅读 · 0 评论 -
数据结构之跳表(八)
前言一. 什么是跳表二. 跳表的基本概念1. 跳表的创建过程2. 跳表的时空复杂性分析3. 更新数据时跳表的维护三. 跳表的实际应用场景四. 学习过程中的疑问点小记前言 有序数组运用数组随机读取的特性,通过二分查找法可实现快速查找,检索的时间复杂度为O(logN)。由于是对数的时间复杂度,因此随着数据量的增加其检索效率更凸显。例如在42亿的数据集...原创 2019-06-22 14:18:33 · 782 阅读 · 0 评论 -
数据结构之队列(六)
前言:一. 什么是队列二. 队列的实际应用三. 队列的代码实现 1.数组实现(顺序队列) 2.循环队列(基于数组) 3. 链表实现(链式队列)前言: 想必大家都有过在车站排队买票的经验吧,先来的排在前面,后来的依次往后排,当排在最前面的买到票则退出队列,这时排在后面的则跟上。其实这跟数据结构中的队列是同一个原理,先进先...原创 2019-06-16 23:08:44 · 259 阅读 · 0 评论 -
数据结构之复杂度分析(二)
一. 什么是复杂度分析二. 为什么需要复杂度分析三. 如何进行复杂度分析 空间复杂度四. 复杂度分析的细化一. 什么是复杂度分析衡量一段代码的执行效率最主要的无非是“快”、“省”,其中快是指运行速度快,省是指占用空间少。这里所指的复杂度分析指的是时间、空间复杂度。我们常说的以空间换取时间也正是对应这两点。时间复杂度:代码执行时间随着数据量规模增长的变化趋势,这...原创 2019-06-07 10:34:54 · 601 阅读 · 0 评论 -
为何要学习数据结构(一)
一、为什么要学习数据结构与算法二、如何高效系统的学习数据结构与算法 1. 如何定义数据结构与算法 2. 为啥数据结构与算法总是一起出现呢? 3. 如何高效地学习数据结构与算法?前言 笔者于2015年普通本科院校毕业,在接近大四还很坚决自己不会走IT路,因此在相关专业课上算是得过且过了。没有耀眼的文凭,没有扎实的基础。 ...原创 2019-06-27 10:09:08 · 336 阅读 · 0 评论 -
JDK1.8 之HashMap 原理探索
前言: 为啥出来工作4年之后再来探究HashMap的原理呢? 从开始出来工作之后,就断断续续的了解了HashMap的一些原理,但终究是没形成一个比较完整的架构,还有就是近期在进行数据结构的系统学习,还有就是发现JDK8之后对HashMap做了不少的优化。 首先需要明确一点 HashMap的底层数据结构是散列表,其整个组成由数组+链表或数组+链表与树组成。如下图所示...原创 2019-06-18 23:55:44 · 331 阅读 · 0 评论 -
数据结构之散列表(七)
前言一、什么是散列表散列表是如何组织数据的呢?散列表的基本概念二、Hash算法的设计什么是Hash算法Hash算法的应用场景三、散列表冲突的解决1. 开放寻址法2. 链表法3. 开放寻址法与链表法的对比四、散列表实际应用场景1. 拼写检查器2. LRU缓存淘汰算法3. 高级语言中对应的容器五、学习过程中的疑问前言 散列表笔...原创 2019-06-18 22:13:52 · 603 阅读 · 0 评论 -
数据结构之栈(五)
目录前言: 物理结构与逻辑结构一. 什么是栈二. 栈的应用场景 1. 首先由于栈是受限的操作结构,因此对于不想暴露过多操作接口的需求就很适合应用了。 2. 实现浏览器的前进与后退 3. 栈在函数调用中的应用 4. 栈在括号匹配中的应用 5. 栈在表达式求值中的应用三. 栈操作的实现代码前言: 在对...原创 2019-06-08 08:41:29 · 334 阅读 · 0 评论 -
数据结构之链表(四)
目录前言:一、链表的底层原理二、常见的链表单链表循环单链表双链表循环双链表三、链表的基本操作四、链表与数组性能对比五、链表的实现代码常见的 Java 链表容器六、简述缓存机制如何分别用链表和数组实现LRU缓冲淘汰策略?如何通过单链表实现“判断某个字符串是否为水仙花字符串”?七、链表的实际应用场景前言: 在上一篇文章中我们学...原创 2019-06-07 22:38:43 · 328 阅读 · 0 评论 -
数据结构之数组(三)
目录前言:一. 数组的底层原理数组如何实现随机读取二. 数组的基本操作删除操作的优化:三. 数组常见的操作方法四.可否用容器替代数组五. 数组为啥在很多语言中都是以0为开始下标呢前言: 常见的数据结构分为线性表与非线表,线性表有:数组、链表、队列、栈、哈希表(hash表),非线表有:树、堆、图等。 线性表的特点:以线的方式组织数据,每个线性表...原创 2019-06-07 10:33:27 · 295 阅读 · 0 评论