2.10.循环链表

C语言中单向循环链表与双向循环链表详解 每日一句 It’s gonna be ok. 一切都会好的。 内容概要 单向循环链表 首先来看看图示: 图展示的是一个单向循环链表,他跟以上的单向链表对比只是多了一个指向头结点的 指针,因此,他们的算法几乎是一样的。 第一,设计节点。 单向循环链表的节点跟单向链表完全一致。 第二,初始化空链表。 跟单向链表类似,我们既可以初始化一个带有头结点的空循环链表,也可以不要头结点: 这边把两个步骤放在一起了 linklist init_list(void) // 带有头结点的单循环链表 { linklis 阅读详情


一.循环单链表:

1.图示:

2.代码说明:

  • 初始化循环单链表时头结点的next指针必须指向头结点

  • 判断循环单链表是否为空只需要判断头结点的next指针是否指向头结点?是:循环单链表为空;否:循环单链表不为空

  • 判断某个结点是否为循环单链表的表尾结点,只需要判断该结点的next指针是否指向该循环单链表的头结点即可

  • 如果循环单链表不为空的话,就需要把表尾结点的next指针指向头结点

3.代码演示:

#include<stdio.h>
#include<stdlib.h>
​
typedef struct LNode
{
    int data; //这个数据的类型不是固定的
    struct LNode *next; 
}LNode,*LinkList;
​
//初始化一个循环单链表
bool InitList(LinkList &L) //函数的结果和函数体的结果最终都要用,所以加& 
{
    L = (LNode *)malloc( sizeof(LNode) ); //分配一个头结点
    if(L==NULL)
    {
        return false; //内存不足,分配失败 
    } 
    L->next = L; //头结点的next指针必须指向L即头结点指向头结点(L代表头结点) 
    return true;
} 
​
//判断循环单链表是否为空
bool Empty(LinkList L)
{
    if(L->next = L) return true; //头结点指向头结点说明为空
    else return false; 
} 
​
//判断结点p是否为循环单链表的表尾结点
bool isTail(LinkList L,LNode *p)
{
    //L代表头结点 
    if(p->next = L) //p结点的next指针指回头结点就说明p为表尾结点 
    {
        return true;
    }
    else
    {
        return false;
    }
} 
​
int main()
{
    return 0;
}

4.循环单链表与非循环单链表的对比:

5.基础操作:

循环单链表和非循环单链表找到尾结点的时间复杂度都是O(n),因为要从头循环遍历到尾;

循环单链表从尾部找到头部的时间复杂度为O(1),因为尾部下一个就是头部->如果经常操作表头和表尾的话,可以让循环单链表的指针指向表尾结点,此时如果在表尾插入或删除结点时可能需要修改该指针;


二.循环双链表:

1.图示:

2.代码说明:

3.代码演示:

#include<stdio.h>
#include<stdlib.h>
​
typedef struct DNode
{
    int data;
    struct DNode *prior,*next; //*prior为前驱指针,*next为后继指针 
}DNode,*DLinklist;
​
​
//初始化空的循环单链表
bool InitDLinkList(DLinklist &L)
{
    L = (DNode *)malloc( sizeof(DNode) ); //分配一个头结点
    if(L==NULL) return false; //内存不足,分配失败
    L->prior = L; //头结点的前驱指针prior指向头结点
    L->next = L; //头结点的后继指针next指向头结点
    return true; 
} 
​
//判断循环双链表是否为空
bool Empty(DLinklist L)
{
    if(L->next = L)
    {
        return true; //循环双链表的头结点的next指针指向头结点就说明循环双链表为空 
    }
    else
    {
        return false;
    }
} 
​
//判断结点p是否为循环双链表的表尾结点
bool isTail(DLinklist L,DNode *p)
{
    if(p->next == L) //结点p的next指针指向头结点就说明p为尾结点 
    {
        return true;
    } 
    else
    {
        return false;
    }
} 
​
​
int main()
{
    return 0;
}

4.循环双链表的插入:

5.循环双链表的删除:


三.总结:

1.对于普通带头结点的双链表而言,只有头结点时,它的后继指针和前驱指针都指向NULL;

2.知道表为空时的状态就可以知道如何初始化;

3.知道如何判断某个结点是否是表头/尾结点时,就可以知道如何前向遍历和后向遍历;

4.注:所有链表都不具有随机访问的特性,因此找某个结点时只能通过循环查找,循环要么停在表头结点,要么停在表尾结点。


数据结构——单向循环链表、双链表、双向循环链表 m,数到m的人出圈,然后从出圈的下一个人(m+1)开始重复此过程,直到 全部人出圈,于是得到一个出圈人员的新序列。如当n=8,m=4时,若从第一个位置数起,则所得到的新的序列 为4, 8, 5, 2, 1, 3, 7, 6。指针域:存储节点之间的关系,下一个节点的地址,单向循环链表的指针域指向该节点的地址。双向循环链表:尾节点的下一个节点是头节点,头节点的上一个节点是尾节点。1.单向循环链表:尾节点的指针域指向头结点的地址。2.单向循环链表的节点:数据域和指针域。3.双向链表节点的结构体定义。 阅读详情

相关推荐

数据结构— 循环链表、双向链表【插入&删除】、双向循环链表

循环链表也称为环形链表,其结构与单链表相似,只是将单链表的首尾相连。将最后一个结点的后继指针指向第一个结点。

四季轮换叶,一路招摇胜 6462

从零开始学数据结构系列之第一章《单链表循环》

循环单链表是单链表的另一种形式,其结构特点链表中最后一个结点的指针域不再是结束标记,而是指向整个链表的第一个结点,从而使链表形成一个环。​   1、从一个结点出发,无论这个结点位于链表的哪里,都可以找到其他任何一个结点,而单链表不行。​   2、在一些情况下,我们需要频繁对链表的头部和尾部进行操作,此时使用循环单链表就很有用,原因是对于单链表,已知头结点,想找到最后一个结点的话,时间复杂度是O(n);

铁匠匠匠的博客 1621

SAP BSP网页开发入门:从SE80创建到MVC实战(附成品展示)

本文详细介绍了SAP BSP网页开发的入门与实战,从SE80环境搭建到MVC架构实现的全流程。通过具体案例和代码示例,帮助开发者掌握业务服务器页面(BSP)技术,提升SAP Web化转型中的开发效率,适用于需要扩展SAP功能的企业场景。

x1y2z的博客 1万+

双向循环链表(10.2)

1.理论 2.C代码

Do one thing at a time, and do well. 608

工业组态软件Intouch(单机版)入门{第一篇}

通俗来讲Intouch就是一个能将PLC里的信号显示在画面上的软件。

weixin_41571357的博客 1万+

分离与合体题解(区间DP)

题目: 经过在机房里数日的切磁,LYD从社神牛那里学会了分离与合体,出关前,杜神牛给了他一个测试 杜神牛造了个区域,它们紧邻着排成了一行,编号1-n。在这經个区域里都放着一把OI界 的金钥匙,每一把都有一定的价值,LYD当然想得到它们了。然而杜神牛规定LYD不可以一下子 把它们全部拿走,而是每次只可以拿一把。为了尽快地拿到所有的金钥匙,LYD自然就用上了刚学的分离与合体特技。 开始LYD可以选择从1~n-11~n-11~n-1的任何一个区域(记为K)进入,进入后LYD会在K区域发 生分离,从而分离为两个小L

cqbz_lipengcheng的博客 370

10.2-5 带哨兵的单向循环链表

//带哨兵的单向循环链表。NIL的next是头结点,尾结点的next是NIL #include #include typedef struct NODE{ char key;struct NODE* next; }NODE; NODE *NIL=NULL; void insert(NODE* p) {//插入到头结点 p->next=NIL->next; NIL->next

yuanjianchuan的专栏 588

解决Keil uVision许可证管理中Unknown Product错误

嵌入式开发中,IDE工具的许可证管理是确保开发环境正常运行的关键环节。Keil uVision作为ARM架构的主流开发工具,其许可证系统采用加密验证机制,通过产品版本识别实现授权控制。当出现Unknown Product错误时,通常源于版本兼容性问题或区域发行版差异,这直接影响开发工具链的可用性。特别是在维护历史项目或使用中国特供版时,开发者常会遇到此类问题。通过分析许可证类型、调整安装配置或建立虚拟化开发环境等工程实践方案,可以有效解决这类授权验证故障,保障嵌入式项目的持续集成与交付效率。

weixin_33743248的博客 363

算法导论10.2-5循环链表实现

循环链表插入,删除和查找的初步实现,但是感觉写的漏洞非常多,再研究研究 #include&lt;iostream&gt; using namespace std; struct my_list { my_list *pre,*next; int key; }; my_list* Init_list() { my_list *list = new my_list();...

weixin_34411563的博客 146

HWSD全球土壤数据下载、处理与提取完整指南

全球尺度的科学研究与工程项目中,土壤数据是必不可少的基础底图,而HWSD(和谐世界土壤数据库)凭借其统一的分辨率与属性标准,成为农业区划、生态模型、土地利用变化和水资源评估等领域的通用数据源。深入理解其“栅格存编号、数据库存属性”的核心原理,是高效使用这套数据的关键。通过掌握MDB数据库结构、属性字段含义以及栅格与属性表的关联方法,研究者可以将原始数据转化为可用的研究底图。无论你是需要提取特定区域的土壤属性,还是进行面积统计与点位采样,合理的处理流程都能显著提升工作效率。本文从下载注册开始,一步步梳理数据清

weixin_29056781的博客 313

iPhone用户必看:TrollStore巨魔商店在线安装保姆级教程(iOS 14-16.6.1适用)

本文为iOS 14至16.6.1系统的iPhone用户提供了一份详细的TrollStore(巨魔商店)在线安装教程。文章从核心原理、安装前准备讲起,逐步详解了通过Safari浏览器获取安装器、信任企业证书、部署TrollStore及关键后置配置的全过程,并附带了常见问题排错指南,帮助用户安全、高效地实现无需越狱安装第三方应用。

h0i1j2k3l的博客 1991

使用单项循环链表实现字典操作(算法导论第十章10.2-5题)

使用单项循环链表实现字典操作(算法导论第十章10.2-5题) template<typename T> class SingleCycleL { public: HalfNode<T> *Nil; public: SingleCycleL(){ Nil = new HalfNode<T>(); Nil->next = Nil; } virtual ~SingleCycleL() {

外太空的博客 146

语音信号的AGC自适应增益调整matlab仿真

语音信号的自动增益控制(Automatic Gain Control,AGC)是音频处理领域中的一项重要技术。其核心功能是实时调整输入信号的幅度,使其保持在一定范围内,以优化输出信号的质量。AGC广泛应用于语音通信、语音识别、音频录制和播放等领域,旨在解决输入信号幅度波动问题,确保输出信号的稳定性和清晰度。一、AGC的基本原理1.1 幅度调整自动增益控制的基本原理是根据输入信号的幅度动态地调整系统的增益。

平时工作较为繁忙,私信消息一般晚上回复,谢谢大家~~ 921

2-10 J. DS循环链表—约瑟夫环(Ver. I - A)

DS循环链表—约瑟夫环(Ver. I - A) N个人坐成一个圆环(编号为1 - N),从第S个人开始报数,数到K的人出列,后面的人重新从1开始报数。问最后剩下的人的编号。 例如:N = 3,K = 2,S = 1。2号先出列,然后是1号,最后剩下的是3号。 要求使用循环链表实现。

2301_79713191的博客 609

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

算法导论10.2-5 使用单向循环链表实现字典操作 INSERT、DELETE 和 SEARCH

[cpp] view plain copy #ifndef _SINGLY_CIRCULAR_LINKED_LIST_H   #define _SINGLY_CIRCULAR_LINKED_LIST_H      /*******************

Lukelluke的博客 889

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

10.数据结构——单向循环链表的实现(笔记)

单向循环链表        单链表的一个变形是单向循环链表,链表中最后一个节点的next域不再为None,而是指向链表的头节点。 实现以下操作: 代码: class Node(object): """节点""" def __init__(self, item): self.item = item self.next = None class SinCycLinkedlist(obje

枫城雪-----学习空间 544

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

数据结构之循环链表与双向链表

0、目录 双向链表 定义

qq_41278826的博客 620

【循环链表】数据结构——单向循环链表和双向循环链表操作&笔记

一、单向循环链表 将单链表的首尾节点相连就形成了单向循环链表。 1、单向循环链表的节点 2、单向循环链表的结构 单向循环链表只有一个节点时: 二、双向循环链表 1、双向循环链表示意图 2、双向循环链表节点设计 struct d_node{ int data; //数据域 struct d_node *next; struct d_node *prev; }; 3、双向循环链表的一般性结构 1)只有头结点的情况 2)有多个节点的情况 4、双向循环链表头插法插入节点 步骤: 1)p-&

皮皮不调皮的博客 9601

循环链表 猴子选大王

/* 循环链表 猴子选大王 */ #include #include typedef struct monkey { int num; struct monkey * next; } monkey_t; //head指向第一个节点,tail指向最后一个节点 monkey_t *head = NULL, *tail = NULL; void create(in

宁静致远 8121

约瑟夫环(循环链表解法)

约瑟夫环的问题大家不陌生了吧,在n个人中循环喊口号1~m,喊到m的退出,求退出次序。 首先,循环链表的类可以这么实现(已略去与本题不相关的成员函数): 如需查看完整循环链表类实现,请参考我的GitHub:循环链表完整类 //所有下标均从1开始计数 template<class T> class CircleList { protected: int n; node&lt...

Andy 1715

带头结点的双向循环链表

/存放后面结点的指针//存放前面结点的指针}ListNode;

加油!!! 2296

拿捏循环链表

其实地上本没有路,走的人多了也便成了路!

X_do_myself的博客 1656

循环链表的创建

循环链表的创建以及基本操作 上篇我们讲了运用头插法和尾插法创建单链表的方法,和两种方法的比较。 接着我们学习循环链表的创建。 只要学会了单链表的创建,循环链表的创建就变得很简单。 循环链表创建 单链表的结构: 循环链表: 所谓循环链表,就是将单链表的尾结点 end 的指针域 也就是 end->next 指向头结点的地址 : end->next = head 。 这样就完成了循环链表的创建。 这就完了? 当然没有那么简单了~~~ 循环链表不同于单链表,原因在于上篇我们讲单链表的时候,尾结点指针域

lhh_qrsly的博客 5068

数据结构——循环链表

循环链表的简单操作

zhang_ysx的博客 5805

C 循环链表

循环链表的定义:将单链表中最后一个数据元素的next指针指向第一个元素   在循环链表中可以定义一个“当前”指针,这个指针通常称为游标,可以通过这个游标来遍历链表中的所有元素。   1) 普通插入元素(和单链表是一样的) 2) 尾插法(和单链表是一样的,单链表的写法支持尾插法; 因:辅助指针向后跳length次,指向最后面那个元素)   Ci...

weixin_33693070的博客 129
上一篇: 1.21.MySQL-多表查询-概述&内连接&外连接&子查询
下一篇: 2.11.静态链表
巧克力拌面
博客等级 码龄3年 1153粉丝 282原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值