数据结构+算法
文章平均质量分 84
数据结构内容+算法内容
大家好我叫张同学
为了方便小伙伴们的学习和借鉴,我已取消了所有博客的水印!快来一起学习吧~
展开
-
【数据结构学习笔记】二、线性表之链表篇(3)(双向链表)
双向带头循环链表,也被叫做双链表。这种链表虽然结构比较复杂,(又是双向,又是带头,又是循环,看起来结构好像很复杂的样子)但是实际操作却非常简单。因此在我们的实际工作或项目中常使用的链表是这种。原创 2022-02-10 20:23:10 · 1491 阅读 · 12 评论 -
【Leetcode刷题笔记之链表篇】剑指 Offer 18. 删除链表的节点
给定单向链表的`头指针`和一个要删除的`节点的值`,定义一个`函数`删除该节点。 返回删除后的链表的`头节点`。原创 2022-01-28 21:55:56 · 2147 阅读 · 10 评论 -
【Leetcode刷题笔记之链表篇】142. 环形链表 II
给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。 如果链表中有某个节点,可以通过连续跟踪 `next `指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数` pos` 来表示链表尾连接到链表中的位置(索引从` 0` 开始)。如果 pos 是` -1`,则在该链表中没有环。 注意:`pos `不作为参数进行传递,仅仅是为了标识链表的实际情况。`不允许修改` 链表。原创 2022-01-20 17:45:00 · 1162 阅读 · 1 评论 -
【Leetcode刷题笔记之链表篇】141. 环形链表
给你一个链表的头节点 `head` ,判断链表中`是否有环`。 如果链表中有某个节点,可以通过`连续跟踪` `next `指针再次到达,则链表中存在环。为了表示给定链表中的环,评测系统内部使用整数` pos `来表示链表尾连接到链表中的位置(索引从` 0` 开始)。如果` pos` 是` -1`,则在该链表中没有环。注意:`pos` 不作为参数进行传递,仅仅是为了标识链表的实际情况。 如果链表中存在环,则返回 `true` 。 否则,返回 `false` 。原创 2022-01-18 18:00:00 · 930 阅读 · 8 评论 -
【Leetcode刷题笔记之链表篇】160. 相交链表
给你两个单链表的头节点 `headA` 和 `headB` ,请你找出并返回两个单链表`相交`的`起始节点`。如果两个链表`不存在`相交节点,返回 `null `。 图示两个链表在节点 c1 开始相交:理解相交:不是指A链表中有和B链表中val值相同的结点,而是指这个两个链表中存在相同的结点,如果我们通过指针去遍历A、B两个链表,能够在A、B中找到相同地址的结点,那A、B相交,否则就是不相交。原创 2022-01-16 17:30:00 · 936 阅读 · 12 评论 -
【Leetcode刷题笔记之链表篇】234. 回文链表
给你一个单链表的头节点 `head` ,请你判断该链表是否为`回文链表`。 如果`是`,返回 `true` ;否则,返回` false` 。具有对称性的链表就具有回文结构如果是单数个结点,中间的结点无需考虑,如果其他结点对称肯定是回文结构例如:1 2 3 1 2 也是回文结构这里借助求链表倒数第k个结点的思路。只要链表的.....原创 2022-01-15 17:45:00 · 1294 阅读 · 10 评论 -
【Leetcode刷题笔记之链表篇】剑指 Offer 22. 链表中倒数第k个节点
输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。 例如,一个链表有` 6 `个节点,从头节点开始,它们的值依次是 `1、2、3、4、5、6`。这个链表的倒数第 `3 `个节点是值为 `4` 的节点。`单链表`要求倒数第k个结点,由于结点之间关系的`单向性`,并不好直接求。但是如果我们将`倒数`转化为`顺数`,那么仅需要从头节点开始遍历链表便可轻松实现,具体过程看图解.....原创 2022-01-12 12:00:00 · 1016 阅读 · 19 评论 -
【Leetcode刷题笔记之链表篇】21. 合并两个有序链表
将两个升序链表合并为一个新的 `升序` 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 我们可以将list2选为合并后待返回的链表,然后将list1中的结点合并到list2中.注意:在实际写代码的时候,我们会发现仅有一个`next`用来保存`cur1`的下一个结点是不够的。`cur2`的下一个结点的信息也需要保存(`假设`下一个结点`不为空`,若为空直接`cur1`结点插入`cur2`后即可),因为在比较的时候......原创 2022-01-14 17:30:00 · 1038 阅读 · 15 评论 -
【Leetcode刷题笔记之链表篇】面试题 02.04. 分割链表
总体而言,要想实现分割链表的目的有两种大的思路。一种是`不创建新的链表`,直接在`原链表`上面进行相应的操作。另一种是`创建一个新的链表`,将原来的链表`挪到`新链表中,同时达到想要的效果。原创 2022-01-13 17:45:00 · 857 阅读 · 12 评论 -
【Leetcode刷题笔记之链表篇】876. 链表的中间结点
给定一个头结点为 `head` 的非空单链表,返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点。要得到中间结点,我们很容易想到的一种方法就是:先`遍历一遍链表`,求出`链表长度`,然后再从头开始,`走到中间结点`去,返回中间结点......原创 2022-01-10 18:00:00 · 1175 阅读 · 18 评论 -
【Leetcode刷题笔记之链表篇】206. 反转链表
要反转链表,一个很容易想到的方法就是:直接将链表结点之间的链接关系`反过来`。例如原来为`1->2`,反过来就是`1<-2`,也就是`2->1`。 除了使用这种迭代的方式之外,我们还可以使用头插法。将原来的链表`头插`到一个新的链表中,那么链表的方向就会反过来。除了以上两者方式外,还有一种递归实现的方法,递归版本稍微复杂一些,其关键在于反向工作。假设列表的其余部分已经被反转,现在我们应该如何反转它前面的部分?原创 2022-01-09 18:00:00 · 1411 阅读 · 18 评论 -
【Leetcode数据结构算法题】203. 移除链表元素(链表篇)
题目内容:给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。leetcode题目链接(点击即可跳转)思路分析这是一个比较简单的单链表题目,属于单向不带头非循环链表。要注意这里的头节点不是带头结点的那种“头结点”。这里的头节点相当于链表的名字(巨坑)。虽然题目本身难度系数不大,但是如果不细心分析清楚,一看到题目就立马编程,那么调试的时候可能会耗费挺多时间的。实际上,对于链表相关的题目,不管难易程度如何原创 2022-01-08 20:00:00 · 429 阅读 · 7 评论 -
【数据结构学习笔记】二、线性表---链表篇(2)
文章目录链表概念:链表分类:单链表的实现:链表概念:链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。注意:1.从上图可看出,链式结构在逻辑上是连续的,但是在物理上不一定连续2.现实中的结点一般都是从堆上申请出来的3.从堆上申请的空间,是按照一定的策略来分配的,两次申请的空间可能连续,也可能不连续链表分类:单向双向带头不带头循环非循环单向..原创 2022-01-07 22:10:13 · 1239 阅读 · 8 评论 -
【Leetcode数据结构算法题】数组形式的整数加法(顺序表篇)
题目内容:对于非负整数 X 而言,X 的数组形式是每位数字按从左到右的顺序形成的数组。例如,如果 X = 1231,那么其数组形式为[1,2,3,1]。给定非负整数 X 的数组形式 A,返回整数 X+K 的数组形式。leetcode题目链接(点击即可跳转):...原创 2022-01-05 22:33:47 · 533 阅读 · 11 评论 -
【Leetcode数据结构算法题】轮转数组(顺序表篇)
题目内容:给你一个数组,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。leetcode题目链接(点击即可跳转)思路分析看完题目后,我们首先要做的就是理解题目的含义,也就是审题。从不同维度,不同角度的去设问题并主动回答这些问题。题目中出现了一个我们比较陌生的词语“轮转”,可能我们一下子无法理解这个词是啥子玩意儿。这个时候就可以借助题目中的示例来帮助理解。比如说示例1:用通俗的话来说就是,向右轮转1步,就是将最后一个元素放到第一个位置,其余元素位置向右移动一个位置。类似于所有元素向原创 2022-01-02 19:00:00 · 716 阅读 · 11 评论 -
【Leetcode数据结构算法题】合并两个有序数组(顺序表篇)
题目内容:给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2中的元素数目。 请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。注意:最终合并后数组不应由函数返回,而是存储在数组 nums1 中。为了应对这种情况,nums1 的初始长度为 m + n,其中前 m个元素表示应合并的元素,后 n 个元素为 0 ,应忽略。nums2 的长度为 n 。leetcode题目链接(点击即可跳转原创 2022-01-01 18:00:00 · 1378 阅读 · 15 评论 -
【Leetcode数据结构算法题】删除有序数组中的重复项(顺序表篇)
题目内容:给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。Leetcode题目链接(点击即可跳转)思路分析我们先假设没有“原地”删除重复项的这个要求,如果我们要解决“删除有序数组中的重复项”,能采取什么样的方法?(开动小脑袋瓜,想一想!)我们可以先创建一个临时数组,遍历原数组,将数组中的非重复元素放到临时数组中,最后将临时数组的内原创 2021-12-31 18:30:00 · 962 阅读 · 8 评论 -
【Leetcode数据结构算法题】原地移除元素(顺序表练习题)
题目内容:给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并原地修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。leetcode题目链接(点击即可跳转):思路分析①看完了题目,我们首先来理解一下题目的含义。这个题目其实就算是说,有一个数组,而且还是一个整型数组,数组里面有一堆数字。然后给你一个特定的数字,这个数字有可能在数组里面找不到,也原创 2021-12-30 23:01:03 · 1373 阅读 · 16 评论 -
【数据结构学习笔记】二、线性表---顺序表篇(1)(画图详解+代码实现)
数据结构、算法图解、线性表、顺序表、链表原创 2021-12-29 17:02:36 · 3427 阅读 · 3 评论 -
【Leetcode算法热题 --- 数组篇】丢失的数字
文章目录题目内容:题目理解:解题思路思路一:求和做差法思路二:异或找单法思路三:排序法思路四:哈希表法题目内容:给定一个包含 [0, n] 中 n 个数的数组 nums ,找出 [0, n] 这个范围内没有出现在数组中的那个数。(进阶: 你能否实现线性时间复杂度、仅使用额外常数空间的算法解决此问题?)Leetcode题目链接(点击即可跳转):丢失的数字题目理解:给定一个包含 [0, n] 中 n 个数的数组 nums ,找出 [0, n] 这个范围内没有出现在数组中的那个数。假设原创 2021-08-11 22:33:35 · 855 阅读 · 5 评论 -
【Leetcode算法热题 --- 链表篇】链表中倒数第k个节点
文章目录题目内容:思路一:链表长度法思路二:双指针先行法题目内容:输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。例如,一个链表有 6 个节点,从头节点开始,它们的值依次是 1、2、3、4、5、6。这个链表的倒数第 3 个节点是值为 4 的节点。leetcode题目链接(点击即可跳转):链表中倒数第k个节点题目理解:这个题目要求我们找到倒数第k个节点,顺数的最后一个元素是倒数第1个节点(有的地方会把这里叫做倒数第0个,但是这原创 2021-08-08 20:05:31 · 1082 阅读 · 9 评论 -
【C语言进阶学习笔记】五、动态内存分配(爆肝吐血力作,强烈建议收藏!!!)
前言现代计算机基本都是基于冯诺伊曼结构体系设计出来的,冯诺伊曼结构体系的核心就是“存储程序”,将程序(指令集)和数据以同等地位存储在内存中。但是我们的内存空间并不是无限大的,所以为了高效的利用好内存空间,操作系统会对这些内存空间进行相应的分区,不同区域的内存有其对应的功能和使用方式。比如局部变量、函数形参通常是存储在栈区的,这部分内存空间的特点就是临时使用,用完即释放(当然这个都是由操作系统自动完成的,不需要程序员的干预);再比如全局变量通常存放在静态区,此外由static修饰的局部变量也会放到静态原创 2021-07-25 12:36:02 · 1216 阅读 · 8 评论 -
【数据结构学习笔记】一、数据结构介绍及算法分析(新手入门进阶指南)
文章目录一、数据结构和算法介绍1.什么是数据结构?2.什么是算法?3.数据结构和算法的重要性4.如何学好数据结构和算法5.数据结构和算法书籍及资料推荐6.经常遇到不会做的题目二、算法分析1、算法效率时间复杂度1.时间复杂度的概念:2.大O的渐进表示法空间复杂度1.空间复杂度的概念:2.大O渐进法表示法:数据结构学习的心理准备:一、数据结构和算法介绍1.什么是数据结构?数据结构(Data Structure)是计算机存储、组织数据的方式,指相互之间存在一种或多种特定关系的数据元素的集合。理解原创 2021-07-15 11:49:57 · 1086 阅读 · 10 评论 -
【C语言进阶学习笔记】四、自定义类型(1)(结构体+位段)
文章目录结构体结构的基础知识:结构体的声明结构体的自引用结构体变量的定义和初始化结构体内存对齐修改默认对齐数offsetof结构体传参位段位段的内存分配位段的跨平台问题位段的应用场景结构体结构的基础知识:结构是一些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量。数组是一组相同类型的元素的集合。结构体也是一些值的集合,结构体的每个成员可以是不同类型的。结构体的声明struct tag{ member_list;}variable_list;结构体关键字:str原创 2021-06-26 17:27:11 · 921 阅读 · 6 评论 -
【C语言进阶学习笔记】二、指针的进阶(3)(练习篇)
本篇文章的内容为指针进阶的相关练习题目,主要是进行指针的练习和巩固,继续上一篇指针相关的内容。【C语言进阶学习笔记】二、指针的进阶(2)(重点必看+代码演示+练习)文章目录一、指针和数组经典笔试题解析:1、请写出下面程序执行的结果2、请写出下面程序执行的结果3、请写出下面程序执行的结果4、请写出下面程序执行的结果5、请写出下面程序执行的结果6、请写出下面程序执行的结果7、请写出下面程序执行的结果8、请写出下面程序执行的结果二、指针笔试题:笔试题1:笔试题2:笔试题3:笔试题4:笔试题5:笔试题6:笔试题原创 2021-06-08 17:16:18 · 1814 阅读 · 31 评论 -
【C语言进阶学习笔记】二、指针的进阶(2)(重点必看+代码演示+练习)
本篇文章的内容仍然为指针进阶的相关内容,继续上一篇文章的内容。【C语言进阶学习笔记】二、指针的进阶(1)(重点必看+代码图解+练习)这是一篇干货满满的文章,希望有所收获~文章目录5、函数指针阅读两个有意思的代码:6、函数指针数组练习:函数指针数组的用途:方法一:方法二:7、指向函数指针数组的指针8、回调函数5、函数指针我们创建函数的时候,就会在内存中开辟一块空间,既然占用了内存空间,那就有对应的内存空间地址。函数指针,顾名思义就是指向函数的指针。注意:& 函数名 和 函数名均.原创 2021-06-04 17:31:24 · 1497 阅读 · 18 评论 -
【C语言进阶学习笔记】二、指针的进阶(1)(重点必看+代码图解+练习)
在C语言基础阶段,我们学习过指针相关的一些基础内容,比如说:1.指针是一个变量,用来存放地址,地址是唯一标识一块内存空间2.指针的大小是固定的4 / 8个字节(32位平台 / 64位平台)3.指针是由类型,指针的类型决定了指针的 + -整数的步长,指针解引用操作时候的权限4.指针的运算本篇文章及后面的几篇文章将会更加详细的去介绍和学习指针的进阶部分。(指针的内容在数据结构中会经常用到,所以一定要好好学习,打好基础~)文章目录1、字符指针2、指针数组3、数组指针1.数组指针的定义2. &a原创 2021-06-01 17:07:47 · 2419 阅读 · 17 评论 -
【C语言基础学习笔记】七、初始结构体(详细讲解+代码举例+图解)
本章内容是初始结构体的全部内容,希望小伙伴们能静下心来,仔细看完并看懂,一定会收获满满~说明:在后续的数据结构与算法、C语言进阶或者C++的学习当中,指针以及结构体这部分内容至关重要!如果这两大块内容没有学好,学懂,真正融合贯通去运用,那么在后续的数据结构与算法、C语言进阶或者C++的学习会非常艰难,尤其是数据结构和算法!有关初始指针内容的部分请参考:【C语言基础学习笔记】六、初始指针(重点必看)(详细讲解+代码举例+练习巩固)文章目录一、结构体类型的声明二、结构体变量的定义和初始化三、结构体成员的原创 2021-05-20 17:30:26 · 1911 阅读 · 11 评论 -
【007】素数判断基本方法及初级进阶方法
7.给出一个大于或等于3的正整数,判断它是不是一个素数。解题思路:首先我们要了解素数的概念,素数:也叫做 “质数”,是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数,也就是不能再整除其他数。判断素数的方法:这里采用试除法(将输入的数n与从2到n - 1的数取模,若没有模为零的情况,则代表n是素数)#include<stdio.h>int main(){ int n = 0; int i = 0; printf("请输入一个大于3的正整数:>>\n")原创 2021-03-27 23:47:30 · 470 阅读 · 0 评论