数据结构和算法
文章平均质量分 94
该专栏用于记录我学习数据结构和算法的过程,且会分享部分leetcode的题目
雨~旋律
持续学习
展开
-
数据结构与算法(一)数组的相关概念和底层java实现
例如我想通过以人的身份证号作为索引,去找对应的人的一些属性。而由于身份证号作为索引一般都非常的大,对于计算机来说,开辟一个身份证号数字大小的空间是不值当甚至不可能的,且就算可以也会浪费相当多的空间,例如我数组就十个人,我要用身份证号作为索引去开辟,那势必会浪费特别大的空间。原创 2023-09-12 12:11:00 · 702 阅读 · 0 评论 -
数据结构与算法(二)时间复杂度分析
我们自定义了动态数组,尤其是后面扩容,很多朋友会担心每次扩容都要进行for循环,是否会非常影响效率,那么这次我们就通过歇息并分析时间复杂度来分析扩容的效率问题。我们本章也只是对时间复杂度做一个简单的了解和分析。原创 2023-09-13 15:22:06 · 209 阅读 · 0 评论 -
数据结构与算法(三)--栈
前两篇文章我们学习了第一个数据结构,数组,且从底层通过java实现了数组的构建和增删改查的操作功能,并且通过resize操作使我们的数组可以动态的扩容或者缩容。且我们知道数组最大的优点就是在索引有语义的情况下,查询和修改操作会非常的快,反之我们就得遍历寻找元素。我们还了解了时间复杂度,渐进复杂度,分摊复杂度和复杂度震荡等知识,分析动态数组相关操作的时间复杂度并且优化了resize操作。那么从这一章我们要学习另一种线性数据结构-栈。原创 2023-09-15 09:29:11 · 487 阅读 · 0 评论 -
数据结构与算法(四)--队列
前面的文章我们分别学习了线性结构中的数组和栈,这次我们学习另一种线性结构–队列。这也是我们学习的最后一种线性结构。队列同栈,依然是把数据排成一排,且队列对应的操作依旧是数组的子集。但是队列只能从一端(队尾)添加元素,只能从另一端(队首)取出元素。我们前言说过,队列只能从一端(队尾)添加元素,只能从另一端(队首)取出元素。同这个数据结构的名字,它其实和我们日常生活中排队是非常相像的。例如:增加元素就像排队一样,一次从队尾进入。如下图:而从队列取出元素的时候,仍然和排队是一致的,从队首取出元素,如下图:原创 2023-09-19 16:53:30 · 465 阅读 · 0 评论 -
数据结构与算法(五)--链表概念以及向链表添加元素
今天我们学习另一种非常重要的线性数据结构–链表,之前我们已经学习了三种线性数据结构,分别是动态数组,栈和队列。其中队列我们额外学习了队列的另一种实现方式–循环队列。其实我们自己实现过前三个数据结构就知道,它们底层均依托静态数组,靠resize解决固定容量问题。而链表和前三种均不同,它是真正的动态数据结构。学好链表,有利于:就像火车一样,每一个节点就像一个个车厢,车厢除了人(数据),还要和其他车厢进行连接,以使得数据是整合在一起的,用户可以方便的在所有的数据上进行查询等其他操作。而数据和数据之间的连接就是原创 2023-09-20 17:54:42 · 981 阅读 · 0 评论 -
数据结构与算法(六)--链表的遍历,查询和修改,删除操作
我们了解了链表的概念以及链表底层的搭建以及向链表中添加元素的操作。本次我们继续学习链表剩余的操作:遍历,查询和修改、删除操作。原创 2023-09-22 11:54:41 · 721 阅读 · 0 评论 -
数据结构与算法(七)--使用链表实现栈
之前我们已经学习了链表的所有操作及其时间复杂度分析,我们可以了解到。。本章我们通过链表去实现栈,当然我们也会讲到用链表实现另一个数据结构–队列。并且比较用数组实现和用链表实现他们之间的差异。原创 2023-10-07 17:47:05 · 883 阅读 · 1 评论 -
数据结构与算法(八)--使用链表实现队列
我们上一章通过链表实现了栈这样一个数据结构,此次我们实现另一个数据结构–队列。我们知道链表的增删查操作只对链表头进行操作才有O(1)的时间复杂度,如果我们对链表的尾部进行操作,它的复杂度都是O(n)级别了。但是对于队列这种数据结构来说,我们需要在一端插入数据,在另一端删除元素,所以我们势必会在这个线性结构的两端同时操作,此时对于链表来说有一端的时间复杂度就会达到O(n)级别。其实这个问题我们当时在用数组的时候也遇到了,当时我们改进了数据实现队列的方式,从而产生了的这种实现方式。原创 2023-10-24 16:53:56 · 310 阅读 · 0 评论 -
数据结构与算法(九)--链表与递归
本质上,递归就是将原来的问题,转化为更小的同一问题,通常是小到不能再小,此时我们可以很容易的解决这道问题。举例:数组求和①定义Sum(arr[0…n-1]) 我们可以将其转化为 arr[0] + Sum(arr[1…n-1])那么大家就能很轻松的看到后一个Sum函数解决的问题比前一个Sum函数解决的问题就要小一些。前一个函数要对n个元素求和,后一个Sum函数只需要对n-1个元素求和。②那么依次类推,我要求索引1到n-1这些元素之和又可以转化为arr[1]+Sum(arr[2…n-2])…原创 2024-01-04 16:51:55 · 1178 阅读 · 0 评论