Java数据结构6(队列和二叉树初步)

java数据结构详解!就是这么简单!(栈、队列、二叉树、红黑树等) 目录1. 数据结构1.1 栈(stack)1.2. 队列(queue)1.3. 链表(Link)1.4. 散列表(Hash Table)1.5. 排序二叉树1.5.1. 插入操作1.5.2. 删除操作1.5.3. 查询操作1.6. 红黑树1.6.1. 红黑树的特性1.6.2. 左旋1.6.3. 右旋1.6.4. 添加1.6.5. 删除1.7. B-TREE1.8. 位图 1. 数据结构 1.1 栈(stack) 栈(stack)是限制插入和删除只能在一个位置上进行的表,该位置是表的末端,叫做栈顶 (top. 阅读详情

目录

1,队列的性质

2,循环队列

3,队列链式存储

4,树的性质

5,二叉树的遍历

6,代码实现

一,队列的性质

同样是线性表,队列有线性表的相关操作,不过不同的是队列的性质为先进先出,类似为排队一样

队列的主要方法如下

方法作用特点
offer(E e)入队(添加元素到队尾)成功返回 true,失败返回 false(不抛异常)
poll()出队(删除并返回队首元素)队列为空时返回null
peek()查看队首元素(不删除)队列为空时返回null
add(E e)入队失败时直接抛出异常
remove()出队

队列为空时直接抛出异常

     Queue<Integer> queue=new ArrayDeque<>();
        queue.offer(1);
        queue.offer(2);
        queue.offer(3);
        System.out.println(queue);
        queue.poll();
        System.out.println(queue);
        System.out.println(queue.peek());
        System.out.println(queue.isEmpty());

二,循环队列

因为队列顺序存储存在不足,当你出元素的时候是从头开始出,你的头就会顺着延续给下一个元素,头的指向就会不断往后走,所以你前面的位置就空出来了,会造成空间的浪费,所以我们可以使用循环的方式来实现空间的利用

类似这样的结构,当我们删除元素的时候,front往后走,rear也往后走,当我们加元素的时候,front和rear都往前走,当rear下下一个元素就是front的时候,我们就放满了,为什么这样就满了而不是放满呢,因为当放满的时候,rear就会和front重合,但是当一个元素没有的时候,rear和front也是重合的,就不太好区分,所以选择牺牲一个空间

在代码的实现中有几个注意的点(rear和front都是下标,capacity是总长度,比最多能放的元素多一)

1,队列满的条件是(rear+1)%capacity==front,也就是要rear的下一个元素是front,因为小%大=小,所以+1再%大就是rear+1,当这时候两者相等了,就可以说明满了

2,(rear+1)%capacity也是入队时的rear的循环语句

3,计算长度:在计算长度的时候会出现以下两种情况,第一种情况被分为了两部分,一个1和一个4,分别为rear+1(1)以及capacity-front(6-2),所以图一的个数为rear-front+capacity,图二就是rear-front(5-0),所以综合下来的公式就是(rear-front+capacity)%capacity

这样我们的代码就如下

public class CircleQueue {
    private int arr[];
    private int front;
    private int rear;
    private int capacity;
    public CircleQueue(int maxSize) {
        // maxSize为最多放的元素,预留一个空闲元素,所以+1
        capacity = maxSize + 1;
        arr = new int[capacity];
        front = 0;
        rear = 0;
    }
    public boolean isEmpty() {
        return front == rear;
    }
    public boolean isFull() {
        return (rear + 1) % capacity == front;
    }
    //入队,相当于offer
    public void enQueue(int val){
        if (isFull()){
            return;
        }
        arr[rear]=val;
        rear=(rear+1)%capacity;
    }
    //出队,相当于pop
    public void deQueue(){
        if (isEmpty()){
            throw new RuntimeException("队列为空");
        }
        front=(front+1)%capacity;
    }
    //拿头元素,相当于peek
    public int getFront(){
        if (isEmpty()){
            throw new RuntimeException("队列为空");
        }
        return arr[front];

    }
    //遍历
    public void showQueue(){
        if (isEmpty()) {
            System.out.println("队列为空");
            return;
        }
        // 从front开始遍历,遍历有效元素个数
        for (int i = front; i != rear; i = (i + 1) % capacity) {
            System.out.print(arr[i] + " ");
        }
        System.out.println();
    }

    public static void main(String[] args) {
        CircleQueue circleQueue=new CircleQueue(5);
        circleQueue.enQueue(1);
        circleQueue.enQueue(2);
        circleQueue.enQueue(3);
        circleQueue.enQueue(4);
        circleQueue.enQueue(5);
        circleQueue.showQueue();
        circleQueue.deQueue();
        circleQueue.showQueue();
        System.out.println(circleQueue.getFront());
    }
}

三,队列的链式存储

因为上面的方法会牺牲一个空间,并且规定了总空间,不够灵活,所以我们可以通过链式存储,也就是简单的单项链表,使用尾插法,并且删除时候是删除前面,以下是代码,和我前面一篇自己实现单项链表的文章内容差不多

public class Node {
    static class ListNode {
        public int val;
        public ListNode prev;
        public ListNode next;

        public ListNode(int val) {
            this.val = val;
        }
    }
    public ListNode first;
    public ListNode last;
    //入队
    public void offer(int val){
        ListNode listNode=new ListNode(val);
        if (first==null){
            first=last=listNode;
        }
        last.next=listNode;
        listNode.prev=last;
        last=listNode;
    }
    //获取头元素并且删除
    public int poll(){
        if (first==null){
            throw new RuntimeException("为空");
        }
        int val= first.val;
        if (first==last){
            first=null;
            last=null;
        }
        first=first.next;
        first.prev=null;
        return val;
    }
    //获取头元素
    public int peek(){
        if (first==null){
            throw new RuntimeException("为空");
        }
        return first.val;
    }

    public int size(){
        ListNode cur=first;
        int count=0;
        while (cur!=null){
            cur=cur.next;
            count++;
        }
        return count;
    }
    public boolean empty(){
        return first==null;
    }
    public void showQueue(Node node){
        ListNode cur=first;
        while (cur!=null){
            System.out.print(cur.val+" ");
            cur=cur.next;
        }
        System.out.println();
    }


    public static void main(String[] args) {
        Node node=new Node();
        node.offer(1);
        node.offer(2);
        node.offer(3);
        System.out.println(node.peek());
        node.showQueue(node);
        node.poll();
        node.showQueue(node);
    }
}

四,树的相关性质

(1)、树的定义

树(Tree) 是n(n≥0)个结点的有限集合,满足:

  1. 若 n=0:称为空树;
  2. 若 n>0:
    • 有且仅有一个根结点;
    • 其余结点可分为互不相交的有限集合,每个集合本身又是一棵树,称为根的子树。
  3. 特点:层次结构、一对多;区别于线性表(一对一)、图(多对多)

我们根据上图来引出相关定义

结点的度:一个结点含有子树的个数,如上图:A的度为3;

树的度:一棵树中节点度的最大值,如上图:树的度为3;

叶子结点或终端结点:度为0的结点称为叶结点;

双亲结点或父结点:若一个结点含有子结点,那么称为这个子结点的父结点;

根结点:没有父结点的结点,图中为A;

结点的层次:从根开始定义,根为第一层,根的子结点为第二层;

树的高度:树中结点的最大层次,图中为4;

非终端结点:度不为0的结点;

二叉树

(1)、基本定义特点

  1. 每个节点最多有两个子节点,分别叫左孩子、右孩子。
  2. 子节点有左右次序,不能随意互换,是有序树。
  3. 可以是空二叉树;单个节点也是二叉树。

(2)、特殊二叉树特点

  1. 满二叉树每层节点都满,所有叶子在最底层,非叶子都有左右两个孩子。

  2. 完全二叉树除最后一层外,其余层节点全满;最后一层节点靠左连续排列。

  • 叶子只出现在最下两层
  • 度为 1 的节点最多只有 1 个

(3)、二叉树的性质

1,二叉树的第i层上至多有2^(i-1)个结点

2,如果有k层,二叉树至多有2^k-1个结点

3,对于任何一颗二叉树,如果终端结点树4为n0,度为2的结点数为n2,则n0=n2+1

4,具有n个结点的完全二叉树的深度为【log2n】+1

5,如果有n个结点的完全二叉树,对任意结点i有:

(1)如果i=1,则结点i是二叉树的根;如果i>1,则其双亲结点为i/2

(2)如果2i>n,则结点i无左孩子,否则其左孩子结点为2i

(3)如果2i+1>n,则结点i无右孩子,否则其右孩子结点为2i+1

以这个完全二叉树为例(上图为完全二叉树)

(1)1是其根结点,当i=3>1的时候,其双亲结点为3/2=1

(2)当i=6的时候,没有左孩子,当i=5,2i=10不大于n,左孩子结点为10

(3)当i=5的时候,没有右孩子,当i=3的时候右孩子为7

(4)、二叉树相关练习

1.某⼆叉树共有 399 个结点,其中有 199 个度为 2 的结点,则该⼆叉树中的叶⼦结点数为( )

A 不存在这样的⼆叉树                  B 200              C 198              D 199

2.在具有 2n 个结点的完全⼆叉树中,叶⼦结点个数为( )

 A n                    B n+1                  C n-1               D n/2 

3.⼀个具有767个节点的完全⼆叉树,其叶⼦节点个数为()

 A 383                B 384                  C 385              D 386 

 4.⼀棵完全⼆叉树的节点数为531个,那么这棵树的⾼度为( )

 A 11                   B 10                    C 8                 D 12 

答案:  1.B  2.A  3.B  4.B

答:题1:根据性质3可知,n0=n2+1,所以叶子结点也就是n0,就等于200

题2:以上面图片的完全二叉树可以知道,当总结点数为偶数的时候,是有一个单独的左结点的,也就是有一个单独的度为1的结点,所以2n=1+n0+n2,然后又因为n0=n2+1,所以n0=n

题3:第3题也和第2题一样

题4:根据性质4可以计算出来,并且深度是要取大的

五,二叉树的遍历

(1)遍历方式:

二叉树的遍历主要是以前中后遍历(主要是看根的位置在哪)

前序遍历:根-->左-->右

中序遍历:左-->根-->右

后序遍历:左-->右-->根

在我们从根或者左右到达一个新的结点的时候,我们都要把它看成一个完整的二叉树来再看它的左右,就如同递归一样,我们还是以这一颗二叉树为例

前序遍历1 → 2 → 4 → 8 → 9 → 5 → 10 → 3 → 6 → 7

我们以前序遍历为例:先是根1,打印1,然后遍历1的左边,然后把左边看成新树,以此类推,打印2,打印4,打印8,然后就是4的右边,打印9,打印5,然后打印10,再到1的右边,打印3,打印6最后打印7

(2)例题:

设⼀课⼆叉树的中序遍历序列:badce,后序遍历序列:bdeca,则⼆叉树前序遍历序列为()

 A: adbce B: decab C: debac D: abcde

答:根据后序遍历的特点,可以知道根为a,所以再根据中序遍历根在中间的特点,所以b在a的左边,dce在a的右边,然后单独看后续遍历中的dec,可以知道,dec这颗完整的树中,c是根,d是左,e是右,最终会如下图

六,代码实现

我们先纯手搓一个二叉树,二叉树还是这个图中的,代码如下

public class BinaryTree {
    static class TreeNode{
        public int val;
        public TreeNode left;
        public TreeNode right;

        public TreeNode(int val) {
            this.val = val;
        }
    }
    public TreeNode CrateTree(){
        TreeNode treeNode1=new TreeNode(1);
        TreeNode treeNode2=new TreeNode(2);
        TreeNode treeNode3=new TreeNode(3);
        TreeNode treeNode4=new TreeNode(4);
        TreeNode treeNode5=new TreeNode(5);
        TreeNode treeNode6=new TreeNode(6);
        TreeNode treeNode7=new TreeNode(7);
        TreeNode treeNode8=new TreeNode(8);
        TreeNode treeNode9=new TreeNode(9);
        TreeNode treeNode10=new TreeNode(10);
        treeNode1.left=treeNode2;
        treeNode2.left=treeNode4;
        treeNode4.left=treeNode8;
        treeNode4.right=treeNode9;
        treeNode2.right=treeNode5;
        treeNode5.left=treeNode10;
        treeNode1.right=treeNode3;
        treeNode3.left=treeNode6;
        treeNode3.right=treeNode7;
        return treeNode1;
    }

然后我们通过递归来实现前中后序遍历

public void preorder(TreeNode root){
        if (root==null){
            return;
        }
        System.out.print(root.val+" ");
        preorder(root.left);
        preorder(root.right);
    }
    //中
    public void inorder(TreeNode root){
        if (root==null){
            return;
        }
        inorder(root.left);
        System.out.print(root+" ");
        inorder(root.right);
    }
    public void postorder(TreeNode root){
        if (root==null){
            return;
        }
        postorder(root.left);
        postorder(root.right);
        System.out.print(root+" ");
    }
public class Test {
    public static void main(String[] args) {
        BinaryTree binaryTree=new BinaryTree();
        BinaryTree.TreeNode ROOT=binaryTree.CrateTree();
        binaryTree.preorder(ROOT);
    }
}

Java 数据结构数组双向链表队列平衡二叉树二叉树 B树和B+树定义、特性优缺点【包含示咧】 AVL树是一种自平衡的二叉搜索树,其中任何节点的两个子树的高度差(即平衡因子)最多为1。这种特性确保了AVL树的高度始终保持在O(log n)范围内,因此查找、插入和删除操作的时间复杂度都是O(log n)。 阅读详情

相关推荐

字节跳动程序媛教你如何刷算法题:面试手撕代码我就没怕过

本人上一次刷题还是大一的C语言期末考试……但是面试中算法考核截止上岸前一直保持着100%正确率的光辉记录。 本文将给你指明一条刷题的决胜指南。并从算法的重要性、题库的选择以及刷题的三大步骤分别进行讲解,彻底解决你所有关于面试算法所有的困扰。

Stay Hungry Stay Foolish 求知若饥 虚心若愚 2万+

【算法与数据结构】链表、哈希表、栈和队列、二叉树

数据结构是组织和存储数据的方式,它定义了数据元素之间的关系和操作。数据结构可以分为线性结构(如数组、链表、队列、栈等)和非线性结构(如树、图、哈希表等),不同的数据结构适用于不同的应用场景,能够提供高效的数据操作方法。

杨荧的优快云博客 1842

Log4Shell漏洞复现:从原理到实战的完整指南

日志记录是软件开发中用于追踪应用状态和排查问题的关键技术。然而,当日志组件对用户输入进行不当解析时,可能引发严重的安全风险。Log4j2作为Java生态中广泛使用的日志框架,其Lookup功能允许在日志中动态插入变量,这一设计初衷虽为便利,却因递归解析机制埋下了隐患。攻击者通过构造特定的JNDI(Java命名和目录接口)查询字符串,可诱使应用加载并执行远程恶意代码,从而实现远程命令执行。这种漏洞的价值在于其极低的利用门槛和极高的潜在危害,常被用于渗透测试和安全评估中,以验证系统的防御能力。本文以CVE-20

weixin_30496999的博客 277

Java 队列、二叉树和Map基础

Java 队列队列 队列

weixin_44191224的博客 388

UE5 使用Slate制作对话窗口

使用Slate制作对话框窗口并获取对话框结果,非UMG

qq_25521145的博客 3189

UR5双臂Gazebo仿真(Python)

近来在Gazebo上搭了一个ur5双臂仿真平台。 差不多就是以下这样。 使用rostopic list查看一下话题,如下 显然,采用/left_arm_controller/follow_joint_trajectory/goal和/right_arm_controller/follow_joint_trajectory/goal两个话题来控制双臂的运动。 现在的问题是,如何保证双臂运动的一致性,即如何能保证双臂能同时接受到以上两个消息。 思路一:设置/left_arm_controlle

qq_42823342的博客 2233

数据结构、栈和队列、树和二叉树

1.递归recursion 核心:自己调自己 注意:有一个出口,不停地向出口靠近 2.二分查找 首先,查找表必须使用顺序存储结构; 其次,查找表必须按关键字大小有序排列。 思路:起始下标 终点下标 中间下标 3.数据结构 概念: 数据结构=逻辑结构+存储结构+(在存储结构上的)运算/操作 线性结构:"一对一" 树状结构:“一对多” 网状结构:“多对多” 储存结构: 顺序结构:把逻辑上相邻的节点存储在物理位置上相邻的存储单元中,结点之间的逻辑关系由存储单元的邻接关系来体现。 链式

weixin_45290168的博客 1253

嵌入式开发必备:手把手教你用DB-9连接器搞定RS-232串口通信(附万用表测试技巧)

本文详细解析了嵌入式开发中RS-232串口通信的硬件连接核心。从DB-9连接器的引脚定义入手,深入讲解DTE与DCE设备角色,明确直连线与交叉线的选择法则,并重点分享了使用万用表进行线缆连通性测试、电压测量及故障诊断的实战技巧,帮助开发者彻底掌握串口通信的硬件连接与排查方法。

tgb345678的博客 1167

Day17_集合与数据结构(链表,栈和队列,Map,Collections工具类,二叉树,哈希表)

数据结构就是研究数据的逻辑结构和物理结构以及它们之间相互关系,并对这种结构定义相应的运算,而且确保经过这些运算后所得到的新结构仍然是原来的结构类型。(1)数据的逻辑结构指反映数据元素之间的逻辑关系,而与他们在计算机中的存储位置无关:(2)数据的物理结构/存储结构:是描述数据具体在内存中的存储(如:数组结构、链式结构、索引结构、哈希结构)等,一种数据逻辑结构可表示成一种或多种物理存储结构。数据结构和算法是一门完整并且复杂的课程。Java的核心类库中提供很多数据结构对应的集合类型,例如动态数组、双向链表、顺序栈

小丁的博客 1698

ADS 2023 实战:手把手教你仿真一个中心频率 2.4GHz 的带通滤波器(附工程文件)

本文详细介绍了使用ADS 2023软件设计和仿真中心频率2.4GHz带通滤波器的全流程,包括工程准备、指标定义、原理图设计、仿真优化及实际电路实现。通过切比雪夫滤波器拓扑和参数优化,实现高性能的带通滤波器设计,适用于无线通信系统。附有工程文件和常见问题解决方案,助力工程师快速掌握射频滤波器设计技巧。

weixin_30790841的博客 482

N32在Keil中J-Link识别失败的排查与修复指南

本文详细解析了在Keil开发环境中,J-Link调试器无法识别N32系列MCU的常见问题。通过分步指导,从检查修改Keil工程配置文件、更新J-Link驱动,到手动添加N32专用设备支持包,系统性地提供了排查与修复方案,帮助开发者快速恢复调试连接,确保开发流程顺畅。

304

JAVA数据结构 DAY6-栈和队列

本文是Java数据结构学习笔记系列,重点讲解栈和队列两种基础数据结构。文章详细介绍了栈(LIFO)和队列(FIFO)的概念、核心方法、模拟实现(数组/链表)及典型应用场景。特别对循环队列和双端队列(Deque)进行了深入解析,并提供了LeetCode高频面试题的解题思路。通过代码示例和详细注释,帮助读者深入理解数据结构原理,掌握从理论到实践的完整知识体系。文章还区分了易混淆概念,适合Java初学者和面试准备者系统学习数据结构基础知识。

HRDMN的博客 905

echarts 饼图(加载进度条动画效果)

1、外侧动画细线效果运动“custom”自定义系列中“renderItem”属性来实现,动态修改起始角度和终止角度。2、圆环使用" pie "类型添加两个data值来画百分比圆环,动态修改data中的值。

God's asylum的博客 1633

Java中链表、堆栈、队列、二叉树、散列表等数据结构的实现

温习数据结构:Java中链表、堆栈、队列、二叉树、散列表等数据结构的实现 1.Java链表类List的源代码如下: import java.io.*;  public class List  {   /*用变量来实现表头*/   private Node Head=null;   private Node Tail=null;   private Node Pointer=

adxcq的专栏 2827

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

android 蓝牙通讯demo

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

【算法与数据结构】链表、哈希表、栈和队列、二叉树(笔记二)

结点拥有的子树个数称为结点的度,比如下图中结点3和结点4的度分别为3和2。对于树而言,树的度是结点最大的度,下面这棵树的度为4(结点1的度)。二叉树是指树的度最大为2的树。满二叉树:如果一棵树只有度为0和度为2的节点,并且度为0的节点在同一层上,则这棵二叉树为满二叉树。如下图所示,这是一棵满二叉树。这棵二叉树为满二叉树,也可以说深度为k,有2^k-1个节点的二叉树。完全二叉树:在完全二叉树中,除了最底层节点可能没有填满以外,其余每层节点数量都达到最大值,并且最下面一层节点都集中在该层的最左边若干位置。

晚安的博客 1847

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Java数据结构——二叉树

到此已经介绍了二叉树的基本内容和基本操作,除了这些还有其它的二叉树和其它操作,将在以后介绍。

2301_80817503的博客 1040

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Java数据结构(二叉树)

二叉树(Binary Tree) 是一种非线性的数据结构,由节点组成,每个节点最多有两个子节点,通常称为左子节点和右子节点。二叉树可以为空(没有节点),也可以是一个根节点加上两个互不相交的左子树和右子树。如图所示:满二叉树和完全二叉树是两种特殊的二叉树结构。满二叉树:所有层都填满节点的二叉树,即每个节点要么是叶子节点,要么有两个子节点。完全二叉树:除了最后一层外,其他所有层都被完全填满,并且最后一层的节点全部靠左排列。

2301_79482961的博客 1004

二叉树的层序遍历(Java实现)借助队列实现

二叉树的层序遍历算法(JAVA语言实现)为什么要用队列而不用其他数据结构辅助存储呢?

YiyeLbj的博客 3594

手写java数据结构之栈、队列和二叉树的前序中序后序遍历

栈 public class MyStack { private long arr[]; private int top; public long arrQueue[]; public MyStack() { arr=new long[10]; arrQueue=new long[10]; top=-1; } public MyStack(int maxsize) { ...

qq_42914703的博客 232

Java常见的数据结构:栈、队列、数组、链表、二叉树、二叉查找树、平衡二叉树、红黑树

红黑树是一种自平衡的二叉查找树,是计算机科学中用到的一种数据结构。1972年出现,当时被称为平衡二叉B树。1978年被修改尾如今的红黑树;每个节点都可以是红或者黑;红黑树不是通过高度平衡的,它的平衡是通过“红黑规则”进行实现。每一个节点或是红色的,或者是黑色的,根节点必须是黑色。如果某一个节点是红色,那么它的子节点必须是黑色(不能出现两个红色节点相连的情况)。对每一个节点,从该节点到其所有后代叶节点的简单路径上,均包含相同数目的黑色节点。添加的节点的颜色,可以说红色的,也可以是黑色的。

weixin_58618735的博客 1201

DS_01_栈、队列、二叉树、堆、Map和Set

栈、队列、二叉树、堆、Map和Set

Abyss_Praise的博客 1417

java数据结构_优先级队列(堆)_6.1

队列是一种先进先出(FIFO)的数据结构,但某些情况下,,那这种情况,再用普通的队列结构,就不合适了。在这种情况下:数据结构应该提供两个最基本的操作,,这种数据结构就是。

Zz_waiting的博客 1217

java数据结构和他们的API

数据结构(java篇): 内容要求:这一部分需要自己先去学习一遍数据结构,然后自己写出来。掌握之后,再去查看api文档,最后学会如何使用api里的数据结构写算法。下面介绍的主要是每个数据结构与api的对应方式。此文为初级算法总结的子篇第三章——数据结构。 1、基础数组、线性表: (1)数组: Java数组的定义:int[] arr = new int[n]; ...

likunkun__的博客 1748

Java笔记(数据结构与算法[树、栈、列表、队列、数组])

Java笔记(数据结构与算法[树、栈、列表、队列、数组])

LLM | Agent | RAG | Java 2741

Java数据结构——优先队列

到这就是优先队列的基本内容了,此外,使用优先队列可以对数据进行堆排序,将在后面讲述。

2301_80817503的博客 1263

「数据结构详解·十」双端队列 & 单调队列的初步

双端队列详解 & 单调队列的初步详解

Leo_Chenjy的博客 715
上一篇: Java数据结构5(栈)
下一篇: Java数据结构7(优先级队列)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值