数据结构(一)线性结构(4)队列

数据结构——线性结构总结 数据结构——线性结构总结 数据结构——线性结构总结 写在前面 线性结构的特点 线性表 栈 队列 相关的Standard Template Library(STL)容器 list vector stack queue deque 习题 reference 写在前面 数据元素的存储(顺序存储和链式存储)和数据元素的操作(插入和删除)是数据结构的重要部分。 数据结构中的... 阅读详情

队列的读写顺序为先入先出,根据结构可以分为单向队列、双向队列、循环队列、双向循环队列等

这里以循环的顺序队列和单向链队列为例:

循环的顺序队列定义:

typedef struct QUEUE {
    int iData[ARRAY_SIZE];
    int iFront;
    int iRear;
}T_Queue, *PT_Queue;

iData是数据域

iFront、iRear是首尾标志变量,作为指针域

 

单向链队列定义:

typedef struct NODE {
    int iData;
    struct NODE *ptNext;
}T_Node, *PT_Node;

队列节点同链表节点定义

typedef struct QUEUE {
    PT_Node ptFront;
    PT_Node ptRear;
}T_Queue, *PT_Queue;

队列结构包含一个头指针、一个尾指针

 

队列的主要操作有:

1、判空 / 判满:int isEmpty(PT_Queue ptQueue); / int isFull(PT_Queue ptQueue);

对于循环的顺序队列,为了区分判空和判满,要么另设一个标志位,要么在数据域空出一个位置(这样队满时尾指针总在头指针的前一个位置),这里采用第二种方法,因此,判空条件为首尾指针相同,判满条件为 (iRear + 1) % ARRAY_SIZE == iFront,

对于单向链队列,判空条件为头指针与尾指针指向头节点(标志作用,不是数据节点),判满条件为空间不足
2、创建空队列:PT_Queue createQueue(void);

对于循环的顺序队列,创建空队列就是分配一块数据域和头尾指针

对于单向链队列,创建空队列只需分配一个头节点(指针域为NULL)和头尾指针,并让头尾指针指向头节点即可

3、入队:int queue(int iEle, PT_Queue ptQueue);

对于循环的顺序队列,入队时先判满,不满则尾指针加1并对ARRAY_SIZE求余,写入数据

对于单向链队列,入队时创建一个新节点,创建成功则修改数据域,并将新节点作为第一个数据节点插入链表
4、出队:int dequeue(PT_Queue ptQueue);

对于循环的顺序队列,出队时先判空,不空则头指针加1并对ARRAY_SIZE求余,读出数据

对于单向链队列,出队时先判空,不空则读出第一个数据节点的数据域,头指针指向第二个数据节点,并将第一个数据节点删除,若删除后队列为空,需要将尾指针也指向头节点(标志作用)

 

 

循环的顺序队列代码:

#include <stdio.h>
#include <stdlib.h>

#define MENU_EXIT		0
#define MENU_QUEUE		1
#define MENU_DEQUEUE	2
#define MENU_PRINT		3


#define ERR			-100


typedef struct QUEUE {
	int iData[ARRAY_SIZE];
	int iFront;
	int iRear;
}T_Queue, *PT_Queue;


int isEmpty(PT_Queue ptQueue)
{
	return (ptQueue->iFront == ptQueue->iRear) ? 1 : 0 ;
}

int isFull(PT_Queue ptQueue)
{
	return ((ptQueue->iRear + 1) % ARRAY_SIZE == ptQueue->iFront) ? 1 : 0 ;
}

void printQueue(PT_Queue ptQueue)
{
	int i = ptQueue->iFront;

	if (isEmpty(ptQueue))
	{
		printf("Queue is empty\r\n");
		return;
	}

	printf("\r\n\r\n"
			"Queue: ");
	while ( i != ptQueue->iRear)
	{
		i = (i + 1) % ARRAY_SIZE;
		printf("%d ", ptQueue->iData[i]);
	}
	printf("\r\n\r\n");

}

int queue(int iEle, PT_Queue ptQueue)
{
	if (isFull(ptQueue))
	{
		printf("Queue is full\r\n");
		return ERR;
	}

	ptQueue->iRear = (ptQueue->iRear + 1) % ARRAY_SIZE;
	ptQueue->iData[ptQueue->iRear] = iEle;
	//printf("Queue: %d\r\n", ptQueue->iData[ptQueue->iRear]);

	return iEle;
}

int dequeue(PT_Queue ptQueue)
{
	if (isEmpty(ptQueue))
	{
		printf("Queue is empty\r\n");
		return ERR;
	}

	ptQueue->iFront = (ptQueue->iFront + 1) % ARRAY_SIZE;
	//printf("Dequeue: %d\r\n", ptQueue->iData[ptQueue->iFront]);

	return ptQueue->iData[ptQueue->iFront];
}

PT_Queue createQueue(void)
{
	int iNum, i, iEle;
	PT_Queue ptQueue = NULL;

	printf("Enter num of data: ");
	scanf_s("%d", &iNum);
	if (iNum > ARRAY_SIZE - 1 || iNum < 0)
		goto done;

	ptQueue = (PT_Queue)malloc(sizeof T_Queue);
	ptQueue->iFront = ptQueue->iRear = 0;

	printf("Enter your data: ");
	for (i = 0; i < iNum; i++)
	{
		scanf_s("%d", &iEle);
		queue(iEle, ptQueue);
	}

done:
	return ptQueue;
}


int menu(PT_Queue ptQueue)
{
	int iNum, iEle;

	printf("0 to exit\r\n"
		"1 to queue\r\n"
		"2 to dequeue\r\n"
		"3 to print\r\n");

	scanf_s("%d", &iNum);
	switch (iNum)
	{
		case MENU_EXIT:
			return -1;
		case MENU_QUEUE:
			printf("Enter the one to be push\r\n");
			scanf_s("%d", &iEle);
			queue(iEle, ptQueue);
			break;
		case MENU_DEQUEUE:
			dequeue(ptQueue);
			break;
		case MENU_PRINT:
			printQueue(ptQueue);
			break;
	}

	return 0;
}


int main(void)
{
	PT_Queue ptQueue;

	ptQueue = createQueue();
	if (!ptQueue)
		return -1;

	while (1)
	{
		if (menu(ptQueue) == -1)
			break;
	}

	return 0;
}


 

 

 

单向链队列代码:

#include <stdio.h>
#include <stdlib.h>

#define MENU_EXIT		0
#define MENU_QUEUE		1
#define MENU_DEQUEUE	2
#define MENU_PRINT		3


#define ERR			-100


typedef struct NODE {
	int iData;
	struct NODE *ptNext;
}T_Node, *PT_Node;

typedef struct QUEUE {
	PT_Node ptFront;
	PT_Node ptRear;
}T_Queue, *PT_Queue;

int isEmpty(PT_Queue ptQueue)
{
	return (ptQueue->ptRear == ptQueue->ptFront) ? 1 : 0;
}

void printQueue(PT_Queue ptQueue)
{
	PT_Node ptTmp;

	if (isEmpty(ptQueue))
	{
		printf("Queue is empty\r\n");
		return;
	}

	printf("\r\n\r\n"
		"Queue: ");
	ptTmp = ptQueue->ptFront;
	while (ptTmp->ptNext && ptTmp != ptQueue->ptRear)
	{
		ptTmp = ptTmp->ptNext;
		printf("%d ", ptTmp->iData);
	}
	printf("\r\n\r\n");

}

int queue(int iEle, PT_Queue ptQueue)
{
	PT_Node ptNew;

	ptNew = (PT_Node)malloc(sizeof T_Node);
	if (!ptNew)
	{
		printf("Err in memory\r\n");
		return ERR;
	}
	ptNew->iData = iEle;
	ptNew->ptNext = NULL;
	ptQueue->ptRear->ptNext = ptNew;
	ptQueue->ptRear = ptNew;
	//printf("Queue: %d\r\n", ptQueue->iData[ptQueue->iRear]);

	return iEle;
}

int dequeue(PT_Queue ptQueue)
{
	PT_Node ptOld, ptTmp;
	int iEle;

	if (isEmpty(ptQueue))
	{
		printf("Queue is empty\r\n");
		return ERR;
	}

	ptTmp = ptQueue->ptFront;
	ptOld = ptTmp->ptNext;
	iEle = ptOld->iData;

	ptTmp->ptNext = ptOld->ptNext;
	if (!ptTmp->ptNext)
		ptQueue->ptRear = ptQueue->ptFront;
	free(ptOld);
	//printf("Dequeue: %d\r\n", ptQueue->iData[ptQueue->iFront]);

	return iEle;
}

PT_Queue createQueue(void)
{
	int iNum, i, iEle;
	PT_Queue ptQueue;
	PT_Node ptNew;

	ptQueue = (PT_Queue)malloc(sizeof T_Queue);
	if (!ptQueue)
	{
		printf("Err in memory\r\n");
		return NULL;
	}
	ptNew = (PT_Node)malloc(sizeof T_Node);
	if (!ptQueue)
	{
		free(ptQueue);
		printf("Err in memory\r\n");
		return NULL;
	}
	ptQueue->ptFront = ptQueue->ptRear = ptNew;
	ptNew->ptNext = NULL;

#if 0
	printf("Enter num of data: ");
	scanf_s("%d", &iNum);
	if (iNum < 0)
		goto done;

	printf("Enter your data: ");
	for (i = 0; i < iNum; i++)
	{
		scanf_s("%d", &iEle);
		if (!queue(iEle, ptQueue))
		{
			printf("Create successfully %d nodes\r\n", i+1);
			goto done;
		}
	}
#endif
done:
	return ptQueue;
}

int menu(PT_Queue ptQueue)
{
	int iNum, iEle;

	printf("0 to exit\r\n"
		"1 to queue\r\n"
		"2 to dequeue\r\n"
		"3 to print\r\n");

	scanf_s("%d", &iNum);
	switch (iNum)
	{
	case MENU_EXIT:
		return -1;
	case MENU_QUEUE:
		printf("Enter the one to be push\r\n");
		scanf_s("%d", &iEle);
		queue(iEle, ptQueue);
		break;
	case MENU_DEQUEUE:
		dequeue(ptQueue);
		break;
	case MENU_PRINT:
		printQueue(ptQueue);
		break;
	}

	return 0;
}

int main(void)
{
	PT_Queue ptQueue;

	ptQueue = createQueue();
	if (!ptQueue)
		return -1;

	while (1)
	{
		if (menu(ptQueue) == -1)
			break;
	}

	return 0;
}

 

 

 

 

数据结构和算法之线性结构 例如Java,通过动态数组实现了ArrayList,因为是用数组实现,其存储结构就是顺序存储的,因而具有顺序表的特征,插入删除效率低,查询元素效率高,但又不完全等同顺序表,因为它的空间是可以动态扩容的;然而,如果栈的使用是固定的,不随输入数据的大小变化,那么空间复杂度为O(1)。顺序表是采用顺序存储结构实现的线性表,一组地址连续的存储单元依次存放线性表的数据元素,即以存储位置相邻表示位序相继的两个元素之间的前驱和后继关系,从而使得逻辑上相邻的两个元素在物理位置上也相邻。为前行者蓄力,为后来者探路! 阅读详情

相关推荐

别怕,“卷积”其实很简单

首先给大家讲一个关于卷积的小故事:小明是杭州某互联网大厂的员工,每天996十分辛苦,但小明最近爱上了打台球,经常不在工位。这天,小明的主管让小明改一个需求,小明却到楼下找产品部小丽打台球去了,被主管发现,他非常气愤,扇了小明一巴掌(注意,这就是输入信号,脉冲)。于是小明脸上会渐渐地(贱贱地)鼓起来一个包,小明的脸就是一个系统,而鼓起来的包就是小明的脸对巴掌的响应。好,这样就和信号系统建立起来意义对应的联系。

Machine Learning with Tutors 3181

栈和队列的基本操作、算法和应用

一、实验目的 掌握栈和队列的基本操作 栈和队列的算法设计 栈和队列的应用 递归 二、实验内容 循环队列 进制转换 迷宫-深度策略 迷宫-广度策略 农夫过河-广度策略 “聪明的学生” 三、实验环境 在PTA平台进行实验 四、实验要求 根据每个实训的要求完成代码提交和测评 五、实验步骤 描述算法的原理或实现流程(测评完全正确或部分正确的实训) 1.循环队列入队出队 题目:本题要求实现队列的顺序存储表示,包括入队、出队和取队头操作。 审题:本题为循环队列。 实现流程: (1) 入队操作:首先检查队列是否满,如

qq_45721890的博客 2486

基于MS5351的三通道可编程时钟发生器设计

时钟发生器是数字系统时序验证与信号完整性测试的核心基础设备,其原理基于锁相环(PLL)对参考晶振进行倍频与分频控制,通过寄存器配置实现多路独立频率输出。技术价值体现在高精度、低抖动、快速切换与工程可部署性之间取得平衡,尤其适用于FPGA/ASIC参考时钟调试、ADC/DAC采样时钟验证及嵌入式硬件时序裕量评估等场景。本方案采用MS5351三通道时钟芯片与ESP32主控协同架构,在保证LVCMOS输出质量与I²C可编程性的前提下,优化电源噪声抑制、晶体负载匹配和跨板信号完整性,兼顾成本、周期与实测稳定性,为实

weixin_31715353的博客 211

【数据结构与算法】(8):顺序队列、链式队列和循环队列

链式队列的实现,顺序队列的实现,循环队列的实现

更新C/C++,数据结构与算法,计算机视觉,深度学习,目标检测 1925

破解拼多多网页字体加密的Python实现(静态)

爬取或者复制粘贴出来发现数字不是6372,而是这样的一个东西 ""从上图我们可以看出数字是一行的空白,后面被浏览器渲染后才展现的数字。我们可以用这个代码查看十六位进制对应的十进制,为什么要看十进制呢?​,而字体文件中的字符映射关系(cmap)也是以十进制存储的。我们搜索这个属性我们可以看到第一个这样的属性有一个URL,这个就是解密的字体包。然后我们构造一个这样的映射字典 key就是对应的十进制,后面的值就是对应的数字。然后我们需要封装一个函数,将加密文字和映射字典传入,返回解密后的数字。

weixin_64179111的博客 3540

手把手教你解锁TI MSPM0G3507开发板(2025新版,附XDS110接线图)

本文详细解析了2025版TI MSPM0G3507开发板的解锁方法,针对新版硬件中BSL引脚的电路设计变化提供了精准接线方案和UniFlash软件配置步骤。通过实测数据和专业指导,帮助开发者解决芯片锁定问题,确保调试接口正常响应。

weixin_42696271的博客 807

【循环顺序队列】

循环顺序队列的基本概念:了解什么是循环顺序队列,掌握其特点和使用场景。循环顺序队列的原理:理解循环顺序队列的原理,包括如何实现循环移动、如何进行入队和出队操作等。循环顺序队列的应用:学习循环顺序队列的应用场景,如广度优先搜索、深度优先搜索等。

m0_58507222的博客 666

SAP FICO 科目余额查询表开发说明书(包括测试样例、程序代码仅作参考,不保证一定可以运行)

SAP FICO 科目余额查询表开发说明书(包括开发源代码、测试样例)

我好像病了的博客 1041

队列置空队、判空、入队出队

内容: 假设以带头结点的循环链表表示队列,并且只设一个指针指向队尾元素节点(注意不设头结点),试编写相应的置空队、判队空、入队和出队等算法。 步骤: 算法分析 本题是循环链表基本操作的扩展,题中设有一个指针指向队尾元素的结点,此时要实现元素入队,则直接采用链表的插入操作即可。因题中不设有头结点,因此要实现出队操作,则需要尾指针找到头结点和开始结点,然后进行删除。在进行置空队操作时,只需要使queue.rear->next=queue.rear;即可,进行判空队操作时,则需要判断queue.rea

weixin_49647945的博客 1919

AgentScope实战训练营:构建计划可视化管理和HITL的AI智能计划助手

本文基于AgentScope Java SDK和Spring Boot WebFlux,从零构建一个支持SSE流式对话、计划可视化管理和HITL的AI智能计划助手Web应用PlanNotebook。涵盖项目架构设计、ReActAgent初始化、自定义工具注册、Hook机制实现、SSE事件协议定义、前端流式渲染等核心技术点,提供完整可运行的代码示例和详细的REST API参考。

program哲学 399

C#实现低通和高通滤波算法

低通滤波器允许通过低于某个截止频率的信号成分,并且抑制高于该频率的成分。而高通滤波器则允许通过高于某个截止频率的信号成分,并抑制低于该频率的成分。巴特沃斯滤波器是一种对称的滤波器,具有平坦的幅度响应和最小的群延迟。低通和高通滤波是数字信号处理中常用的滤波技术,用于滤除或增强信号中的特定频率成分。在本篇文章中,我们将使用C#编程语言来实现低通和高通滤波算法。以上就是使用C#实现低通和高通滤波算法的示例代码。你可以根据自己的需求调整截止频率和采样率,将这些代码应用于你的项目中。是滤波器的截止频率,

XisVisual_Basic的博客 1275

队列的基本操作 出队 入队 判断队列是否为空 .......

#include <stdio.h> #include <malloc.h> #include<stdlib.h> #define MAXQSIZE 100 //最大队列长度,实际使用 MAXQSIZE-1 #define OVERFLOW 0 typedef int ElemType; typedef int Status; //循环队列(少用一个存储单元) typedef struct { ElemType base[MAXQSIZE];//初始化的动态分配存储空间

weixin_45220224的博客 5223

从0开始图形学(光栅化)

从0开始图形学

A112459的专栏 2395

常用数据结构--线性结构

数据结构是计算机存储、组织数据的方式。常见的数据结构分类方式如下图: 常用的线性结构有:线性表,栈,队列,循环队列,数组。线性表中包括顺序表、链表等,其中,栈和队列只是属于逻辑上的概念,实际中不存在,仅仅是一种思想,一种理念;线性表则是在内存中数据的一种组织、存储的方式。   顺序表 顺序表将元素一个接一个的存入一组连续的存储单元中,在内存物理上是连续的。如下图:

袁伏彪 —— 共享,共赢 2万+

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

数据结构——线性结构

数据结构——线性结构 一、线性结构 在学习线性表之前肯定是需要对线性结构进行理解,如果按我个人的经验来说的话对于线性结构的理解是在学习数据结构中最为重要的,几乎后面所有学习结构都或多或少对线性结构进行利用。 线性结构 特点 前提 在数据结构的非空有限集合中 1 存在唯一的一个被称做“第一个”的元素 2 存在唯一的一个被称做“最后一个”的数据元素 3 除最后元素之外,其它...

ZXlxilin 3744

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

数据结构 线性结构篇——栈和队列

文章目录一、栈1.1 什么是栈1.2 栈的应用1.2.1 无处不在的撤销(undo)操作1.2.1 计算机程序调用的系统栈1.3 栈的实现 一、栈 1.1 什么是栈 栈是一种线性架构 相比数组,栈对应的操作时数组的子集 栈只能从一端添加元素,也只能从一端取出元素,最先放入堆栈中的内容最后被拿出来,最后放入堆栈中的内容最先被拿出来, 被称为 先进后出 、后进先出。 这里说的一端指的就是 栈顶,删除...

牧小农 4243

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

数据结构:线性结构和非线性结构的理解

我们知道数据结构是计算机存储、组织数据的方式。常见的数据结构分类方式如下图: 我们这里主要说一下线性结构和非线性结构 1. 线性结构 线性结构是什么? 数据结构中线性结构指的是数据元素之间存在着“一对一”的线性关系的数据结构。线性结构是一个有序数据元素的集合。 线性结构特点: 线性结构有唯一的首元素(第一个元素) 线性结构有唯一的尾元素(最后一个元素) 除首元素外,所有的元素都有唯一的“前驱” ...

鄙人kunzhi96,感恩遇见! 3万+

数据结构之线性结构和非线性结构

线性结构和非线性结构一、线性结构1.1 基本概念1.2 部分实现(1)顺序表(顺序存储)(2)链表(链式存储)(3)栈(4)队列二、非线性结构2.1 相关概念(1)二叉树(2)满二叉树(3)完全二叉树2.2 二叉树存储结构(1)顺序存储(2)链式存储2.3 树与二叉树的转换(1)树转二叉树(2)二叉树转树2.4 树的遍历代码实现 一、线性结构 1.1 基本概念 (1)线性结构作为最常用的数据结构,其特点是数据元素之间存在一对一的线性关系。 (2)线性结构拥有两种不同的存储结构,即顺序存储结构和链式存储结构。

weixin_43520450的博客 4736

数据结构分类之什么是线性结构、非线性结构

什么是线性结构、非线性结构 数据结构分类大多可以有三种分类方式,分别是逻辑结构、物理结构、存储结构。一般来讲大多数都是以逻辑结构进行划分的。 线性结构 简单地说,线性结构就是表中各个结点具有线性关系。如果从数据结构的语言来描述,线性结构应该包括如下几点: 1、线性结构是非空集。 2、线性结构有且仅有一个开始结点和一个终端结点。 3、线性结构所有结点都最多只有一个直接前趋结点和一个直接后继结点。 ...

cy_an的博客 1万+

【TypeScript】常见数据结构与算法(一):常见线性结构

数据结构与算法之常见线性结构:数组、栈、队列

m0_68324632的博客 1408

数据结构——栈与队列

数据结构栈与队列相关基础知识详解!!!

m0_57484470的博客 6931

数据结构学习-线性结构(数组、链表、栈、队列)

线性结构是数据结构中的一种基本类型,它是一种数据元素之间存在一对一关系的数据结构。在线性结构中,每个元素(除了第一个和最后一个)都有一个直接前驱和一个直接后继。常见的线性结构有数组、链表、栈和队列等。

qq_40805720的博客 1498

java数据结构之线性结构和非线性结构

数据结构包括 :线性结构和非线性结构。 线性结构 1):线性结构作为最常用的数据结构,其特点是数据元素之间存在一对一的线性关系。 2):线性结构有两种不同的存储结构,即顺序存储结构和链式存储结构。顺序存储的线性表称为顺序表, 顺序表中的存储元素是连续的。 3):链式存储的线性表称为链表,链表中的存储元素不一定是连续的,元素节点中存放数据元素以及相邻元素的地址信息。 4):线性结构常见的有:数组、队...

不一样的花朵的博客 9804

数据结构:线性结构/数组

数据结构:线性表

qingttqing的博客 1050

java数据结构--线性结构

摘自网上关于数据结构一段话: 一、数据结构概念 用我的理解,数据结构包含数据和结构,通俗一点就是将数据按照一定的结构组合起来,不同的组合方式会有不同的效率,使用不同的场景,如此而已。比如我们最常用的数组,就是一种数据结构,有独特的承载数据的方式,按顺序排列,其特点就是你可以根据下标快速查找元素,但是因为在数组中插入和删除元素会有其它元素较大幅度的便宜,所以会带来较多的消耗,所以因为

xianymo的专栏 2821
上一篇: 数据结构(一)线性结构(3)栈
下一篇: 数据结构(三)查找算法(1)顺序查找
floatinglong
博客等级 码龄9年 90粉丝 143原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值