数据结构
文章平均质量分 93
数据结构
爱敲代码的三毛
不要因为走得远就忘记当初为什么出发。
展开
-
数据结构——B树
B树学习原创 2023-11-05 17:12:07 · 804 阅读 · 1 评论 -
并查集&LRUCache
并查集和LRUCache实现原创 2023-09-30 12:48:15 · 139 阅读 · 0 评论 -
位图&布隆过滤器
数据结构位图&布隆过滤器原创 2023-09-26 21:49:38 · 352 阅读 · 0 评论 -
红黑树Java实现
Java实现红黑树的插入和验证原创 2023-09-23 11:19:26 · 507 阅读 · 0 评论 -
AVL树Java实现
AVL树又叫平衡二插搜索树,二插搜索树的查找效率在极端情况下是比较低的,而AVL树会保证左右子树的高度差的绝对值不会超过1原创 2023-08-23 13:51:37 · 359 阅读 · 0 评论 -
C语言实现九大排序算法
排序算法原创 2022-12-27 23:00:03 · 2718 阅读 · 1 评论 -
数据结构C语言版——链式二叉树的基本操作实现
由二叉树的定义可知,二叉树的节点由一个数据元素分别指向其左右子树的两个分支构成,则表示二叉树的链表中的结点至少包含3个域:数据域和左右指针域,左右指针分别指向左右孩子所在的链节点的存储地址。二叉树的高度就是它的最大深度,相求一颗树的最大深度,就得先求出它的左右子树的最大深度,通过后续遍历到达叶子节点,从叶子节点开始不断求出左右子树的较大的那一棵子树再加一,开始不断向上返回就能得到一颗二叉树的最大深度。中序遍历中根遍历,它的遍历顺序就是先遍历左子树再遍历根节点再遍历右子树,也就是左根右。原创 2022-12-22 20:54:12 · 788 阅读 · 0 评论 -
数据结构C语言版 —— 二叉树的顺序存储堆的实现
堆在物理上是一个一维数组,在逻辑上是一颗完全二叉树满足父亲节点小于等于孩子节点的叫做小堆或者小根堆满足父亲节点大于等于孩子节点的叫做大堆或者大根堆原创 2022-12-21 13:38:14 · 741 阅读 · 0 评论 -
数据结构C语言版 —— 树和二叉树的概念
树(Tree)是n(n>=0)个节点的有限集,在任意一颗非空树中:(1) 有且仅有一个特定的称为(Root)的节点,根节点是没有前驱节点的。(2)当n>1时,其余节点可以分为m(m>0)个互不相交的有限集,其中每一个集合本身又是一颗树,并且称为根的。树要满足以下几个条件NN−1比如下面的两棵树就是非树再来看一下一些比较重要的概念,通过下面这棵树来举例子m(m>0)原创 2022-12-20 13:36:54 · 516 阅读 · 0 评论 -
数据结构C语言版 —— 队列+循环队列实现
因为是链表实现所以还要定义一个节点结构体,队列的结构题包含两个指针一个队头指针和一个队尾指针。原创 2022-12-19 11:35:36 · 705 阅读 · 0 评论 -
数据结构C语言版 —— 栈的实现
和线性表类似,栈也有两种存储表示的方法。但相对而言使用数组更合适一些,因为数组在末尾插入元素的代价会比较小一些。:一种特殊的线性表,其只限定于在表尾进行插入或者删除操作。出栈只需要将top指针往后走一步即可,数据在下次入栈时就会被覆盖掉。因为是数组实现的,所以当栈放满时要考虑扩容操作。因为数组是一段连续空间,所以需要通过指针减指针就能得到元素个数。为空判断非常简单,只需要判断top是否指向数组起始地址。top指向的是栈中有效元素的后一个位置,所以要-1.直接把申请的数组给释放掉,避免内存泄露。原创 2022-12-18 10:45:55 · 1053 阅读 · 0 评论 -
环形链表问题
力扣环形链表原创 2022-12-16 18:34:29 · 720 阅读 · 0 评论 -
数据结构C语言版 —— 链表增删改查实现(单链表+循环双向链表)
链表是用一组任意的额存储单元存储线性表的数据元素(这组存储单元可以是连续的,也可以是不连续的)。简单来说链表是一种**物理结构上非连续**,非顺序的存储结构,数据元素的**逻辑顺序**是通过链表中的**指针链接**次序实现的。原创 2022-12-15 17:38:41 · 771 阅读 · 0 评论 -
数据结构C语言版 —— 顺序表增删改查实现
顺序表的插入和删除时间复杂度为O(N)O(N)O(N)顺序表的扩容使用的是realloc,如果后面的空间不够就会重新开辟新的空间,再把数据拷贝到新的空间,这样就会有一定的额性能消耗顺序表存在着一定的资源浪费,比如当前顺序表的容量为200,当放满之后再插入10个元素,就会进行2倍扩容到400,此时就浪费了190个数据空间。我们发现顺序表存在着一定缺陷,如果想不那么浪费空间就想着扩容扩少一点,但扩容小了如果有大量数据插入又会存着不断扩容的情况,那么又会有着性能的消耗。原创 2022-12-14 13:15:34 · 1491 阅读 · 0 评论 -
数据结构C语言版 —— 时间复杂度&空间复杂度概念和计算
算法效率分析一般分为两种,一种是,另外一种是。时间效率被称为,空间效率则被称为。时间复杂度是用来衡量一个算法的运行速度,而空间复杂度主要是用来衡量一个算法的所需要的额外空间,早期的计算机存储容量很小,所以比对空间复杂度很是在乎。但是随着计算机的叙述发展,计算机的存储已经到了一个很高的程度,比如现在的一台笔记本至少都是16G内存+512G磁盘,服务甚至是几百个G的内存,几百T的磁盘。所以现在并不那么关心空间复杂度,也经常出现空间换时间的做法。原创 2022-12-12 20:32:31 · 2270 阅读 · 2 评论 -
Java集合数据结构——HashMap&HashSet
文章目录一、HashMap1.Map 的常用方法(1)关于Map.Entry一、HashMapMap是一个接口类,该类没有继承自Collection,该类中存储的是<K,V>结构的键值对,并且K一定是唯一的,不能重复。1.Map 的常用方法(1)关于Map.Entry<K, V>的说明Map.Entry<K, V> 是Map内部实现的用来存放<key, value>键值对映射关系的内部类,该内部类中主要提供了<key, value>的原创 2021-09-15 23:55:29 · 647 阅读 · 1 评论 -
Java哈希表(散列表)解析
数据结构哈希表原创 2021-09-15 23:54:01 · 491 阅读 · 0 评论 -
二叉搜索树(二叉排序树)
一.概念二叉搜索树又称二叉排序树,具有以下性质:若它的左子树不为空,则左子树上所有节点的值都小于根节点的值若它的右子树不为空,则右子树上所有节点的值都大于根节点的值它的左右子树也分别为二叉搜索树注意:二叉搜索树中序遍历的结果是有序的二、基本操作1.查找元素思路:二叉搜索树的左子树永远是比根节点小的,而它的右子树则都是比根节点大的值。当前节点比要找的大就往左走,当前元素比要找的小就往右走 public Node search(int key) { if(root ==原创 2021-09-09 22:21:01 · 42939 阅读 · 13 评论 -
Java实现七大排序算法
文章目录基本概念1.排序2.稳定性一、直接插入排序1.原理2.排序过程3.代码实现4.性能分析二、希尔排序1.原理2.直接插入排序过程3.关于 gap 的取值4.代码实现5.性能分析三、选择排序1.原理2.排序过程3.代码实现4.性能分析四、堆排序1.原理2.排序过程(1) 建大堆(向下调整)(2) 堆排序过程3.代码实现4.性能分析五、冒泡排序1.原理2.排序过程3.代码实现4.性能分析六、基本概念1.排序排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。平时的上原创 2021-08-31 13:53:31 · 563 阅读 · 2 评论 -
Java对象的比较(TopK问题)
文章目录一、元素的比较1. 基本类型的比较2. 对象的比较二、对象比较1. 重写基类的equal2.基于Comparble接口类的比较3. Comparator 接口(比较器)4. 三种方式对比三、集合框架中PriorityQueue的比较方式1.构造方法(1) 无参构造(2) 带有一个参数的构造方法(3) 带有两个参数的构造方法2.入队(offer)3.代码示例四、TopK 问题完!一、元素的比较1. 基本类型的比较在Java中,基本类型的对象可以直接比较大小public class TestC原创 2021-08-24 22:51:41 · 433 阅读 · 4 评论 -
Java集合数据结构——优先级队列 (堆PriorityQueue)
文章目录一、二叉树的顺序存储1. 存储方式2. 父亲和孩子的下标关系二、堆(heap)1. 堆的基本概念2. 堆的操作(1) 建堆(向下调整)(2) 建堆的时间复杂度(3) 入队(向上调整)(4) 出队(向下调整)三、Java中的优先级队列(PriorityQueue)四、堆排序完!一、二叉树的顺序存储1. 存储方式使用数组保存二叉树结构,方式即将二叉树用层序遍历方式放入数组中。一般只适合表示完全二叉树,因为非完全二叉树会有空间的浪费。这种方式的主要用法就是堆的表示2. 父亲和孩子的下标关系原创 2021-08-24 00:02:31 · 471 阅读 · 3 评论 -
Java数据结构————二叉树
文章目录一、树型结构(了解)1.概念2. 树与非树3. 树的一些重要的概念4. 树的表示形式(了解)5. 树的一些应用二、二叉树1.二叉树的概念2.二叉树的基本形态3.两种特殊的二叉树4. 二叉树的性质5. 二叉树的存储三、二叉树的基本操作1.二叉树的遍历2.前序遍历3. 中序遍历4. 后序遍历5. 求结点个数6.求叶子结点个数7. 求第 k 层结点个数8.获取二叉树的高度9. 查找 val 所在结点10. 层序遍历11. 判断一棵树是不是完全二叉树完!要想了解二叉树先要知道什么是树一、树型结构(..原创 2021-08-20 23:26:00 · 1157 阅读 · 0 评论 -
你真的知道ArrayList的使用和实现吗?
文章目录一、ArrayList是什么?二、通过源码了解ArrayList常用的方法1.ArrayList的创建2.add方法3.addAll方法4.remove方法5.subList方法总结一、ArrayList是什么?ArrayList 是 Java 集合框架中比较常用的数据结构,底层是一个顺序表也就是一个数组,那么它和数组最大的区别就是数组的长度是定长,而ArrayList 底层的数组是可以自动增长的。同时 ArrayList 实现了List接口。二、通过源码了解ArrayList常用的方法原创 2021-08-08 22:26:00 · 224 阅读 · 0 评论 -
初识Java集合及包装类和泛型的基本使用
文章目录一、介绍1.java集合框架是什么?2.学习java集合的意义3.java集合关系图二、接口使用实例1.Collection 接口说明2.Collection 示例3.Map 接口说明4. Map实例三、泛型1.泛型的分类2.泛型的定义3.泛型背后作用时期和背后的简单原理4.泛型的使用5.泛型总结四、包装类1.基本数据类型和包装类直接的对应关系2.包装类的使用,装箱(boxing)和拆箱(unboxing)3.自动装箱(autoboxing)和自动拆箱(autounboxing)五、关于Intege原创 2021-08-05 22:14:20 · 294 阅读 · 1 评论 -
Java数据结构:快速了解顺序表以及实现
文章目录一、 顺序表1. 顺序表的概念2. 顺序表的分类3. 顺序表的实现(1) 创建类(2) 新增元素(3) 打印顺序表(4) 判读是否包含某个元素(5) 查找元素对应的位置(6) 获取pos位置的元素(7) 修改 pos位置的元素(8) 删除第一次出现的元素(9) 获取顺序表长度(10) 清空顺序表二、顺序表实现代码汇总三、顺序表的优点和缺点1.顺序表的优点2.顺序表的缺点总结一、 顺序表1. 顺序表的概念什么顺序表?顺序表其实就是一个数组但和数组还是有一点区别,区别主要是在操作逻辑上。顺..原创 2021-05-12 23:37:16 · 327 阅读 · 12 评论 -
Java-时间复杂度和空间复杂度的概念和计算
文章目录一、算法效率二、时间复杂度1.时间复杂度的概念2.大O的渐进表示法(1)推导大O阶方法3.时间复杂度的三种情况(1) 最坏情况(2)最好情况(3)平均情况4.常见时间复杂度计算举例1.例子2.冒泡排序时间复杂度3.二分查找的时间复杂度4.递归的时间复杂度三、空间复杂度1.空间复杂度概念2.空间复杂度的计算(1) 冒泡排序(2) 斐波那契数列(3)递归总结一、算法效率算法效率分析分为两种:第一种是时间效率,第二种是空间效率。时间效率被称为时间复杂度,而空间效率被称作空间复杂度。 时间复杂度主要.原创 2021-05-03 09:33:22 · 2837 阅读 · 3 评论 -
java数据结构-快速了解链表的增删查改
文章目录一、链表的概念和结构1.链表的概念2.链表的分类二、单向不带头非循环链表1.创建节点类型2.头插法3.尾插法4.获取链表长度5.任意位置插入6.查找关键字7.删除第一次出现值为key的节点8.删除所有值为key的节点9.遍历打印链表10.置空链表二、双向不带头非循环链表1.创建节点类型2.头插法3.尾插法4.获取链表长度5.任意位置插入6.查找关键字7.删除第一次出现的关键字key的节点8.删除所有值为key的节点9.遍历打印链表10.置空链表总结一、链表的概念和结构1.链表的概念简单来说链原创 2021-05-18 13:31:01 · 1078 阅读 · 17 评论