数据结构与算法
文章平均质量分 94
学好数据结构与算法,走遍天下都不怕!
简 料
简料简料~简单有料~在校大学生一枚,专注于C/C++,GO的干货分享,立志成为您的好帮手~
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
带你轻松实现通讯录(C语言版)
学习C语言的小伙伴,相信都要经历实现通讯录这一关吧,接下来就带你手把手实现自己的通讯录!到了这里,一个简简单单的通讯录就完成了!如果还不能自我实现,那可要好好的练习了!原创 2023-06-01 23:33:12 · 420 阅读 · 8 评论 -
【基础算法】八大排序算法:直接插入排序,希尔排序,选择排序,堆排序,冒泡排序,快速排序(快排),归并排序,计数排序
🚩排序可谓是老生常谈了,在这里,我给大家带来一些常用的排序算法。直接插入排序,希尔排序,选择排序,堆排序,冒泡排序,快速排序(快排),归并排序,计数排序。每一个排序算法都有其独特的思想,我们不仅要学会它的思想,还要能够在合适的场景中选出合适的排序算法。因此,这一块,要很熟练很熟练。🚩本章所有的排序均以升序为例来讲解,弄懂了升序,降序也是不在话下。💝掌握八大排序,排序这一块就够用了,当然还有桶排序,基数排序,文件外排序之类的,大家可以查阅相关资料进行学习。❤️🔥。原创 2023-04-26 17:51:46 · 1279 阅读 · 35 评论 -
【基础算法】[PTA]-找出不是两个数组共有的元素
【整体思路】:在两个整型数组中,找出不是两者共有的元素,意思就是既要在第一个数组中找出第二个数组中没有出现的元素,也要在第二个数组中找出第一个数组中没有出现的元素。当两个数组都走完后,临时数组里面的元素就是想要的元素,但是,这里可能会有重复的元素(假如一个数组中有两个3,而这个3在另外一个数组中没有出现,那么这个3在临时数组中就有两个),所以最后在打印临时数组每个元素的时候需要往前寻找看有没有相同的元素,如果有就不用打印了,因为前面出现的已经打印过了。原创 2023-05-03 19:07:51 · 15056 阅读 · 44 评论 -
【基础算法】选择排序 与 堆排序
🚩本章给大家带来的是八大排序中的选择排序和堆排序。🚩选择排序为什么被称为最烂的排序?🚩堆排序如何来操作?最开始如何对数组建堆?💝排序相对来说较为简单,不过我们还是要认真对待,理清楚排序的思路。❤️🔥后续将会继续输出有关数据结构与算法的文章,你们的支持就是我写作的最大动力!原创 2023-04-11 09:00:00 · 422 阅读 · 16 评论 -
【基础算法】直接插入排序 与 希尔排序
我们在学习当中,最常见的算法莫过于排序算法了!而常见的排序算法有八种,本章给大家讲解八大排序中的直接插入排序和希尔排序。排序相对来说较为简单,不过我们还是要认真对待,理清楚排序的思路。原创 2023-04-07 09:00:00 · 577 阅读 · 12 评论 -
【数据结构】初等二叉树
🚩二叉树可以说是我们学习数据结构路上的第二个高的台阶,要想跨越它,需要我们多画图,多理解,多思考它的递归过程。前面树的介绍和堆这两篇文章让我们对树有了一定的了解,对于二叉树的概念也有说到,因此,本章不会对二叉树的概念及介绍深入去讲,而是着重于它的实现,着重于理解递归。🚩二叉树红黑树,AVL树,B树等等。并且,我们在面试当中,也经常会被面试官要求手撕二叉树的相关OJ题,所以,二叉树这一章节就显得额外重要,可不敢遇到困难就退缩了。🚩本章实现的二叉树是一棵普通的二叉树。原创 2023-04-02 22:14:03 · 1412 阅读 · 101 评论 -
【数据结构】堆
前面了解了树的概念后,本章带大家来实现一个跟树有关的数据结构——堆(本章有对堆排序和topk问题的讲解)。普通的二叉树是不适合用数组来存储的,因为可能会存在大量的空间浪费。而完全二叉树更适合使用顺序结构存储。现实中我们通常把堆一种二叉树)使用顺序结构的数组来存储,需要注意的是这里的堆和操作系统虚拟进程地址空间中的堆是两回事,一个是数据结构,一个是操作系统中管理内存的一块区域分段。我们在实现堆的时候可以将它看作为一棵二叉树来思考,这是它的逻辑结构。但其物理结构是一个实实在在的顺序数组。原创 2023-03-26 09:00:00 · 2872 阅读 · 105 评论 -
【数据结构】树的介绍
🚩本章给大家介绍一下树。树的难度相对于前面的数据结构来说,又高了一个台阶,所以我们要先从最基础的开始,也就是本章的一些知识点。🚩树又分为很多种树,如二叉树,红黑树,AVL树,B树等等,这些的难度都相对较大,所以大家对本章树的一些概念以及一些基本性质的理解必不可少。🚩本章除了对树的介绍,还有基础的二叉树的相关介绍,目的是为了大家能够更好的理解树。💝关于树的介绍就这么多,想深入了解大家可以查阅一些文献。后续我将会以此篇章为基础点,依次给大家带来堆与二叉树的实现。❤️🔥。原创 2023-03-25 09:00:00 · 1453 阅读 · 56 评论 -
【数据结构与算法】设计循环队列
🚩前面我们用队列实现了一个栈用栈实现了一个队列,相信大家随随便便轻松拿捏,而本章将带大家上点难度,我们来设计一个循环队列。🚩对于循环队列,重点就在一个“ 循环 ”,意思也就是该队列首尾相连形成一个环,但其本质还是不变,队列先进先出的性质依旧存在,只不过环的大小有限定(限定放多少数据就只能放多少数据)。🚩那么我们如何来设计这样的一个环,使它既能够像队列一样,又可以体现循环的性质?下面就带大家探讨一波。💝设计一个循环队列还是有些复杂的呢,不过看过本文章,相信大家也可以轻松拿捏。❤️🔥。原创 2023-03-24 09:00:00 · 3156 阅读 · 63 评论 -
【数据结构】栈
👻前面我们学习了链表,总算是跨过一个台阶了,本章带大家轻松一波,领悟一下栈的魅力。🤡栈是一种较为简单的数据结构,它的主要性质,就是数据后进先出(LIFO,我们可以利用这一性质,在做某些算法题时,以此为切入点。因此,栈还是挺不错的。💝到这里,一个简简单单的栈就完成了,是不是很简单呢?不过也别得意哈,后面难的数据结构还没来呢,栈就是让你处于一个平静期,为后来的难度做准备呢哈哈哈哈哈。❤️🔥后续将会持续输出有关数据结构的文章,你们的支持就是我写作的最大动力!原创 2023-03-18 09:00:00 · 1151 阅读 · 47 评论 -
【数据结构与算法】用栈实现队列
😝上一章我们用队列实现了一个栈,而这一章就带大家用栈实现一个队列。😜用队列实现一个栈,用的是两个队列,其出栈操作可以说是最麻烦的一步,它通过倒数据的方式最后完成出栈。而用栈实现一个队列,很明显也是需要两个栈来完成的,其出队操作其实也与倒数据的方式有关,不过两个实现方法有所不同。🤪用队列实现栈,是通过队列的先进先出的性质来实现栈的后进先出的性质;而用栈实现队列,是通过栈的后进先出的性质来实现队列的先进先出的性质,大家别弄混淆了。原创 2023-03-22 09:00:00 · 1650 阅读 · 70 评论 -
【数据结构】队列
🍎栈和队列可以说是一对好兄弟,前面学习了栈,那队列当然也少不了。对于栈而言,队列可以说具有与他相反的性质,本章就给大家领悟一下队列的魅力。🍒队列是一种简单的数据结构,它的主要性质,就是数据先进先出(FIFO单调队列等等。所以说,我们要熟练其性质。💝队列还是比较简单呢,只要能够实现前面的数据结构,队列也可以说是洒洒水嘞。❤️🔥后续将会持续输出有关数据结构的文章,你们的支持就是我写作的最大动力!原创 2023-03-20 19:55:59 · 1515 阅读 · 62 评论 -
【数据结构与算法】用队列实现栈
😼前面我们相继实现了栈和队列,是不是愁没有练手的地方呢?别担心,本章带大家用队列来实现一个栈!😽我们都知道,栈和队列可以看作为兄弟,一个后进先出(LIFO),一个先进先出(FIFO),他们虽有不同的性质,但总的来说还是不分家的,因为,我们既可以用队列实现栈,也可以用栈实现队列,而本章就先来带大家来了解如何使用队列来实现栈。💝学会了用队列实现栈,那么下一篇文章就是教大家如何用栈实现队列了。栈和队列还真是有趣呢!❤️🔥后续将会持续输出有关数据结构的文章,你们的支持就是我写作的最大动力!原创 2023-03-21 09:00:00 · 2250 阅读 · 62 评论 -
【基础算法】单链表的OJ练习(6) # 复制带随机指针的链表 #
本章的链表OJ练习,是最后的也是最难的。对于本题,我们不仅要学会解题的思路,还要能够通过这个思路正确的写出代码,也就是思路转化为代码的过程,这应该就是最难的地方了吧。对于OJ练习(5):环形链表的做法的证明一定要理解透彻,因为面试很可能问到噢。对于单链表的题目练习,最重要的是思路,我们在数据结构阶段要养成画图的习惯,因为它能帮助我们更好的理解。单链表的OJ练习在此就结束了,大家要好好练习噢~原创 2023-03-17 10:00:00 · 1598 阅读 · 48 评论 -
【数据结构】带头双向循环链表
前面学习了单链表的结构,并且做了些许单链表的OJ练习,相信大家已经对单链表的结构了如指掌。因此,本章带来了与单链表同源的但拥有不同的结构的链表带头双向循环链表供大家学习。可能大家听到带头双向循环链表这个名字,就会认为该结构很复杂(的确很复杂,是链表当中结构最复杂的),肯定比单链表要难许多,说实在的,如果没有前面单链表的铺垫,直接上这个结构,那肯定挺难的。但现在我们有了单链表的基础,并且做了挺多单链表的题了,也就不用怕了。实际上,带头双向循环链表只是看起来难,听起来难,但它实现起来,比单链表简单多了。原创 2023-03-15 09:00:00 · 2156 阅读 · 71 评论 -
【基础算法】单链表的OJ练习(5) # 环形链表 # 环形链表II # 对环形链表II的解法给出证明(面试常问到)
本章的OJ练习相对于OJ练习(4)较为简单。不过,本章的OJ最重要的是要我们证明为何可以这么做。这也是面试中常出现的。对于OJ练习(4),分割链表以一种类似于归并的思想解得,回文链表以一种巧妙复用前面OJ题的思想解得。啰嗦一下:对于本章,最重要的是需要证明为什么这样做可以,所以我们不光要做出来OJ,还要能够理解并自行给出证明。对于单链表的题目练习,最重要的是思路,我们在数据结构阶段要养成画图的习惯,因为它能帮助我们更好的理解。后续还会有单链表相关的题目练习。原创 2023-03-14 09:00:00 · 1847 阅读 · 51 评论 -
【基础算法】单链表的OJ练习(4) # 分割链表 # 回文链表 #
本章的OJ练习相对前面的难度加大了,但是换汤不换药,还是围绕单链表的性质来出题的。我相信,能够过了前面的OJ练习,本章的OJ也是轻轻松松。对于OJ练习(3),着重需要理解的是相交链表那道题的双指针思路,明白为什么可以这样,这样为什么可行。后面遇到类似的题目我还会做么?我们每做一道题目,都要深挖他的题目结构,明白为什么可以这样做。我相信如果你这样去做了,并且不断地练习,到后面,每遇到一个题目,你都会有所印象,并能够很快的指出解这道题的思路。原创 2023-03-06 15:01:46 · 1010 阅读 · 52 评论 -
【基础算法】单链表的OJ练习(3) # 移除链表元素 # 相交链表 #
本章的OJ练习也是相对简单的,只要能够理解解题的思路,并且依照这个思路能够快速的写出代码,我相信,你的链表水平已经足够了。对于OJ练习(2),其中两道题都可运用快慢指针的解题思路,这使得两个题都只需要遍历一次链表即可解答。对于本章,是链表的OJ练习的最后一篇较为简单的章节,后续的OJ练习将会上难度。对于单链表的题目练习,最重要的是思路,我们在数据结构阶段要养成画图的习惯,因为它能帮助我们更好的理解。后续还会有单链表相关的题目练习。原创 2023-03-04 09:00:00 · 1059 阅读 · 35 评论 -
【基础算法】单链表的OJ练习(2) # 链表的中间结点 # 链表中倒数第k个结点 #
对于单链表的OJ练习,需要深刻理解做题的思路,这样我们才能够在任何场景都能够熟练的解答有关链表的问题。本章与(1)差不多,难度不大,核心点就在于理解解题思路。对于单链表的题目练习,最重要的是思路,我们在数据结构阶段要养成画图的习惯,因为它能帮助我们更好的理解。后续还会有单链表相关的题目练习。原创 2023-03-03 19:18:34 · 1142 阅读 · 18 评论 -
【基础算法】单链表的OJ练习(1) # 反转链表 # 合并两个有序链表 #
上一章讲解了单链表,后面几章就对单链表进行一些简单的题目练习,目的是为了更好的理解单链表的实现以及加深对某些函数接口的熟练度。本章带来了两个题目。一是反转链表,二是合并两个有序链表,整体难度不大,但要理清解题思路。对于单链表的题目练习,最重要的是思路,我们在数据结构阶段要养成画图的习惯,因为它能帮助我们更好的理解。后续还会有单链表相关的题目练习。原创 2023-03-03 12:53:43 · 987 阅读 · 31 评论 -
【数据结构】单链表
在学习数据结构时,单链表可谓是第一个需要跨越的台阶。从C语言到数据结构,单链表能够真正的反映我们C语言到底学的扎不扎实,那是因为,单链表对于C语言中的指针,结构体,以及函数模块的实现有较高的要求。因此,通过本章的学习,要是能够自我实现单链表,那你的C语言功底会厚实,你的代码能力也会提升。当然,从C语言到数据结构阶段,单链表只是第一个需要跨越的台阶,后面还有更难的数据结构在等着大家,后面我会相继出文章。对于单链表来说,其难度主要在于对指针的运用,能够自我实现单链表,对我们代码能力的提升有很大的帮助。原创 2023-03-03 09:00:00 · 1027 阅读 · 34 评论 -
【数据结构】顺序表
顺序表作为数据结构中的小小弟,还是很好应付的。说到数据结构,顺序表是我们的向导,它让你明白数据结构到底是干啥的,为啥数据结构这么的重要。实际上,通讯录的底层就是一个顺序表,里面的增添联系人,删除联系人等一系列操作,都是基于顺序表实现的,这也侧面拖出了数据结构的作用。所以,学好数据结构是必须的。要是能够自主实现通讯录,我肯定,顺序表学起来会非常的轻松。学到这里,数据结构总算是入门了,当然数据结构后面还有很长的路要走,要继续努力!原创 2023-02-24 23:17:53 · 1954 阅读 · 44 评论 -
【基础算法】关于高精度计算的问题【很高位数数据的加减乘除(相关代码用C++实现)】
当我们在利用计算机进行一些计算时,可能会遇到这类问题 :有些计算要求精度高,希望计算的数的位数可达几十位甚至几百位,虽然计算机的计算精度也算较高了,但因受到硬件的限制,往往达不到实际问题所要求的精度。这时我们就可以通过程序设计来解决这类问题,创建一个数组,通过数组来存放高精度数的每一位上的数。上述可以说都是高精度计算的基础模板,实际上在很多题目中都可以用到这一模板,比如某些链表的题。所以我们要增强对这一类模板的熟练度,以便在后面的刷题中遇到能用此模板解决的问题能够想起来有这一模板可以用。原创 2023-02-23 11:17:20 · 1216 阅读 · 24 评论 -
【数据结构与算法】算法的时间复杂度和空间复杂度
关于时空复杂度的分析,是每一个程序员的必备技能,本文将带你了解什么是时空复杂度?熟知怎样去计算一个算法的时间复杂度和空间复杂度。对一段代码的时间复杂度和空间复杂度的分析熟练度客观上体现了你的算法水平,因此,我们在学好算法的道路上要一步一个脚印,切不可投机取巧。原创 2023-02-22 21:57:46 · 1005 阅读 · 22 评论 -
【基础算法】浅浅刷个小题 # 移动零 # 丢失的数字 # 转换成小写字母 # 和为零的N个不同整数 # 猜数字 #
283. 移动零;268. 丢失的数字;709. 转换成小写字母;1304. 和为零的 N 个不同整数;LCP 01. 猜数字原创 2022-12-06 00:20:25 · 675 阅读 · 3 评论 -
【基础算法】浅浅刷个小题 # 找不同 # 字符串中的单词数 # 重新排列字符串 #
leetcode:389. 找不同;434. 字符串中的单词数;1528. 重新排列字符串原创 2022-12-02 22:36:08 · 348 阅读 · 2 评论 -
【基础算法】浅浅刷个小题 # 反转字符串 # 反转字符串 II # 三个数的最大乘积 #
给定一个字符串 s 和一个整数 k,从字符串开头算起,每计数至 2k 个字符,就反转这 2k 字符中的前 k 个字符。如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。输入:s = [“H”,“a”,“n”,“n”,“a”,“h”]输入:s = [“h”,“e”,“l”,“l”,“o”]输出:[“h”,“a”,“n”,“n”,“a”,“H”]输出:[“o”,“l”,“l”,“e”,“h”]输入:s = “abcd”, k = 2。输入:nums = [-1,-2,-3]原创 2022-11-30 00:18:03 · 525 阅读 · 4 评论 -
【基础算法】浅浅刷个小题 # 搜索插入位置 # 各位相加 # 寻找数组的中心下标 #
有些简单题在leetcode上实际上不简单,相信大家有和我相同的感觉。下面是我认为真正符合简单一词的三个题目,我来分享以下我的解体思路。leetcode上的题比较逻辑思维,算法能力和语法熟练度,每天都去动动自己的大脑,相信不久你就会从小白变为大白的!原创 2022-11-26 01:38:34 · 338 阅读 · 4 评论
分享