![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
文章平均质量分 68
CAFE~BABE
认真的完成每一件事情
展开
-
【数据结构和算法】并查集的基本概念和例题收集
介绍了并查集的一些基础概念,初始化,路径压缩的find,,已经按照大小合并和按照秩合并,以及一些leetcode上面的一些例题原创 2022-10-06 15:22:23 · 921 阅读 · 5 评论 -
【一起来学数据结构java】——二叉搜索树
【一起来学数据结构java】——二叉搜索树文章目录【一起来学数据结构java】——二叉搜索树一、概念二、二叉搜索树的方法搜索插入删除一、概念二叉搜索树的左子树比根节点都小,右子树比根节点的值都大。它的每一个子树也是这个样子。二叉搜索树中的元素不会重复这样如果想要搜索某一个值的话,很方便去搜索。二、二叉搜索树的方法搜索先使用递归方法:public Node Search_val(int val,Node node) { if(root==null) return nu原创 2022-02-28 10:24:07 · 561 阅读 · 1 评论 -
【一起来学java数据结构】——Set基础详解
全方面介绍java中的Set的语法原创 2022-02-24 19:14:29 · 1236 阅读 · 0 评论 -
【一起来学Java数据结构】——Map
Java集合,Java数据结构Map原创 2022-02-24 17:11:04 · 1510 阅读 · 0 评论 -
【一起来学算法java】——动态规划
【一起来学算法java】——动态规划本篇是简要介绍动态规划的几种题型,具体的章节尽请期待~一、动态规划的特点二、最值型动态规划算法步骤:那么就以下面的这个题为例[零钱兑换](322. 零钱兑换 - 力扣(LeetCode) (leetcode-cn.com))class Solution { public int coinChange(int[] coins, int amount) { //开辟一个数组【0~amount】的数组来保存每个值需要的最小的硬币数原创 2022-02-12 08:56:14 · 214 阅读 · 7 评论 -
【一起来学java数据结构】——排序
【一起来学java数据结构】——排序文章目录【一起来学java数据结构】——排序一、概念各种常见排序稳定性各种排序的稳定性二、插入排序简单插入排序三、希尔排序四、选择排序五、堆排序六、冒泡排序七、快速排序优化基准值的优化和基准相同的数据数据少的时候直接使用插入排序使用非递归八、归并排序非递归九、非比较排序基数排序桶排序计数排序一、概念各种常见排序稳定性对于一组数中的相同的一些相同的数据,如果排序后这些相同的数据的前后顺序没有改变的话,就是稳定的。判断是否稳定的元素就是元素是否是具有跳跃性的原创 2022-02-03 20:27:30 · 944 阅读 · 0 评论 -
【一起来学java数据结构】——对象的比较(priority Queue)
一起来学java——对象的比较(priority Queue)因为优先级队列是需要比较里面的值的大小的,所以当我们自定义类型的时候,要根据自定义类型中的某一个成员的值来进行优先级队列,这个时候就涉及到了比较这个成员变量的大小的问题,今天我们解决的就是这个问题大致是有以下三个方法:equals函数:只能比较两个对象的值是不是相同的,不能比较大小让该自定义的类实现compable接口,并重写compareTo方法实现Comparable接口让自定义的类实现Comparable接口,并重写Comp原创 2022-02-01 15:31:19 · 1680 阅读 · 0 评论 -
【一起来学java数据结构】——Java优先级队列(堆)
java的优先级队列文章目录java的优先级队列成员方法topk问题——建大小为K的堆查找和最小的K对数字对象的比较(priority Queue)实现Comparable接口实现Comparator使用equals判断是否相同总结java的优先级队列就是堆,默认是小根堆。成员方法常用的就是offer,poll,peek,值得一提的是offer和poll之后,经过优先队列内部的调整算法,依然使优先队列保持大根堆或小根堆topk问题——建大小为K的堆[参考文献]((382条消息) 拜托,面试别再原创 2022-02-01 15:30:26 · 374 阅读 · 0 评论 -
【一起来刷题java】——TOPK问题
topk问题——建大小为K的堆[参考文献]((382条消息) 拜托,面试别再问我TopK了!!!_架构师之路-CSDN博客)本文参考了上面的文章,并做了自我总结,希望会有所帮助。topK问题:从很多个数中得到较大的K个元素。我们固然可以建成一个大堆,然后弹出K次就可以找到前K个元素,但是建立一个N个元素的大根堆,再每次向下调整的时间复杂度是O(n*lgn)所以,为了简化这个问题,就可以让N个数的前k个元素建立一个只有k个元素的小根堆,小根堆的堆顶就是最小的元素,对于n-k个元素,如果哪个元素比原创 2022-02-01 15:26:35 · 773 阅读 · 0 评论 -
【数据结构刷题java】根据前序遍历和中序遍历构造二叉树
【数据结构刷题java】根据前序遍历和中序遍历构造二叉树[题目链接](105. 从前序与中序遍历序列构造二叉树 - 力扣(LeetCode) (leetcode-cn.com))前序遍历的第一个都是根节点,所以从中序遍历中找到该根节点,根节点的左边就是左子树,根节点的右边就是右子树。所以,就创建根节点,根节点的left,right就重复上面的行为。class Solution { public int preIndex; public int findInOrderIndex(int原创 2022-01-24 20:16:10 · 490 阅读 · 0 评论 -
【数据结构刷题java】将二叉搜索树转化成有序双向链表
数据结构刷题java——将二叉搜索树转化成有序双向链表[题目链接](二叉搜索树与双向链表_牛客题霸_牛客网 (nowcoder.com))因为是二叉搜索树,所以使用中序遍历就可以将二叉树转变为有序的。同时,二叉树和链表相同,都是有3个节点:一个数值域,两个指针域综上两条性质,可以在中序遍历的时候改变二叉树左右指向,使它变为双向链表这个题真的是太妙了,就是从分利用了二叉搜索树和中序遍历具体的解释在代码注释中:/**public class TreeNode { int val = 0;原创 2022-01-23 10:16:37 · 678 阅读 · 0 评论 -
【一起来学数据结构Java】队列
一起来学java数据结构——队列文章目录一起来学java数据结构——队列队列的实现特殊的队列(deque)Queue的方法add和offerremove和pollelement和peekdeque的用法用链表实现queue循环队列用队列实现栈用两个栈实现队列疑惑队列的特点就是先进先出队列的实现队列的特点就是先进先出队列可以使用链表或者数组来实现。Queue<Integer> queue=new LinkedList<>();Queue<Integer> qu原创 2022-01-19 10:48:50 · 374 阅读 · 0 评论 -
【数据结构刷题java】删除指定的元素
删除指定的元素还是和我们之前做过的题是差不多的,就是新开一个ArrayList或者是新开一个StringBuffer新建一个ArrayList逐个遍历str1看各各元素是不是在str2中,如果出现在str2中,就不放入数组中;如果不出现在str2中,就放入数组中。public static void main(String[] args) { String str=new String(); String str2=new String(); Scanner scanner原创 2022-01-16 20:08:54 · 253 阅读 · 0 评论 -
【数据结构刷题Java】字符集合
字符集合将一个字符串中出现的字符输出。不输出重复的元素。下面是题目的地址:[字符集合](字符集合__牛客网 (nowcoder.com))解法一(使用Java的库函数)Java提供的方便的库函数真的是太好用了,其中的contain函数可以轻易的判断字符串中是不是包含某个字符。具体的操作解释在注释中import java.util.Scanner;public class Main{ public static void main(String[] args){ Scan原创 2022-01-16 14:49:46 · 320 阅读 · 0 评论 -
一起来学数据结构——KMP算法
文章目录一起来学数据结构——KMP算法BF算法KMP算法思想要找和紧挨的子串相同的使用next数组深度剖析next第一种情况p[j]==p[k]第二种情况p[j]!=p[k]代码实现对next数组的优化nextval一起来学数据结构——KMP算法首先我们先来看一下BF算法。BF算法char* my_strstr(const char* arr1, const char* arr2){ char* str1 = (char*)arr1; char* str2 = (char*)arr2; ch原创 2021-10-20 19:42:56 · 182 阅读 · 1 评论 -
一起来学数据结构——保证你理解堆的含义和操作(堆的操作,堆的创建)
一起来学数据结构——堆前言今天,我们来介绍一种特殊的数据结构——堆。这个堆可不是堆栈的那个堆。堆是一种特殊的二叉树——完全二叉树所以,一定要记住堆不是堆,是树。这就是我们的一个堆。堆的存储结构——数组因为堆(完全二叉树)的这种连续存储的方式,我们可以采用数组来进行存储。逻辑结构:物理结构:我们可以观察到一个规律:对于一个非叶节点的两个子节点:左孩子节点的下标=父亲节点*2+1;右孩子节点的下标=父亲节点*2+2;堆的分类——大堆和小堆前面我们给出了堆的存储结构——数组,但是原创 2021-10-19 16:08:51 · 563 阅读 · 0 评论 -
含泪写完!我终于学会了循环队列
Leetcode栈刷题——设计循环队列[622. 设计循环队列 - 力扣(LeetCode) (leetcode-cn.com)]判断是否为空判断是不是空就十分简单了,直接判断first和tail是否是相同的就可以bool myCircularQueueIsEmpty(MyCircularQueue* obj) { return obj->first == obj->rear;}判断是否是满的判断是不是满的就有一点复杂了,因为这里我们要判断的是tail的下一个是不是fir原创 2021-10-09 16:24:49 · 142 阅读 · 0 评论 -
实现一个栈,要求实现Push(入栈)、Pop(出栈)、Min(取栈中最小值)、Max(取栈中最大值)的时间复杂度为O(1)。
文章目录栈刷题——求栈中的最小值和最大值,时间复杂度为O(1)题目描述:解题思路:代码解决:栈的结构设计初始化栈压栈出栈得到最大值得到最小值全部代码效果展示:栈刷题——求栈中的最小值和最大值,时间复杂度为O(1)题目描述:实现一个栈,要求实现Push(入栈)、Pop(出栈)、Min(取栈中最小值)、Max(取栈中最大值)的时间复杂度为O(1)。解题思路:使用三个栈来解决。一个正常栈,一个最小值栈,一个最大值栈每个元素进栈的时候,除了第一个元素三个栈都进入的比较这个元素和最小栈的栈顶的元素和最原创 2021-10-08 15:11:01 · 881 阅读 · 0 评论 -
一起来学数据结构——双向循环链表
一起来学数据结构——双向循环链表双向带头循环链表是链表中的一个比较重要的链表了。因为它最为复杂的结构,也使得在某些方面显得更加的容易。和简单的单链表但是操作复杂产生了鲜明的对比。链表的结构每一个节点都有两个节点指针,一个指向前,一个指向后。带有一个指向空的哨兵节点。尾的next指向头,头的prev指向尾,构成一个循环typedef struct ListNode{ struct ListNode* prev; struct ListNode* next; LTDataType da原创 2021-10-05 21:11:55 · 203 阅读 · 0 评论 -
单链表刷题——160.相交链表
单链表刷题——160.相交链表(160.相交链表)[160. 相交链表 - 力扣(LeetCode) (leetcode-cn.com)]相交链表也是链表届的一种特别经典的一种题目了。较好的算法下面是我们应该想到的一种非暴力算法的一种算法。这种方法应该想到,也不太难。先分别计算两个链表的长度让长的先走两个链表的长度查个单位之后再进行判断struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode原创 2021-10-05 21:10:34 · 158 阅读 · 0 评论 -
单链表刷题——141.环形链表
单链表刷题——141.环形链表[环形链表](141. 环形链表 - 力扣(LeetCode) (leetcode-cn.com))环形链表 也是一个特别经典的问题了,在面试中总是会被问到,我们一定要知道这道题怎么去做。特别的暴力解法就不写了,下面咱们就来看一下更好的算法求解。题目:给定一个链表,判断链表中是否有环。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如原创 2021-10-05 21:09:38 · 150 阅读 · 0 评论 -
一起来学数据结构——链表和顺序表的优缺点比较
一起来学数据结构——链表和顺序表的优缺点比较顺序表优点可以按照下标来访问元素。十分便捷,时间复杂度为O(1)物理空间是连续的,一次开辟全部的连续空间,照成较小的内存碎片在CPU向内存中读取数据的时候,缓存区的命中率高缺点因为空间的连续性,不可丢弃,所以在增,删的时候需要对前后所有的数据都进行移动,时间复杂度为O(n)开辟空间不灵活,常常会因为空间开太大用不完,空间太小了不够用的情况。链表优点内存空间的最大利用。随意的进行空间的开辟,用多少,开多少。增删数据更为方便。因为链表原创 2021-10-05 21:08:05 · 565 阅读 · 0 评论 -
一起来学数据结构——双向循环链表
文章目录一起来学数据结构——双向循环链表链表的结构建立双向链表初始化节点增删查改尾插头插尾删头删寻找节点在任意位置插入节点删除该节点销毁链表传值实现or传址实现?一起来学数据结构——双向循环链表双向带头循环链表是链表中的一个比较重要的链表了。因为它最为复杂的结构,也使得在某些方面显得更加的容易。和简单的单链表但是操作复杂产生了鲜明的对比。链表的结构每一个节点都有两个节点指针,一个指向前,一个指向后。带有一个指向空的哨兵节点。尾的next指向头,头的prev指向尾,构成一个循环typede原创 2021-09-30 16:03:45 · 218 阅读 · 1 评论 -
一起来学数据结构——时间复杂度和空间复杂度
一起来学数据结构——时间复杂度和空间复杂度时间复杂度概念算法中基本操作的执行次数,就是时间复杂度。(注意:不是运行所需要的时间)如何计算时间复杂度实例1// 请计算一下Func1基本操作执行了多少次?void Func1(int N){int count = 0;for (int i = 0; i < N ; ++ i){for (int j = 0; j < N ; ++ j){++count;}}for (int k = 0; k < 2 * N原创 2021-08-31 22:09:30 · 372 阅读 · 0 评论