![](https://img-blog.csdnimg.cn/20210201150753712.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
数据结构
文章平均质量分 71
数据结构学习历程
tomoe女孩一米九
!!!
展开
-
(查找型数据结构) 二叉搜索树 / 哈希表
Set 和 Map Set 和 Map 是一种专门用来进行搜索的容器或者说是数据结构,他们适合动态查找。我们一般把搜索的数据称为关键字 (Key),和关键字对应的称为值 (Value),将其称之为 Key-value 的键值对。1 Set只存储 keyTreeSet 和 HashSet 实现了 Set,他们俩用法相同,底层实现不同。 TreeSet 的底层是红黑树,插入/删除/查找时间复杂度为:O(log2N);需要 key 有序;是线程不安全的,他进行插入/删除/查找操作,是按照红黑树的特性原创 2021-03-30 20:07:42 · 374 阅读 · 14 评论 -
面试必考 ! ! ! 插入排序/选择排序/堆排序/快速排序...
插入排序思路:(1) 将数组划分为 “ 已排序区间 ” 和 “ 待排序区间 ”,用 bound 来标识这两个区间,bound 为待排序区间的第一个位置;(2) 将待排区间的第一个元素(即bound 标记位置的元素),与已排区间的元素进行比较。 选择排序(1) 将数组分为两个区间,待排区间和已排区间,但注意,这里与插入排序不同的是,插入排序 bound 可以是任意一个元素,而选择排序的 bound 必须从 0 开始。 因为选择排序在后续进行选择时,会选出最小值放到已排区间的最后,如果一原创 2021-03-26 23:52:19 · 1316 阅读 · 18 评论 -
二叉树的层序遍历 / 判断完全二叉树
完全二叉树概念: 完全二叉树是从满二叉树而来的,满二叉树即每一个节点都有两个子节点或者没有子节点。 完全二叉树是指若树的深度为 n,那么1 ~ (n-1) 层的节点都达到最大个数,即1 ~ (n-1) 层是满二叉树,n 层的节点全都连续排列在靠左边。代码思路:(分两个阶段来判定)第一阶段–> 每个节点都有两个子树,如果某个节点没有子树,那么进入第二阶段;如果某个节点只有右子树没有左子树,直接返回false;如果某个节点只有左子树没有右子树,也进入第二阶段。第二阶段–> 每个节点都必须没原创 2021-03-19 16:41:27 · 1039 阅读 · 2 评论 -
二叉树基础及其基本操作
二叉树1 树1.1 概念1.2 树的应用2 二叉树2.1 概念 / 特点2.2 两种特殊的二叉树2.3 二叉树的性质2.4 二叉树的存储2.5 二叉树的基本操作2.5.1 二叉树的遍历1 树1.1 概念树是一种非线性结构。树上的任意节点,就只有一个父节点,可以有多个子节点。节点的度:一个节点含有的子树的个数称为该节点的度;树的度:一棵树中,最大的节点的度称为树的度;叶子节点或终端节点:度为0的节点称为叶节点;双亲节点或父节点:若一个节点含有子节点,则这个节点称为其子节点的父节点;孩子节点或子原创 2021-03-14 18:45:55 · 207 阅读 · 6 评论 -
栈Stack 和 队列Queue 的实现 ( 用顺序表链表实现 )
栈:后进先出队列:先进先出1 栈的实现:核心操作是 入栈、出栈、取栈顶元素1.1 顺序表实现栈: 使用尾插操作表示 “入栈”,使用尾删操作表示 “出栈”,使用根据下标获取元素的操作表示 “取栈顶元素”(头插头删,需要搬运之后的元素,时间复杂度会变高,变复杂);1.2 链表实现栈: 使用头插操作表示 “入栈”,使用头删操作表示 “出栈”,直接取头节点,就是 “取栈顶元素”(尾插尾删可以做到高效的实现,但是得记录下最后一个甚至倒数第二个元素的信息,代码更复杂);原创 2021-03-10 11:00:08 · 373 阅读 · 0 评论 -
LeetCode刷题 #142 环形链表Ⅱ ( 返回链表开始入环的第一个节点)
给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。如果 pos 是 -1,则在该链表中没有环。注意 pos 仅仅是用于标识环的情况,并不会作为参数传递到函数中。说明:不允许修改给定的链表。原创 2021-03-07 16:46:46 · 185 阅读 · 0 评论 -
LeetCode刷题 #141 环形链表 ( 快慢指针判断链表中是否带环 )
给定一个链表判断链表中是否有带环。如果链表中存在环,则返回 true,否则返回 false。 题目中为了表示链表中的环,我们使用 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。如果 pos 是 -1,则在该链表中没有环。注意 pos 并不作为参数进行传递,仅仅是来标示列表的情况。示例1:输入:head = [3,2,0,-4], pos = 1输出:true解释:链表中有一个环,其尾部连接到第二个节点。原创 2021-03-07 12:05:21 · 109 阅读 · 0 评论 -
数据结构 单链表的回文结构
链表的回文结构,即 1 --> 2 --> 3 --> 2 --> 1 这样的形式,链表正着和反过来是一样的。1 时间复杂度 O(N) 思路:1、将原链表进行拷贝;2、对拷贝的链表进行逆置;3、然后比较逆置之后的链表和原链表是否相同。2 时间复杂度 O(1)思路:1、不用新创建链表,直接在原链表上进行操作;2、求得链表的长度,然后读取到一半的元素;3、对一半的元素进行逆置;4、然后将逆置后的半个链表与剩下的未逆置的一半链表进行比较。原创 2021-03-06 20:10:08 · 401 阅读 · 6 评论 -
顺序表 增删改查的基本操作 / 实现MyArrayList
顺序表 线性表是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串等… 线性表在逻辑上是线性结构,也就说是连续的一条直线。但是在物理结构上并不一定是连续的,线性表在物理上存储时,通常以数组和链式的结构形式存储。顺序表和链表区别:顺序表:元素和元素之间,处在连续的内存空间上。原创 2021-03-05 21:43:22 · 233 阅读 · 4 评论 -
Java顺序表 实现扑克牌游戏简单 (梭哈 / 斗牛)
简单的扑克牌游戏 梭哈: 梭哈用的是扑克牌共52张牌,因为不容易出好牌,也有去掉 234567 的简易玩法,规则玩法花样很多。 在这里我们采用:52 张牌,3 个人,一人 5 张牌,按规则对牌面大小进行比较 ,这样的方式进行游戏。牌型比较:同花顺>四条>满堂红>同花>顺子>三条>二对>单对>散牌。数字比较:A>K>Q>J>10>9>8 >7>6>5>4>3>2花式比较:黑桃>红桃>草花>方块原创 2021-02-10 16:58:00 · 2452 阅读 · 10 评论 -
链表 -- 单链表 的创建以及插入、删除的基本操作
链表1 分类1.1 单向链表 vs 双向链表1.2 带傀儡节点的 vs 不带傀儡节点的傀儡节点(dummy node):不实际存储数据。1.3 带环的 vs 不带环的所谓带环的就是例如这里的第五个节点,它的后继不是空而是第三个节点,next 引用存储的是第三个节点的地址。2 创建链表2.1 节点定义public class Node { public int val; public Node next = null; public Node(int val)原创 2021-02-05 14:15:42 · 2728 阅读 · 0 评论 -
时间复杂度 ( 递归实现阶乘、斐波那契数列第n个数) / 空间复杂度
时间复杂度是衡量程序运行的快慢,对于一个程序来说,运行速度的快慢,有很多干扰因素,不同的硬件条件都可能影响到速度的快慢。时间复杂度来衡量,不是精确的衡量,只是单纯从代码本身衡量程序运行的效率来看,用算法基本操作执行的次数来作为时间复杂度。 而在实际操作中我们也不是精确的计算出执行的次数而是大概执行的次数,用到 “ 大O渐进表示法 ”。大O符号(Big O notation):是用于描述函数渐进行为的数学符号。原创 2021-02-02 18:13:29 · 6146 阅读 · 3 评论