
快速入门数据结构和算法(C语言版)
文章平均质量分 86
将近 8 年的 C 语言和数据结构辅导经验,原创了一整套数据结构和算法教程(C语言版),超过25W字,500+高清图片(含大量 gif 动画),期间大改版 2 次,语言通俗易懂,深入浅出,非常适合有 C 语言基础、想入门数据结构的小伙伴和计算机考研党阅读。
优惠券已抵扣
余额抵扣
还需支付
¥69.90
¥99.00
购买须知?
本专栏为图文内容,最终完结不会低于15篇文章。
订阅专栏,享有专栏所有文章阅读权限。
本专栏为虚拟商品,基于网络商品和虚拟商品的性质和特征,专栏一经购买无正当理由不予退款,不支持升级,敬请谅解。
玩转C语言和数据结构
将近8年的C语言和数据结构辅导经验,一对一辅导 C 语言,一对一辅导数据结构,需要的私我。
展开
-
数据结构和算法教程(C语言版)
数据结构研究的是数据之间的关系,再进一步说,它研究的是多份数据之间的分布、排列和勾连的关系,以及在此基础之上如何进行高效的增删改查操作。数据结构是计算机专业的基础课程,也是所有程序员的内功心法;不懂数据结构就是写代码的农民,了解数据结构才能成为行业专家。六年创作,三次迭代,千般打磨,成就了现在这套精品的数据结构和算法教程。为了降低阅读门槛,本教程所有代码都基于C语言编写。原创 2023-11-04 14:20:52 · 1299 阅读 · 0 评论 -
数据结构是什么
数据结构是什么,在我看来,它是一门学科,教你如何存储那些具有复杂关系的数据。数据结构存储数据的思路(思维、思想),可以用任意一种编程语言实现。换句话说,无论你掌握哪种编程语言,也无论你从事什么开发工作,只要你和数据打交道,就一定会用到数据结构。原创 2023-11-04 14:28:16 · 174 阅读 · 0 评论 -
数据结构到底学什么
学习数据结构,就是学习各种存储数据的方案。玩转数据结构,实际开发中遇到的各类数据存储问题都难不倒你。原创 2023-11-04 14:33:36 · 148 阅读 · 0 评论 -
数据结构难学吗,如何才能学会?
熟练掌握一门编程语言,是学习数据结构的必备条件,没有任何捷径可以走。数据结构本身并不难学,找到适合自己的学习资料,学习过程中多动手敲代码,必要时手动画一画数据的存储状态,就一定能学好数据结构。当前阅读的是整套数据结构和算法教程中的一节内容,想系统学习数据结构和算法的读者,可以前往教程目录页面系统的学习,也可以猛击这里去我的个人门户网站学习,想购买教程的读者加我 q(834937624)领取教程的 PDF 电子版。原创 2023-11-08 20:13:50 · 805 阅读 · 0 评论 -
学好数据结构,你能超越99%的程序员!
和学习某一门编程语言不同,随学即用,常常会带给你学习的快感。有些知识并非学习了就能立竿见影,但学懂它会让你有整体的提升,数据结构就是这样的知识。原创 2023-12-26 19:18:39 · 1081 阅读 · 0 评论 -
反转单链表的4种方法(C语言实现)
本节仅以无头节点的链表为例,讲解了实现链表反转的 4 种方法。使用迭代反转法实现时,初始状态忽略头节点(直接将 mid 指向首元节点),仅需在最后一步将头节点的 next 改为和 mid 同向即可;使用头插法或者就地逆置法实现时,仅需将要插入的节点插入到头节点和首元节点之间即可;递归法并不适用反转有头结点的链表(但并非不能实现),该方法更适用于反转无头结点的链表。结合以上说明,读者可尝试修改本节代码,使它们能用于反转带头节点的链表。对于反转没有头节点的链表,读者可从反转无头节点链表下载;原创 2023-12-26 19:55:45 · 1218 阅读 · 0 评论 -
静态链表基本操作(C语言实现)
int data;int cur;}component;//将结构体数组中所有分量链接到备用链表中//初始化静态链表//向链表中插入数据,body表示链表的头结点在数组中的位置,add表示插入元素的位置,num表示要插入的数据//删除链表中存有num的结点,返回新数据链表中第一个节点所在的位置//查找存储有num的结点在数组的位置//将链表中的字符oldElem改为newElem//输出函数//从备用链表中摘除空闲节点的实现函数//将摘除下来的节点链接到备用链表上。原创 2023-11-04 16:09:14 · 92 阅读 · 0 评论 -
双向链表实现贪吃蛇游戏(C语言版)
要知道,贪吃蛇是时刻移动的,而在上面的 move() 函数中,会时刻修正贪吃蛇每个节点的位置,因此当为双向链表添加新节点后,只要贪吃蛇移动一步,新节点的位置就会自行更正。换句话说,除非贪吃蛇吃到食物,否则无论怎样移动,都不会对双向链表的整个结构(节点数)产生影响,唯一受影响的就只是各个节点中 (x,y) 这对定位数据。1) 我们知道,双向链表中各个节点的标准构成是一个数据域和 2 个指针域,但对于实现贪吃蛇游戏来说,由于各个节点的位置是随贪吃蛇的移动而变化的,因此链表中的各节点还需要随时进行定位。原创 2023-12-26 20:43:46 · 968 阅读 · 0 评论 -
栈求表达式的值(C语言版)
通过前面章节的学习,读者已经了解了什么是栈以及栈存储结构的 2 种实现方式(顺序栈和链栈)。在此基础上,本节教读者用栈解决一个实际问题:如何用栈结构求一个表达式的值?所谓表达式,就是由变量、常量以及运算符组合而成的式子。其中,常用的运算符无非!(阶乘运算符)、^(指数运算符)、+、-、*、/ 、( ) 这几种,比如就是一个表达式。那么,如何用栈结构求一个表达式的值呢?实际上,已经有前辈设计好了一种完美的解决方案。原创 2023-12-28 17:11:10 · 1032 阅读 · 0 评论 -
BF算法(模式匹配算法)C语言详解
BF 算法的实现过程很 "无脑",不包含任何技巧。实际上,我们可以对 BF 算法的实现过程进行改进,下一节会给大家讲解 BF 算法的一个改进版本,称为 KMP 算法。当前阅读的是整套数据结构和算法教程中的一节内容,想系统学习数据结构和算法的读者,可以前往教程目录页面系统的学习,也可以猛击这里去我的个人门户网站学习,想购买教程的读者加我 q(834937624)领取教程的 PDF 电子版。原创 2023-11-05 17:49:02 · 239 阅读 · 0 评论 -
KMP算法(快速模式匹配算法)详解
快速模式匹配算法,简称 KMP 算法,是在 BF 算法基础上改进得到的算法。学过 BF 算法的读者应该知道,该算法的实现思想很简单,就是 "傻瓜式" 地将模式串(假定为子串的串)与主串中的字符一一匹配。KMP 算法不一样,它可以略过一些原本就不可能成功的匹配过程,提高模式匹配的效率。例如,对主串 A("ABCABCE")和模式串 B("ABCE")进行模式匹配,KMP 算法只需要匹配 2 次。图 1 第一次人为模式匹配。原创 2023-11-05 17:52:15 · 230 阅读 · 0 评论 -
优化KMP算法
在《》一节中,详细介绍了 KMP 算法解决模式匹配问题的过程(思路、思想)。假设有一个模式串为 "ABAB",则调用 Next() 函数求得的 NEXT 数组是 {0,1,1,2},如下图所示:图 1 模式串对应的NEXT数组注意观察这个模式串,第一个字符和第三个字符都是 'A',它们对应的 next 值分别是 0 和 1;同样,第二个字符和第四个字符都是 'B',它们对应的 next 值分别是 1 和 2。原创 2024-01-01 17:05:50 · 881 阅读 · 0 评论 -
为什么KMP算法的主串指针不用回退?
在 KMP 算法中,当主串和模式串匹配失败时,假设主串指针 i 指向的字符 'K'。那么无论主串指针 i 是否回退,下次模式匹配时主串和模式串都会再次匹配字符 'K',只有该字符匹配成功,整个模式串才有可能匹配成功。再者,即便主串中存在一个字符串位的起始位置位于指针 i 之前,KMP 算法也会成功捕捉到这种情况,不会漏掉。基于以上两点,在 KMP 算法中,主串指针 i 就不需要回退,只回退模式串指针 j 即可。原创 2024-01-01 17:07:01 · 876 阅读 · 0 评论 -
串实现字符过滤系统(含C语言源码)
字符过滤系统简介:由用户给定一个主串和一个模式串,要去系统能报告模式串在主串的位置(主串中可能存在多个模式串)。同时,过滤系统要具备文本替换功能,可以将主串中的所有模式串替换成指定的字符串。原创 2024-01-01 17:08:28 · 425 阅读 · 0 评论 -
数组是什么,数据结构中的数组
提到数组,大家首先会想到的是:很多编程语言中都提供有数组这种数据类型,比如 C/C++、Java、Go、C# 等。但本节我要讲解的不是作为数据类型的数组,而是数据结构中提供的一种叫数组的存储结构。在前面章节中,大家已经学会了很多种线性存储结构,包括顺序表、链表、栈、队列和串。数组也是一种线性存储结构,用来存储逻辑关系为 "一对一" 的数据。和前面学过的那些线性存储结构相比,数组最大的不同是:它存储的数据可以包含多种“一对一”的逻辑关系。举个简单的例子:图 1 包含多种线性关系的数据。原创 2023-11-05 17:54:04 · 84 阅读 · 0 评论 -
数组的顺序存储结构(C语言实现)
前面讲过,数组是一种“特殊”的线性存储结构,它不会对内部的元素做插入和删除操作,有可能做查找(读取)和修改操作。因此,我们经常选用顺序存储结构(顺序表)来实现数组,而不用链式结构(链表)。顺序表查找和修改元素的效率比链表高,而插入和删除元素的效率不如链表。数组可以是多维的,而顺序表只能是一维的线性空间。多维数组中,最常用的是二维数组,接下里就以二维数组为例,讲解数组的顺序存储结构。图 1 二维数组。原创 2023-11-05 17:56:02 · 127 阅读 · 0 评论 -
矩阵(稀疏矩阵)压缩存储(3种方式)
数据结构中,提供针对某些特殊矩阵的压缩存储结构。针对以上两类矩阵,数据结构的压缩存储思想是:矩阵中的相同数据元素(包括元素 0)只存储一个。原创 2023-11-05 17:59:07 · 575 阅读 · 0 评论 -
三元组顺序表,稀疏矩阵的三元组表示
由于稀疏矩阵中非 0 元素有多个,因此需要建立 triple 数组存储各个元素的三元组。可以看到,TSMatrix 是一个结构体,其包含一个三元组数组,以及用于存储矩阵总行数、总列数和非 0 元素个数的变量。图 2 的数组中,存储的是三元组(即由 3 部分数据组成的集合),组中数据分别表示(行标,列标,元素值)。当前阅读的是整套数据结构和算法教程中的一节内容,想系统学习数据结构和算法的读者,可以前往。去我的个人门户网站学习,想购买教程的读者加我 q(注意,这里矩阵的行标和列标都从 1 开始。原创 2023-11-06 08:58:35 · 330 阅读 · 0 评论 -
串的块链存储结构
总的来讲,与串的定长顺序存储结构和堆分配存储结构相比,块链存储结构存储字符串的过程要复杂一些,不如前面两种方案灵活。在块链存储结构中操作字符串,和在链表中操作数据的实现过程类似,本节不再给大家做详细赘述,感兴趣的读者可自行编码实现。当前阅读的是整套数据结构和算法教程中的一节内容,想系统学习数据结构和算法的读者,可以前往教程目录页面系统的学习,也可以猛击这里去我的个人门户网站学习,想购买教程的读者加我 q(834937624)领取教程的 PDF 电子版。原创 2023-11-06 08:58:57 · 151 阅读 · 0 评论 -
行逻辑链接的顺序表(压缩存储稀疏矩阵)详解
通过系统地学习使用行逻辑链接的顺序表压缩存储稀疏矩阵,可以发现,它仅比三元组顺序表多使用了一个 rpos 数组,从而提高了查找数组指定行中非 0 元素的效率。当前阅读的是整套数据结构和算法教程中的一节内容,想系统学习数据结构和算法的读者,可以前往教程目录页面系统的学习,也可以猛击这里去我的个人门户网站学习,想购买教程的读者加我 q(834937624)领取教程的 PDF 电子版。原创 2023-11-06 08:59:09 · 390 阅读 · 0 评论 -
十字链表法(压缩存储稀疏矩阵)详解
例如,A 和 B 分别为两个矩阵,在实现 "将矩阵 B 加到矩阵 A 上" 的操作时,矩阵 A 中的元素会发生很大的变化,之前的非 0 元素可能变为 0,而 0 元素也可能变为非 0 元素。使用十字链表压缩存储稀疏矩阵时,矩阵中各行各列的元素都用一条链表存储,与此同时,将所有行链表的表头存储到一个数组(rhead),将所有列链表的表头存储到另一个数组(chead)中。当前阅读的是整套数据结构和算法教程中的一节内容,想系统学习数据结构和算法的读者,可以前往。去我的个人门户网站学习,想购买教程的读者加我 q(原创 2023-11-06 08:59:23 · 281 阅读 · 0 评论 -
矩阵(稀疏矩阵)的转置算法(C语言实现)
所谓矩阵转置,就是将矩阵中每个元素的行标和列标互换,转置后的新矩阵称为转置矩阵。举个简单的例子:图 1 矩阵转置示意图运行结果为:0 0 61 3 5重点分析一下第 13 行代码,它可以将原矩阵中第 i 行 j 列的元素存放到新矩阵中第 j 行 i 列的位置。原矩阵中的所有元素都会经历这步操作,最终得到的新矩阵就是转置矩阵。上面这种方法适用于各种矩阵,当然也包括稀疏矩阵。为了避免以上两个问题,可以考虑用三元组顺序表来存储稀疏矩阵,如下图所示:图 2 三元组表的变化。原创 2023-11-06 08:59:32 · 299 阅读 · 0 评论 -
快速转置稀疏矩阵(C语言版)
介绍了一种用三元组顺序表实现稀疏矩阵转置的算法,它的时间复杂度为O(n2)。实际上,该算法的实现过程还可以改进,执行效率还能有质的提升,我们通常将改进后的算法称为稀疏矩阵的快速转置算法。原创 2024-01-01 17:12:47 · 1134 阅读 · 0 评论 -
行逻辑链接的顺序表实现矩阵乘法(含C语言源码)
两个稀疏矩阵相乘,最终得到的矩阵不一定是稀疏矩阵。通常情况下,解决两个稀疏矩阵相乘的问题,行逻辑链接的顺序表比普通算法的执行效率更高。总的来说,对于普通矩阵的乘法运算,可以采用文章开头的普通算法解决;对于稀疏矩阵之间的乘法运算,建议用行逻辑链接的顺序表解决。当前阅读的是整套数据结构和算法教程中的一节内容,想系统学习数据结构和算法的读者,可以前往教程目录页面系统的学习。原创 2024-01-01 17:15:24 · 489 阅读 · 0 评论 -
十字链表实现矩阵加法(含C语言源码)
采用十字链表法解决稀疏矩阵相加的问题,插入和删除非 0 元素的效率最高(为O(1)),整个算法执行过程中,就是在遍历两个矩阵中的非 0 元素,因此整个算法的执行效率主要取决于两个矩阵中非 0 元素的个数。总之,对于普通矩阵相加的问题,可以用二维数组来解决。解决稀疏矩阵相加的问题,十字链表法的效率通常比前者高。当前阅读的是整套数据结构和算法教程中的一节内容,想系统学习数据结构和算法的读者,可以前往教程目录页面系统的学习。原创 2024-01-01 17:17:51 · 1136 阅读 · 0 评论 -
广义表是什么
广义表,又称列表,也是一种线性存储结构。同数组类似,广义表中既可以存储不可再分的元素,也可以存储广义表,记作:其中,LS 代表广义表的名称,an 表示广义表存储的数据。广义表中每个 ai 既可以代表单个元素,也可以代表另一个广义表。原创 2023-11-07 19:45:50 · 67 阅读 · 0 评论 -
广义表的2种存储结构(超级详细)
由于广义表中既可存储原子(不可再分的数据元素),也可以存储子表,因此很难使用顺序存储结构表示,通常情况下广义表结构采用链表实现。使用顺序表实现广义表结构,不仅需要操作 n 维数组(例如 (1,(2,(3,4))) 就需要使用三维数组存储),还会造成存储空间的浪费。使用链表存储广义表,首先需要确定链表中节点的结构。由于广义表中可同时存储原子和子表两种形式的数据,因此链表节点的结构也有两种,如图 1 所示:图 1 广义表节点的两种类型。原创 2023-11-07 19:48:09 · 276 阅读 · 0 评论 -
广义表的深度和长度(C语言实现)
前面学习了广义表及其对应的存储结构,本节来学习如何计算广义表的深度和长度,以及如何编写相应的 C 语言实现程序。原创 2024-01-01 17:21:45 · 1501 阅读 · 0 评论 -
复制广义表(C语言实现)
本节,我们针对广义表的两种存储结构,分别给出了复制广义表的实现代码:其中Glist *T等同,此为二级指针而非一级指针。在主函数中调用此函数,需要传入指针 T 的地址,而不是 T 本身。C语言中,函数参数传递的方式有两种,分别是值传递和地址传递,本节中的 copyGlist() 函数中的参数 C 采用的是值传递,参数 T 采用的是地址传递。当前阅读的是整套数据结构和算法教程中的一节内容,想系统学习数据结构和算法的读者,可以前往教程目录页面系统的学习。原创 2024-01-01 17:24:05 · 925 阅读 · 0 评论 -
数据结构中的树(小白必读)
树是一种非线性存储结构,通常用来存储逻辑关系为 "一对多" 的数据。使用树结构存储的各个结点,它们之间的关系类似于家谱中的成员关系,比如有父子关系、兄弟关系、表兄弟关系等。当前阅读的是整套数据结构和算法教程中的一节内容,想系统学习数据结构和算法的读者,可以前往教程目录页面系统的学习,也可以猛击这里去我的个人门户网站学习,想购买教程的读者加我 q(834937624)领取教程的 PDF 电子版。原创 2023-11-07 19:50:01 · 178 阅读 · 0 评论 -
二叉树是什么(小白必读)
满二叉树一定是完全二叉树,但完全二叉树不一定是满二叉树。本节主要介绍了什么是二叉树、满二叉树和完全二叉树,以及它们各自具有的性质。实际开发中,合理利用二叉树的性质可以快速操作二叉树中的结点,提高程序的执行效率。当前阅读的是整套数据结构和算法教程中的一节内容,想系统学习数据结构和算法的读者,可以前往教程目录页面系统的学习,也可以猛击这里去我的个人门户网站学习,想购买教程的读者加我 q(834937624)领取教程的 PDF 电子版。原创 2023-11-07 19:52:02 · 89 阅读 · 0 评论 -
二叉树的顺序存储结构(小白必看)
虽然二叉树是非线性存储结构,但也可以存储到顺序表中。顺序表只能存储完全二叉树,普通的二叉树必须先转化为完全二叉树之后才能用顺序表存储。实际场景中,并非每个二叉树都是完全二叉树,用顺序表存储普通二叉树或多或少存在空间浪费的情况。当前阅读的是整套数据结构和算法教程中的一节内容,想系统学习数据结构和算法的读者,可以前往教程目录页面系统的学习,也可以猛击这里去我的个人门户网站学习,想购买教程的读者加我 q(834937624)领取教程的 PDF 电子版。原创 2023-11-07 19:54:17 · 658 阅读 · 0 评论 -
二叉树的链式存储结构(C语言详解)
实际上,二叉树的链式存储结构远不止图 2 所示的这一种。所谓二叉树的链式存储,其实就是用链表存储二叉树,具体的存储方案是:从树的根节点开始,将各个节点及其左右孩子使用链表存储。上一节介绍了二叉树的顺序存储结构,通过学习你会发现,其实二叉树并不适合用顺序表存储,因为并不是每个二叉树都是完全二叉树,普通二叉树使用顺序表存储或多或多会存在内存浪费的情况。利用图 4 所示的三叉链表,可以很轻松地找到各节点的父节点。因此,在解决实际问题时,构建合适的链表结构存储二叉树,可以起到事半功倍的效果。原创 2023-11-07 20:03:36 · 151 阅读 · 0 评论 -
二叉树的4种遍历算法
遍历二叉树可以算作是对树存储结构做的最多的操作,既是重点,也是难点。本节将从初学者的角度给大家分析一下 4 种遍历二叉树算法的由来。原创 2024-01-01 17:25:38 · 1042 阅读 · 0 评论 -
二叉树的先序遍历算法(递归和非递归)
举个简单的例子,下图是一棵二叉树:图 1 二叉树先序遍历这棵二叉树的过程是:访问根节点 1;进入 1 的左子树,执行同样的步骤:访问结点 2;进入 2 的左子树,执行同样的步骤:访问结点 4;结点 4 没有左子树;结点 4 没有右子树;进入 2 的右子树,执行同样的步骤:访问结点 5;结点 5 没有左子树;结点 5 没有右子树;进入 1 的右子树,执行同样的步骤:访问结点 3;进入 3 的左子树,执行同样的步骤:访问结点 6;结点 6 没有左子树;原创 2023-11-07 20:12:26 · 106 阅读 · 0 评论 -
二叉树的后序遍历算法(递归和非递归)
以下图所示的二叉树为例:图 1 二叉树后序遍历这棵二叉树的过程是:从根节点 1 出发,进入该结点的左子树;进入结点 2 的左子树,遍历左子树中的结点:进入结点 4 的左子树,但该结点没有左孩子;进入结点 4 的右子树,但该结点没有右子树;访问结点 4;进入结点 2 的右子树,遍历右子树中的结点:进入结点 5 的左子树,但该结点没有左孩子;进入结点 5 的右子树,但该结点没有右孩子;访问结点 5;访问结点 2;原创 2023-11-07 20:22:36 · 127 阅读 · 0 评论 -
二叉树的层次遍历(C语言实现)
我们知道,树是有层次的,比如:图 1 二叉树的层次上面这棵树一共有 3 层,根结点位于第一层,以此类推。所谓层次遍历二叉树,就是从树的根结点开始,一层一层按照从左往右的次序依次访问树中的结点。二叉树的存储方式有两种,分别是顺序表和链表。对于顺序表存储的二叉树,层次遍历是很容易实现的,因为二叉树中的结点本就是一层一层存储到顺序表中的。唯一需要注意的是,顺序表存储的只能是完全二叉树,普通二叉树必须先转换成完全二叉树后才能存储到顺序表中,因此在实现层次遍历的时候,需要逐个对顺序表中存储的结点进行甄别。原创 2023-11-07 20:27:48 · 163 阅读 · 0 评论 -
线索二叉树(C语言实现)
使用链表存储二叉树时,对于由 n 个结点组成的二叉树,整个存储结构中一定包含 n+1 个空指针。下图给大家展示了图 1 中的二叉树在链表中的存储状态:图 2 二叉树以及在链表中的存储状态图 2 左侧的二叉树一共有 4 个结点,将其存储到链表中后,整个链表中包含 5(4+1)个NULL空指针。所谓线索二叉树,就是利用链表中的 NULL 空指针记录二叉树中某些结点的前驱和后继结点的位置。一棵二叉树转换为线索二叉树的过程称为二叉树的线索化(或者线索化二叉树),转换完成后得到的链表称为线索链表。原创 2024-01-01 17:34:00 · 1195 阅读 · 0 评论 -
双向线索二叉树(C语言实现)
图 1b) 是一棵中序线索二叉树,从两个方向遍历它的过程是:3 -> 1 2 4->表示借助前者的线索可以快速找到后者。通过观察不难发现,中序线索二叉树中的两个 NULL 指针分别是序列里第一个结点的左孩子指针和最后一个结点的右孩子指针。如果先序和后序线索二叉树有两个 NULL 指针,也同样遵循这个规律。Lchild:指向线索二叉树的根结点;Rchild:指向序列里的最后一个结点;Ltag:值为 0,表示它指向的是树的根结点;Rtag:值为 1,表示它指向序列的最后一个结点。原创 2024-01-01 17:39:29 · 1000 阅读 · 0 评论 -
树的双亲表示法(C语言版)
双亲表示法采用顺序表(也就是数组)存储普通树,其实现的核心思想是:顺序存储各个节点的同时,给各节点附加一个记录其父节点位置的变量。如图 1 所示,这是一棵普通的树,该如何存储呢?注意,根节点没有父节点(父节点又称为双亲节点),因此根节点记录父节点位置的变量通常置为 -1。当前阅读的是整套数据结构和算法教程中的一节内容,想系统学习数据结构和算法的读者,可以前往。前面用大量的篇幅讲解了二叉树,从本节开始带领大家研究普通的树存储结构。去我的个人门户网站学习,想购买教程的读者加我 q(页面系统的学习,也可以猛击。原创 2023-11-07 20:30:07 · 132 阅读 · 0 评论