数据结构--Chapter9(查找)

数据结构与算法基础(青岛大学-王卓)—学习笔记Chapter Nine散列表Hash 第七章 散列表Hash7.1散列表的定义(逻辑结构)7.2散列表的基本操作7.2.1散列表的查找7.3散列表的存储结构(物理结构)7.3.1开放定址法(开地址法)7.3.2链地址法(拉链法) 7.1散列表的定义(逻辑结构) 散列表又叫分凑表,哈希表,是记录的存储位置与关键字之间存在对应关系 ,散列表的优点是查找效率高,但是缺点是空间效率低。 7.2散列表的基本操作 散列函数(hash函数 Loc(i)=H(keyi) 又叫杂凑函数,哈希函数,是散列方法中使用的转换函数 。 根据元素集合的特性构造要求,一是n 阅读详情

9 查找

    查找(Search)是数据处理中最常见的一种操作,它同人们的日常工作与生活有着密切关系。例如:人们从电话号码簿中查找所需要的电话号码。利用计算机查找信息首先需要把原始数据整理成一张一张的数据表,它可以具有集合、线性表、图等任意逻辑结构;然后,把每个数据表按照一定的存储结构存入到计算机中,变为计算机可处理的“表”,诸如顺序表、链接表等;最后,再通过使用有关的查找算法在相应的存储表上查找出所需要的信息。

9.1 查找的基本概念

1. 查找

    所谓查找,就是在由一组记录组成的集合中寻找主关键字值等于给定值的某个记录,或是寻找属性值符合特定条件的某些记录。例如:在学生成绩表中,若按学号进行查找,则最多只能找到一条与之相关的记录;若按姓名查找,则可能找到多条同姓名的记录。

    下面将基于主关键字的查找形式化定义为:假设含n个记录的集合{R0,R1,...,Rn-1},其相应的主关键字序列为{K0,K1,...,Kn-1}若给定某个主关键K,查找就是在记录集合中定位满足条件Kj=K的记录的过程。若记录集合中存在满足此条件的记录,则查找成功;否则,查找失败。

2. 查找表

    查找表是一种以同一类型的记录构成的集合为逻辑结构,以查找为核心算法的数据结构,由于集合中的记录之间是没有“关系”的,并且在实现查找表时不受“关系”的约束,而是根据实际应用,按照查找的具体要求组织查找表,从而方便实现高效率的查找。因此,查找表是一种应用灵活的数据结构。

    查找表中常做的操作有:建表、查找、读表元、对表做修改操作(例如:插入和删除)。其中,查找操作是指确定满足某种条件的记录是否在查找表中;读表元操作是指读取满足某种条件的记录的各种属性。查找表分为静态查找表和动态查找表。若对查找表的操作不包括对表的修改操作,则称此类查找表为静态查找表;若在查找的同时插入了表中不存在的记录,或从查找表中删除了已存在的记录,则称此类查找表为动态查找表。

3. 平均查找长度

    由于查找的主要操作是关键字的比较,所以通常把查找过程中给定值与关键字值的比较次数的期望值作为衡量一个查找算法效率优劣的标准,也称为平均查找长度(Average Search Length),通常用ASL表示。

    对一个含n条记录的查找表,查找成功时的平均查找长度为:

                                                                    ASL = ∑pici(i=0,1,2,...,n-1)

其中,n是记录个数;pi是查找第i条记录的概率,ci是查找第i条记录是关键字值与给定值比较的次数。

9.2 静态表查找

    静态查找表可以用顺序表或线性链表加以表示,这儿只讨论顺序表上查找的实现方法,即顺序表的3种查找方法:顺序查找、二分查找和分块查找。

9.2.1 顺序查找

    顺序查找又称为线性查找,它是一种最简单、最基本的查找方法。它从顺序表的一端开始,依次将每一个数据元素的关键字值与给定值key进行比较,若某个数据元素的关键字值等于给定值key,则表明查找成功;若直到所有数据元素都比较完毕,仍找不到关键字值为key的数据元素,则表明查找失败。

    假设顺序查找的基本要求是:从顺序表r[0]到r[n-1]的n个数据元素中,顺序查找出关键字值为key的记录,若查找成功,则返回其下表;否则,返回-1。顺序查找算法描述如下:

	public int seqSearch(Comparable key) {
		int i = 0;
		int n = length();
		while (i < n && r[i].key.compareTo(key) != 0) {
			i++;
		}
		if (i < n) {
			return i;// 若查找成功,则返回该数据元素的下标i;否则,返回-1
		} else {
			return -1;
		}
	}


    在等概率情况下,其查找成功的平均查找长度为:ASL=(n+...+2+1)=(n+1)/2。时间复杂度为O(n)。

9.2.2 二分查找

    上述顺序查找算法虽然实现简单,但平均查找长度较大,特别不适合用于表长较大的查找表。若以有序表表示静态查找表,则查找过程可以基于“折半”进行。所谓“折半”也称为“二分”,故二分(binary search)又称为折半查找。作为二分查找对象的数据必须是顺序表存储的有序表,通常假设有序表是按关键字值由小到大排列有序。二分查找的基本思想:首先取整个有序表的中间记录的关键字值与给定值相比较,若相等,则查找成功;否则以位于中间位置的数据元素为分界点,将查找表分为左右两个子表,并判断呆查找的关键字值key是在左子表还是右子表再在左或右子表中重复上述步骤,直到找到关键字值为key的记录或子表长度为0。

    假设二分查找的基本要求是:从有序表r[0]到r[n-1]的n个数据元素中,查找关键字值为key的记录,若查找成功,则返回其下表;否则,返回-1。为实现二分查找,需要引进low、high和mid变量,用于分别表示带查找区域的第一条记录、最后一条记录和中间记录的数组下标。当待查表非空时,二分查找算法的主要步骤归纳如下:

1)置初值:low=0,high=n-1。

2)当low<=high时,重复执行下面的步骤:

①mid=(low+high)/2.

②若key与r[mid]的关键字值相等,则查找成功,返回mid值;否则转③

③若key小雨r[mid]的关键字值,则high=mid-1;否则low=mid+1。

3)当low>high时,查找失败,返回-1。

    具体算法描述如下:

	public int binarySearch(Comparable key) {
		if (length() > 0) {
			int low = 0;
			int high = length() - 1;
			while (low <= high) {
				int mid = (low + high) / 2;
				if (r[mid].key.compareTo(key) == 0) {
					return mid;// 查找成功
				} else if (r[mid].key.compareTo(key) > 0) {
					high = mid - 1;// 查找范围缩小到前半段
				} else {
					low = mid + 1;// 查找范围缩小到后半段
				}
			}
		}
		return -1;// 查找不成功
	}


    在等概率的情况下,二分查找的平均查找长度为:ASL=log2(n+1)-1。

    不管查找成功或失败,二分查找比顺序查找要快得多。但是,它要求线性表必须按关键字进行排序。此外,二分查找仅适用于顺序存储结构、二对于动态查找表、顺序存储的插入、删除等运算都很不方便。因此,二分查找一般适用于一经建立就很少需要进行改动二又经常需要查找的静态查找表。

9.2.3 分块查找

    分块查找又称为索引顺序查找,它是顺序查找法与二分法的一种结合,其基本思想是:首先把线性表分成若干块,在每一块中,节点的存放不一定有序,但块与块之间必须是有序的,假定按结点的关键字值递增有序,则第一块中结点的关键字值都小于第二块中任意结点的关键字值,第二块中的结点的关键字值都小于第三块中任意结点的关键字值,以此类推,最后一块中所有结点的关键字值大于前面所有块中结点的关键字值。

9.3 动态表查找

    动态查找表的特点:表结构本身是在查找过程中动态生成的,即对于给定值key,若表中存在关键字值等于key的记录,则查找成功返回;否则插入关键字值等于key的记录。动态查找表可以有不同的表示方法,这儿只讨论以各种树形结构表示时的实现方法。

9.3.1 二叉排序树

1. 二叉排序树的定义

    二叉排序树(Binary Sort Tree)或者是一棵空树,或者是一棵具有下列性质的二叉树:

1)若左子树不为空,则左子树上所有结点的值均小于根结点的值。

2)若右子树不为空,则右子树上所有结点的值均大于根结点的值。

3)它的左右子树也都是二叉排序树。

9.3.2 平衡二叉树

9.3.3 B-树和B+树

9.3.4 红黑树

9.4 哈希表查找

9.4.1 哈希表的定义

    哈希存储的基本思想是以关键字值为自变量,通过一定的函数关系(称为散列函数或称哈希(Hash)函数),计算出对应的函数值(称哈希地址),以这个值作为数据元素的地址,并将该数据元素存入到相应地址的存储单元中去。查找时再根据要查找的关键字采用同样的函数计算出哈希地址,然后直接到相应的存储单元中去取要找的数据元素即可。

    哈希表的具体定义描述如下;

    根据设定的哈希函数H(key)和所选中的处理冲突的方法,将一组关键字映像到一个有限的、地址连续的地址集(区间)上,并以关键字在地址集中的“像”作为相应数据元素在表中的存储位置,如此构造所得的查找表称为“哈希表”。

9.4.2 常用的哈希函数

    构造哈希函数的方法有很多,但总的原则是尽可能地将关键字集合空间均匀地映射到地址集合空间中去,同时尽可能地降低冲突发生的概率。下面介绍几种最为常用的哈希函数。

1. 除留余数法

    该方法是最为简单的一种方法。它是以一个略小于哈希地址集合中地址个数m的质数p去除关键字,取其余数作为哈希地址,即:H(key)=key%p,(p<=m)。

    使用除留余数法,选取合适的p很重要,一般要求p最好是一个小于或等于m的某个最大质数,取值关系表如下:

哈希表长度8163264128256512
最大质数7133161127251503

2. 直接地址法

    去关键字的某个线性函数值为哈希地址,即:H(key)=a*key+b(a、b为常数)。

    例如,有一关键字集合{200,400,500,700,800,900},选取哈希函数为Hash(key)=key/100,假设表长为11,则构造的哈希表如下:


    此方法对不同的关键字不会产生冲突,但是此方法产生的哈希表会造成存储空间的大量浪费。

3. 数字分析法

    对于关键字的位数比存储区域的地址码位数多的情况,可以采取对关键字的各位进行分析,丢掉分布不均匀的位,留下分布均匀的位作为哈希地址,这种方法称为数字分析法。

    有学生的生日数据如下:
年.月.日
75.10.03
75.11.23
76.03.02
76.07.12
75.04.21
76.02.15

    经分析,第一位,第二位,第三位重复的可能性大,取这三位造成冲突的机会增加,所以尽量不取前三位,取后三位比较好。此方法适合于能预先估计出全体关键字的每一位上各个数字出现的频度的情况。

4. 平方取中法

    平方取中法是取关键字平方的中间几位作为哈希地址的方法,具体取多少位视实际要求而定。此方法适合于关键字中的每一位取值都不够分散或者较分散的位数小于哈希地址所需要的位数的情况。

5. 折叠法

    折叠法是将关键字自左到右或自右到左分成位数相同的几部分,最后一部分位数可以不同,然后将这几部分叠加求和,并按哈希表的表长,取最后几位作为哈希地址,这种方法成为折叠法。

6. 随机数法

    选择一个随机数,取关键字的随机数函数值位它的哈希地址,即H(key)=random(key),其中,random为随机函数。通常,当关键字长度不相等时,采用此方法构造哈希函数较好。

9.4.3 处理冲突的方法

1. 开放定址法

    开放定址法解决冲突的基本思想:当冲突发生时,形成一个地址序列,沿着这个序列诸葛探测,直到找到一个“空”的开放地址,将发生冲突的关键字值存放到该地址中取。

    开放定址法的一般形式可表示为:

    Hi=(H(key)+di)%m   (i=1,2,...,k(k<=m-1)),其中H(key)是关键字为key的哈希函数,%为取余运算,m为哈希表长,di为每次再探测时的地址增量。根据地址增量的取法不同,可得到不同的开放定址处理冲突探测方法。

2. 链地址法

    链地址法也称为拉链法,其解决冲突的基本思想:将所有具有相同哈希地址的不同关键字元素链接到同一单链表中。若选定的哈希表长度为m,则可将哈希表定义为一个由m个头指针组成的指针数组T[0...m-1],凡是哈希地址为i的数据元素,均以结点的形式插入到以T[i]为头指针的单链表中。

3. 公共溢出区法

    公共溢出区法的基本思想:除基本的存储区(称为基本表)之外,另建一个公共溢出区(称为溢出表),当不发生冲突时,数据元素可存入基本表中;当发生冲突时,不管哈希地址是什么,数据元素都存入溢出表。查找时,对给定值K通过哈希函数计算出哈希地址i,先与基本表对应的存储单元相比较,若相等,则查找成功;否则,再到溢出表中进行查找。

4. 再哈希法

    采用再哈希法解决冲突的主要思想:当发生冲突时,再用另一个哈希函数来得到一个新的哈希地址,若再发生冲突,则再使用另一个函数,直到不发生冲突为止。这种方法不易产生“聚集”,但却增加了计算时间。

《趣题学算法》Chapter 2 数据集合与信息查找 Chapter 2 数据集合与信息查找 2.1 集合及其字典操作 2.2 文本串的查找 2.3 全序集序列的排序 2.4 集合的并、交、差运算 计算机的处理对象是数据。要描述现实世界中的一个事物,往往需要众多的数据。即使可以用单一数值表述一个简单事物,问题仍可能涉及多个这样的简单事物。也就是说,在计算机里处理的往往是一组数据。在数学中,把一组相关的数据看成一个整体,称为集... 阅读详情

相关推荐

STM32平台下FreeModbus TCP协议栈集成指南

深入讲解在STM32平台如何移植和配置freemodbus协议栈,实现TCP通信功能。结合嵌入式开发细节,帮助开发者快速掌握freemodbus的应用与调试技巧。

weixin_36001279的博客 1142

数据结构——查找

折半查找:进行加法与除法的运算插值查找:进行复杂的四则运算斐波那契查找:最简单的加减法运算在海量数据前,这些细微的运算差距可能会影响最终的效率,视情况选择对于二叉排序树而言,因为是以链表的方式存储,即插入和删除的时间性能比较好但对于查找而言,比较看重二叉树的形状,故引申出如何让二叉排序树平衡的问题通过关键字,不需要比较就能获得需要记录的存储位置,这就是一种新的技术——散列技术散列技术是在记录的存储位置和他的关键字之间建立一个确定的对应关系,通俗讲类似于函数F(x)=x;

weixin_66405733的博客 1642

DIY T12烙铁头驱动难题:用几个电容二极管,搞定NMOS上管驱动(附Multisim仿真)

本文详细介绍了如何利用电荷泵电路解决DIY T12烙铁头驱动中的NMOS上管驱动难题。通过巧妙组合电容和二极管,构建低成本高效的升压电路,实现栅极高压驱动需求。文章包含具体电路设计、元件选型建议、实际搭建注意事项以及Multisim仿真验证,为电子爱好者提供了一套完整的解决方案。

weixin_33640562的博客 334

处理散列冲突的方法

1. 开放定址法 开放定址法就是一旦发生冲突,就去寻找下一个空的散列地址,只要散列表足够大,空的散列地址总能找到,并将记录存入。 Hi = (H(key) + di) MOD m, i=1,2,…, k(k&lt;=m-1),其中H(key)为散列函数,m为散列表长,di为增量序列。di可有下列三种取法: (1)di=1,2,3,…, m-1,称为线性探测再散列; (2)di=1^2, -...

weixin_34116110的博客 462

【系统架构设计师-2023年真题】综合知识-答案及详解

要实现多任务间的协同工作,操作系统必须提供任务间的通信手段。嵌入式操作系统一般都会提供多任务间通信的方法,其中()是任务间最直接、最明显的通信方法,也是访问共享的数据结构,即不同的任务都可以访问同一地址空间。()作为一种更高级的通信方式,能够在同一处理器的各个任务间传递任意长度(理论上只受物理内存和机器字长限制)的信息。(1)A. 共享内存 B. Socket C. 消息传递 D. 信号量(2)A. 共享内存 B. Socket C. 消息传递 D. 信号量【答案】A、C关于星型拓扑结构,下列说法正确的是(

数据知道的博客 1万+

含分布式光伏的IEEE 33节点配电网电压越限仿真分析

摘要 本文针对分布式光伏接入配电网引发的电压越限问题,基于IEEE 33节点系统开展仿真研究。首先分析了光伏出力的随机性和波动性特性,采用Beta分布和马尔可夫链方法建立光伏出力模型;其次在MATLAB/Simulink平台搭建完整测试系统,包含光伏模型、配电网线路模型和控制模块;最后通过多场景仿真定量分析了不同光伏渗透率和接入位置对节点电压的影响。结果表明:光伏渗透率提高会显著增加电压越限风险,特别是线路末端节点;光伏接入位置对电压分布具有决定性影响,馈线末端接入更易引发电压越限。研究为含高比例光伏的配电

huanghm88的专栏 319

数据结构—— 处理散列冲突的四种方法【开放定址法-再散列函数法-链地址法-公共溢出区法】

目录: 一:开放定址法 1.定义 2.要求 3.线性探测法 4.二次探测法 5.随机探测法 二:再散列函数法 1.散列函数 2.解释 3.优点弊端 A:优点 B:弊端 三:链地址法 1.定义 2.优点弊端 A:优点 B:弊端 四:公共溢出区法 一:开放定址法 1.定义 所谓的开放定址法就是一旦发生了冲突,就去寻找下一个空的散列地址 2.要...

刘鑫磊 1万+

BGP路由聚合:自动聚合和手动聚合

路由聚合是指将多条具体的路由合并为一条聚合路由,以减少路由表的条目数。这种技术通过只向对等体发送聚合后的路由,而不发送所有的具体路由,来减小路由表的规模。同时,被聚合的路由如果发生路由振荡,也不再对网络造成影响,从而提高了网络的稳定性。

网络技术联盟站 1219

算法与数据结构

一、树 ● 请你来说一说红黑树和AVL树的定义,特点,以及二者区别 参考回答: 平衡二叉树(AVL树): 平衡二叉树又称为AVL树,是一种特殊的二叉排序树。其左右子树都是平衡二叉树,且左右子树高度之差的绝对值不超过1。一句话表述为:以树中所有结点为根的树的左右子树高度之差的绝对值不超过1。将二叉树上结点的左子树深度减去右子树深度的值称为平衡因子BF,那么平衡二叉树上的所有结点的平衡因子只可...

Likes的博客 1023

基于咸鱼最新九宫格图标验证码的语义增强模型识别

本文探讨了破解复杂验证码的技术思路,重点分析了某平台的九宫格验证码应对策略。作者提出通过图像语义抽取和增强技术来扩充数据集:先采集少量真实样本,利用形态学操作进行前增强生成变形图像,再通过叠加背景噪声进行后增强。同时强调真实数据集的重要性,建议采用真实+生成数据的混合训练方法。实验表明该方法可使模型准确率达到95%以上,但作者特别声明本文仅供技术研究,严禁用于非法用途。

码王吴彦祖的博客 601

MFC 中实现 WebSocket 客户端以支持实时双向通信

3. **协议兼容**:若服务器使用 `wss://`(加密),需在 `lws_client_connect_info` 中配置 SSL 相关参数(`ssl_connection = LCCSCF_USE_SSL`)。- 编辑框(`m_editUrl`):输入 WebSocket 服务器地址(如 `ws://echo.websocket.events`)。2. 将编译后的库文件(`.lib`、`.dll`)和头文件路径添加到 MFC 项目中(项目属性 -> VC++ 目录)。// UI:服务器地址。

寒寒豆豆软件公司的博客 202

java 哈希冲突

问题一 : 什么是哈希冲突 通过哈希函数产生的哈希值是有限的,而数据可能比较多,导致经过哈希函数处理后仍然有不同的数据对应相同的哈希值。这时候就产生了哈希冲突。 问题二:怎么解决哈希冲突 开放地址法;再哈希法;链地址法(拉链法);公共溢出区法。 开放地址法:开放地址法处理冲突的基本原则就是出现冲突后按照一定算法查找一个空位置存放 ...

qq_51194826的博客 777

【100%通过率】华为OD机试真题2026双机位C卷 C语言 实现【加密算法】

【100%通过率】华为OD机试真题2026双机位C卷 Python&JS 实现【加密算法】有一种特殊的加密算法,明文为一段数字串,经过密码本查找转换,生成另一段密文数字串。规则如下

MISAYAONE的博客 646

【王道数据结构】【chapter7查找】【P309t9】

设计一个算法,从大到小输出二叉排序树中所有值不小于k的关键字。

芊樱烛渊的博客 584

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

【王道数据结构】【chapter7查找】【P285t6】

这题只能从左下角或者右上角的顶点开始查找,如果是左上角,它的右边和下面的点的值都比它大,我们并不知道往哪边走,右下角的点也一样。

芊樱烛渊的博客 475

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

C++数据结构考研chapter5树

只有度为0和度为2的结点位序为i的lchild、rchild、parent空第一个元素,这样下标与位置相同,便于存取每次创建的时候需要新创建结点,因为头结点在初始化的时候创建了,so直接赋值即可题目给。

straight_out的博客 2076

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Chapter 9-MaxHeap

Please indicate the source if you want to reprint: http://blog.youkuaiyun.com/gaoxiangnumber1. 优先队列(priority queue) 是0个或多个元素的集合,每个元素都有一个优先权或值,对优先队列执行的操作有 1) 查找;2) 插入一个新元素; 3) 删除。在最小优先队列( min priority queue

gaoxiangnumber1——Gao Xiang's Blog 425

国科大Python编程基础--Chapter06数据结构

国科大Python编程基础--数据结构Chapter06

weixin_41171614的博客 1300

国科大Python编程基础--Chapter07数据结构下

国科大Python编程基础--Chapter07数据结构下,数据结构

weixin_41171614的博客 1244

2_chapter9

9.1 Dictionaries List像筒装薯片,像书架 Dictionary像一个大包,什么都能往里面仍,需要lable 1.创建dictionary a=dict() 2. 用{ }创建dictionary 9.2 Counting with Dictionaries 1.利用dictionaries进行数数 2.检测某个key是否在dictionary里 除了一条一条检测,也可以...

aolikelili的博客 146

C++ Primer: Chapter 9 Sequential Container

【Code】C++ Primer: Chapter 9 Sequential Container

cjlcjlyoo的博客 256

CareerCup Chapter 9 Sorting and Searching

You are given two sorted arrays, A and B, and A has a large enough buffer at the end to hold B. Write a method to merge B into A in sorted order.

剑侠月影 1532

CleanCodeHandbook Chapter 9: Binary Search(48-50)

Binary Search 文章目录Binary Searchleetcode35. Search Insert Positionleetcode153. Find Minimum in Rotated Sorted Arrayleetcode154. Find Minimum in Rotated Sorted Array II leetcode35. Search Insert Positio...

东方电视台的博客 225

Chapter3——常用的排序和查找算法

一.排序 1.冒泡排序     对于冒泡排序的规范性定义可以参考维基百科:冒泡排序,下面冒泡排序的算法过程引自维基百科: 1.比较相邻的元素。如果第一个比第二个大,就交换他们两个。 2.对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。 3.针对所有的元素重复以上的步骤,除了最后一个。 4.持续每次对越来越少的元素

多反思,多回顾,要坚持。 617

《数据结构Chapter10·内部排序》

#include<stdio.h>#include<string.h>#include<stdlib.h>#define MAXSIZE 20typedef int Keytype;typedef struct{ Keytype key;// char *otherinfo;}Redtype;typedef struct{ Red...

a835421883的博客 135

15-721 Chapter9 数据压缩

15-721学习笔记

m0_63691156的博客 429
上一篇: 数据结构--Chapter8(外排序)
下一篇: 操作系统--计算机概述
Wang_AI
博客等级 码龄12年 988粉丝 162原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值