数据结构与算法
坯子蔡
永远怀着一颗学习的心去行走
展开
-
数据结构与算法之排序算法
数据结构与算法之排序算法1. 如何分析一个排序算法1.1 算法的执行效率1.1.1 最好情况、最坏情况、平均时间复杂度1.1.2 时间复杂度的系数、常数 、低阶1.1.3 比较次数和交换(或移动)次数1.2 算法的内存消耗1.3 算法的稳定性冒泡排序(Bubble Sort)2.1 冒泡排序的分析2.1.1 冒泡排序是原地排序算法2.1.2 冒泡排序是稳定的排序算法2.1.3 冒泡排序的时间复杂度3. 插入排序(Insertion Sort)3.1 插入排序的分析3.1.1 插入排序是原地排序算法3.1.2原创 2020-05-19 20:41:44 · 278 阅读 · 0 评论 -
数据结构与算法之递归算法
数据结构与算法之递归算法1. 如何理解递归1.1 递归的三个满足条件1.1.1 一个问题的解可以分解为几个子问题的解1.1.2 问题与分解后的子问题,除数据规模不同,求解思路完全一样1.1.3 存在递归终止条件2. 如何编写递归3. 递归需要警惕的问题3.1 警惕栈溢出3.2 警惕重复计算3.3 警惕复杂度高4. 递归改写为非递归5. 总结 推荐注册返佣金的这个功能我想你应该不陌生吧?现在很多 App 都有这个功能。这个功能中,用户 A 推荐用户 B 来注册,用户 B 又推荐了用户 C 来注册。我们可以原创 2020-05-18 15:36:57 · 386 阅读 · 0 评论 -
数据结构与算法之复杂度分析
数据结构与算法之复杂度分析1. 为什么需要复杂度分析1.1 测试结果非常依赖测试环境1.2 测试结果受数据规模的影响很大2. 大 O 复杂度表示法2.1 时间复杂度分析2.1.1 只关注循环执行次数最多的一段代码2.1.2 加法法则:总复杂度等于量级最大的那段代码的复杂度2.1.3 乘法法则:嵌套代码的复杂度等于嵌套内外代码复杂度的乘积2.2 常见时间复杂度实例分析2.2.1 O(1)2.2.2 O(logn)、O(nlogn)2.2.3 O(m+n)、O(m*n)2.3 空间复杂度分析3. 总结 我们原创 2020-05-18 12:03:52 · 473 阅读 · 0 评论 -
数据结构与算法之堆
数据结构与算法之堆1. 基本知识1.1 概念1.2 堆的存储1.3 操作1.3.1 插入元素1.3.2 删除堆顶元素1.3.3 如何基于堆实现排序1.3.3.1 建堆1.3.3.2 排序1.4 快排 VS 堆排序2. 堆的实现 堆这种数据结构的应用场景非常多,最经典的莫过于堆排序了。堆排序是一种原地的、时间复杂度为 O(nlogn) 的排序算法。 我们知道快速排序,平均情况下,它的时间复杂...原创 2020-04-18 23:42:58 · 294 阅读 · 0 评论 -
数据结构与算法之红黑树
数据结构与算法之红黑树1. 基础知识1.1 平衡二叉树1.2 红黑树1.2.1 基本知识1.2.2 基本操作1.2.2.1 插入操作的平衡调整1.2.2.2 删除操作的平衡调整1.2.3 叶子节点是黑色的空节点1.2.3 红黑树的实现1. 基础知识1.1 平衡二叉树 二叉查找树是最常用的一种二叉树,它支持快速插入、删除、查找操作,各个操作的时间复杂度跟树的高度成正比,理想情况下,时间复杂度...原创 2020-04-18 22:16:34 · 314 阅读 · 2 评论 -
数据结构与算法之二叉树
数据结构与算法之二叉树1. 树2 二叉树2.1 基本知识2.2 存储方式2.2.1 链式存储2.2.2 顺序存储2.3 遍历方式3. 二叉树的实现1. 树 “树”这种数据结构真的很像我们现实生活中的“树”,这里面每个元素我们叫作“节点”;用来连线相邻节点之间的关系,我们叫作“父子关系”。 比如上面这幅图,A 节点就是 B 节点的父节点,B 节点是 A 节点的子节点。B、C、D 这三个节...原创 2020-04-18 17:52:05 · 184 阅读 · 0 评论 -
数据结构与算法之跳表
数据结构与算法之跳表1.基本知识1.1 概念1.2 时间复杂度分析1.3 空间复杂度分析2. 跳表操作2.1 动态插入和删除2.2 索引动态更新3. 跳表的实现1.基本知识1.1 概念 跳表(Skip List)使用空间换时间的设计思路,通过构建多级索引来提高查询的效率,实现了基于链表的“二分查找”。跳表是一种动态数据结构,支持快速的插入、删除、查找操作,时间复杂度都是 O(logn)。简...原创 2020-04-18 17:18:38 · 249 阅读 · 0 评论 -
数据结构与算法之队列
数据结构与算法之队列1. 基本知识1.1 基本概念1.2 分类1.3 基本操作1.4 假溢出2. 实现2.1 循环队列2.2 链式队列1. 基本知识1.1 基本概念队列也是一种受限制的线性表,可以由数组和链表实现,主要操作由入队和出队,具有先进进出的特点。1.2 分类顺序队列:数组实现,需要解决假溢出问题,需要搬迁数据;链式队列:链表实现;循环队列:解决假溢出问题,性能较高;阻...原创 2020-04-16 16:21:10 · 104 阅读 · 0 评论 -
数据结构与算法之栈
1. 基本知识1.1 概念栈是一种操作受限的数据结构,只能在一端插入和删除数据,因此只支持入栈和出栈操作,后进先出是它的最大特点。栈可以通过数组实现,也可以通过链表来实现,其出栈和入栈的时间复杂度都是O(1)。1.2 分类顺序栈链式栈1.3 基本操作入栈 push(T data)出栈 pop()获取栈顶数据 peek()1.3 实现只需要维护一个栈顶指针,通过数组实...原创 2020-04-16 11:23:43 · 206 阅读 · 0 评论 -
数据结构与算法之链表
数据结构与算法之链表1. 基本知识1.1 概念1.2 分类1.3 链表 VS 数组1.4 链表的实现1.4.1 单链表1.4.2 单向循环链表1.4.3 双向链表1.4.4 双向循环链表2. 链表的应用2.1 通过链表实现LRU缓存淘汰算法2.2 链表常见面试题1. 基本知识1.1 概念通过指针将一组零散的内存块串联起来。1.2 分类单链表单向循环链表双向链表双...原创 2020-04-14 16:23:07 · 168 阅读 · 0 评论