恋上数据结构与算法 第一季
文章平均质量分 84
猿小羽
技术本身是不值钱的,只有和业务结合的技术才是值钱的!
技术是为了实现某个业务,进而通过业务赚钱!
展开
-
第十二章 映射 Map
第十二章 映射 MapMap 在有些编程语言中也叫做字典(dictionary,比如 Python、Objective-C、Swift等)Map 中的每一个 Key 是唯一的Map 中的每一个 Key 对应一个 Value类似 Set,Map 可以直接利用之前学习的链表、二叉搜索树(AVL树、红黑树)等数据结构来实现Map的接口定义public interface Map<K, V> { int size(); boolean isEmpty原创 2022-04-06 08:57:09 · 243 阅读 · 0 评论 -
第十一章 集合(Set)
第十一章 集合(Set)集合的特点不存放重复的元素常用于去重存放新增 IP,统计新增 IP 量存放词汇,统计词汇量. . .集合的接口定义集合的接口文件(interface),所有实现的集合都需要实现该接口public interface Set<E> { int size(); //元素数量 boolean isEmpty(); // 是否为空 void claer(); // 清空集合原创 2022-04-06 08:50:52 · 132 阅读 · 0 评论 -
第十章 红黑树(Red Black Tree)
第十章 红黑树(Red Black Tree)一开始学红黑树必然一脸懵逼,学完再看还是一脸懵逼红黑树介绍红黑树也是一种自平衡的二叉搜索树以前也叫做平衡二叉B树(Symmetric Binary B-tree)红黑树必须满足以下 5 条性质:请问下面这棵是红黑树么? (不是一棵红黑树)红黑树的等价变换有如下一棵红黑树:上面那棵红黑树变成了下面这个样子:下面是一个与上面的红黑树等价的 4阶B树红黑树 和 4阶B树(2-3-4树)具有等价性BLACK 节原创 2022-04-06 08:46:22 · 228 阅读 · 3 评论 -
第九章 B树(B-tree、B-树)
第九章 B树(B-tree、B-树)B树是一种平衡的多路搜索树,多用于文件系统、数据库的实现;仔细观察B树,有什么眼前一亮的特点?1 个节点可以存储超过 2 个元素、可以拥有超过 2 个子节点拥有二叉搜索树的一些性质平衡,每个节点的所有子树高度一致比较矮m阶B树的性质(m>=2)如果 m = 2,那B树是什么样子?二叉搜索树数据库实现中一般用几阶B树?200 ~ 300B树 vs 二叉搜索树B树 和 二叉搜索树,在逻辑上是等价的多代节点合并,原创 2022-03-17 22:27:37 · 188 阅读 · 0 评论 -
第八章 平衡二叉搜索树、AVL树
第八章 平衡二叉搜索树、AVL树二叉搜索树缺点分析当 n 比较大时,两者的性能差异比较大比如 n = 1000000 时,二叉搜索树的最低高度是 20,最高高度是 1000000由此可见,二叉搜索树添加节点时可能会导致二叉搜索树退化成链表删除节点时也可能会导致二叉搜索树退化成链表有没有办法防止二叉搜索树退化成链表?让添加、删除、搜索的复杂度维持在 O(logn)?改进二叉搜索树平衡(Balance)平衡:当节点数量固定时,左右子树的高度越接近,这棵二叉树就越平衡(高度越低)原创 2022-03-17 22:19:34 · 715 阅读 · 1 评论 -
第七章 二叉搜索树(BinarySearchTree)
第七章 二叉搜索树(BinarySearchTree)推荐一些神奇的网站:https://520it.com/binarytrees/http://btv.melezinek.cz/binary-search-tree.htmlhttps://www.cs.usfca.edu/~galles/visualization/BST.html思考:在 n 个动态的整数中搜索某个整数?(查看其是否存在)假设使用动态数组存放元素,从第 0 个位置开始遍历搜索,平均时间复杂度: O ( n )原创 2022-03-17 16:37:48 · 204 阅读 · 2 评论 -
第六章 二叉树(Binary Tree)
第六章 二叉树(Binary Tree)树形结构生活中的树形结构使用树形结构可以大大提高效率树形结构是算法面试的重点树(Tree)的基本概念节点、根节点、父节点、子节点、兄弟节点一棵树可以没有任何节点,称为空树一棵树可以只有 1 个节点,也就是只有根节点子树、左子树、右子树节点的度(degree):子树的个数树的度:所有节点度中的最大值叶子节点(leaf):度为 0 的节点非叶子节点:度不为 0 的节点层数(level):根节点在第 1 层,根节点的子节点在第 2原创 2022-03-10 10:30:01 · 2335 阅读 · 3 评论 -
第五章 队列(Queue)
第五章 队列(Queue)队列是一种特殊的线性表,只能在头尾两端进行操作;队尾(rear):只能从队尾添加元素,一般叫做 enQueue,入队队头(front):只能从队头移除元素,一般叫做 deQueue,出队先进先出的原则,First In First Out,FIFO队列的接口设计int size(); // 元素的数量boolean isEmpty(); // 是否为空void clear(); // 清空void enQueue(E element); // 入队E de原创 2022-03-07 11:09:51 · 374 阅读 · 0 评论 -
第四章 栈(Stack)
第四章 栈(Stack)栈是一种特殊的线性表,只能在一端进行操作往栈中添加元素的操作,一般叫做 push,入栈从栈中移除元素的操作,一般叫做 pop,出栈(只能移除栈顶元素,也叫做:弹出栈顶元素)后进先出的原则,Last In First Out,LIFO注意:这里说的 “栈” 与内存中的 “栈空间” 是两个不同的概念栈的接口设计int size(); // 元素的数量boolean isEmpty(); // 是否为空void push(E element);原创 2022-03-07 10:59:57 · 549 阅读 · 0 评论 -
第三章 链表(Linked List)
第三章 链表(Linked List)算法演示地址动态数组有个明显的缺点:可能会造成内存空间的大量浪费。能否用到多少就申请多少内存呢?链表可以办到链表是一种链式存储的线性表,所有元素的内存地址不一定是连续的链表的设计链表的接口设计由于链表的大部分接口和动态数组一致,我们抽取出一个共同的 List 接口package cn.xx.java;/** * @author xiexu * @create 2021-07-13 9:59 上午 */public i原创 2022-01-29 12:13:59 · 225 阅读 · 0 评论 -
第二章 动态数组
第二章 动态数组什么是数据结构?数据结构是计算机存储、组织数据的方式数据结构是指相互之间存在一种或多种特定关系的数据元素的集合在实际应用中,根据使用场景来选择最合适的数据结构线性表线性表是具有 n 个相同类型元素的有限序列( n ≥ 0 )a1 是首节点(首元素), an 是尾结点(尾元素)a1 是 a2 的前驱节点, a2 是 a1 的后继节点常见的线性表有:数组链表栈队列哈希表(散列表)数组(Array)数组是一种顺序存储的线性表,所有元素的内存地址是连原创 2022-01-29 12:18:36 · 207 阅读 · 0 评论 -
第一章 复杂度
第一章 复杂度什么是算法算法是用于解决特定问题的一系列的执行步骤。以下算法是为了解决两数相加的问题。// 计算a和b的和public static int plue(int a, int b){ return a + b;}//计算1+2+3+...+n的和public static int sum(int n){ int result = 0; for(int i = 1; i <= n; i++){原创 2022-01-29 12:21:57 · 136 阅读 · 0 评论