
数据结构与算法
文章平均质量分 91
数据结构与算法
飘飞雪
八月秋高风怒号,卷我屋上三重茅
展开
-
数据结构与算法笔记之链表(二)
文章目录链表介绍相关问题总结链表逆序打印两个有序链表的公共部分回文链表判断链表的荷兰国旗问题约瑟夫问题链表介绍链表是以结点的方式存储,每个节点含有data域与next域组成:data域:存储本节点的内容信息。next域:存储下一个节点的引用或指针。class Node: def __init__(self, value, next): self.value = value self.next = next链表分为带头的链表和不带头的链表。相关问题总原创 2021-10-08 15:55:59 · 152 阅读 · 0 评论 -
数据结构与算法笔记之排序算法(一)
文章目录排序算法冒泡排序选择排序插入排序归并排序排序算法参考:https://www.cnblogs.com/onepixel/articles/7674659.html冒泡排序最简单的排序,其思想就是def bubble_sort(arr): for i in range(len(arr)): for j in range(len(arr) - 1, i - 1, -1): if arr[j] < arr[j - 1]:原创 2021-09-30 19:07:10 · 112 阅读 · 0 评论 -
数据结构与算法(十五)之图
文章目录图简介图的表示方法图的遍历DFSBFS图简介当需要表示多对多关系时候就需要图。图的表示方法邻接表由数组+链表组成邻接矩阵两者的优缺点:邻接矩阵牺牲空间换时间。邻接表相较于邻接矩阵会节省空间,但查询时间是需要遍历链表的。图的遍历DFS深度优先搜索,主要由栈和递归实现。BFS广度优先搜索,主要由队列实现...原创 2020-02-29 10:19:35 · 183 阅读 · 0 评论 -
数据结构与算法(十四)之多叉树
文章目录实现索引的方法B树b树的搜索b树的添加上溢b树的删除下溢B+树B+树的构建实现索引的方法使用hashmap实现索引就不能实现范围查询。使用红黑树实现索引会存在树太高的情况,因为每查找一层就需要向磁盘发起一次请求,导致io消耗过大,消耗时间长,而且磁盘每个block是4k,使用红黑树存在空间浪费的现象。这时候就需要更优的数据结构来存储数据,其中B树,B+树,B*树便是很好的一个选...原创 2020-02-26 20:44:44 · 1599 阅读 · 0 评论 -
数据结构与算法(十三)之红黑树
文章目录红黑树简介与平衡二叉树的区别节点的插入节点插入旋转步骤插入例子节点的删除红黑树简介红黑树是一种特殊的二叉搜索树红黑树的性质:节点是红色或黑色。根节点是黑色。每个叶子节点都是黑色的空节点(NIL节点)。从每个叶子到根的所有路径上不能有两个连续的红色节点。从任一节点到其每个叶子的所有路径都包含相同数目的黑色节点。与平衡二叉树的区别1、红黑树放弃了追求完全平衡,追求大致平...原创 2020-02-24 21:22:25 · 400 阅读 · 1 评论 -
数据结构与算法(十二)之AVL
文章目录AVL简介二叉排序树的缺点平衡二叉树的特点AVL构建判断是否是平衡二叉树左旋转右旋转双旋转AVL简介二叉排序树的缺点有些二叉排序树如上图,就变成单链表模式,无法发挥查询快的优势,这时就需要平衡二叉树。平衡二叉树的特点他是由一棵空树或者他的左右两个子树的高度差的绝对值不超过1,并且左右两棵子树都是平衡二叉树。AVL构建AVL是由二叉排序树变化而来的,所以AVL的构建如下:...原创 2020-02-16 14:45:40 · 367 阅读 · 1 评论 -
数据结构与算法(十一)之二叉排序树
文章目录二叉排序树简介二叉排序树存在的意义二叉排序树的创建算法思路代码实现二叉排序树的查找算法思路代码实现二叉排序树的删除算法思路二叉排序树简介二叉排序树满足以下性质若它的左子树不空,则左子树上所有节点的值均小于它的根节点的值;若它的右子树不空,则右子树上所有节点的值均大于它的根节点的值;它的左、右子树也分别为二叉排序树。二叉排序树存在的意义当用线性表作为表的组织形式时,可以有三...原创 2020-02-15 16:45:47 · 452 阅读 · 0 评论 -
数据结构与算法(十)之哈夫曼编解码器
文章目录简介需求分析设计思路压缩思路解压思路具体过程压缩1. 读取源文件内容2. 统计内容中字符出现的个数3. 创建huffman树4. 由huffman树获得huffman编码表5. 根据huffman编码表把原数据转换成0101字符串6. 将0101字符串转化为byte数组7. 将该数组写入指定路径存储8. 同时将编码表对象也进行存储解压1. 读取压缩数据2. 读取编码表对象3. 由编码表获取...原创 2020-02-14 21:59:09 · 1658 阅读 · 0 评论 -
数据结构与算法(九)之顺序二叉树
文章目录顺序二叉树简介数组和二叉树的相互转化二叉树转化成数组数组转化为二叉树顺序二叉树简介从数据存储来看,二叉树也可以用数组结构来存储,即数组可以转化成树,树也可以转化成数组。顺序二叉树的特点:第n个元素的左子节点为2*n+1第n个元素的右子节点为2*n+2第n个元素的父节点为(n-1)/2其中n表示二叉树的第几个节点。数组和二叉树的相互转化二叉树转化成数组算法思路:...原创 2020-02-12 16:38:10 · 297 阅读 · 0 评论 -
数据结构与算法(八)之二叉树
文章目录各个数据结构的优缺点数组结构链表结构树形结构二叉树简介二叉树遍历前序遍历中序遍历后序遍历二叉树查找二叉树节点的删除各个数据结构的优缺点数组结构查找快,删除插入慢。链表结构删除插入块,查找慢。树形结构综合了链表和数组的优缺点。二叉树简介每个节点最多只能有2个子节点的一种形式称为二叉树。二叉树的子节点分为左节点和右节点。如果叶子节点都在最后一层叫做满二叉树如果二叉树的...原创 2020-02-11 17:44:31 · 305 阅读 · 0 评论 -
数据结构与算法(五)之递归
递归简介递归算法的基本思想是:把规模大的、较难解决的问题变成规模较小的、易解决的同一问题。规模较小的问题又变成规模更小的问题,并且小到一定程度可以直接得出它的解,从而得到原来问题的解。一个问题要采用递归方法来解决时,必须符合以下三个条件:解决问题时,可以把一个问题转化为一个新的问题,而这个新的问题的解决方法仍与原问题的解法相同,只是所处理的对象有所不同,这些被处理的对象之间是有规律的递增...原创 2020-02-08 14:36:55 · 179 阅读 · 0 评论 -
数据结构与算法(七)之哈希表
哈希表简介散列表,是根据关键码值而进行访问的数据结构。通过码值映射到表中的一个位置来访问以加快查找速度。这个映射函数叫散列函数,存放记录的数组叫散列表。实现简单的哈希表需求分析使用数组+链表的形式实现一个简单的hashTable,实现以下函数。put(int key,Object value):往哈希表中添加一个对象。get(int value):获取一个对象。list()遍历哈希...原创 2020-02-10 17:54:03 · 164 阅读 · 0 评论 -
数据结构与算法(六)之排序算法
文章目录冒泡排序选择排序插入排序希尔排序冒泡排序数组每个值从后往前两两比较,如果前一个大,交换。 public static void bubbleSort(int[] arr, int arrNum) { if (arrNum < 2) return; for (int i = 0; i < arrNum; i++) { ...原创 2020-02-09 21:35:03 · 113 阅读 · 0 评论 -
数据结构与算法(四)之栈
栈简介栈是一个先入后出(FILO)的有序列表,最先放入的数据在栈底,最后放入的元素在栈顶,最后放入的元素先删除,最先放入的先删除。栈的实现public class Stack { private int[] stack; private int top; private int maxSize; public Stack(int maxSize){ ...原创 2020-02-06 21:12:30 · 414 阅读 · 0 评论 -
数据结构与算法(二)之队列
队列队列可以用数组或链表实现,遵循**先进先出(FIFO)**的原则。队列的常用操作enQueue():将数据存入队列deQueue():将数据弹出队列环形队列的实现如果使用一般数组实现队列,频繁的enQueue与deQueue就需要很大的空间,如果使用环形队列,可以节省空间。实现思路:定义一个数组,长度为maxSize+1,队列最多存储maxSize的空间,多出的一个作为标...原创 2020-02-03 21:17:28 · 152 阅读 · 0 评论 -
数据结构与算法(一)之稀疏数组
稀疏数组当一个二维数组有许多重复值的时候,就可以使用稀疏数组来压缩数据。稀疏数组的处理方法:记录数组一共有几行几列。把具有不同值的元素的行列以及值记录在一个小规模的数组中,从而缩小程序的规模。例子左边是普通的二维数组,里面有许多个0,重复占用空间,这时就需要使用稀疏数组来对其进行优化。稀疏数组第一行的第一个值记录有n行,第一行的第二个值记录有m列,第一行的第三个值记录一共有x个...原创 2020-02-03 21:16:07 · 171 阅读 · 0 评论