数据结构实验报告(八)

数据结构实验课:实验八、排序算法的实现 实验八、排序算法的实现 一、实验目的 掌握常用的排序方法,并掌握用高级语言实现排序算法的方法; 深刻理解排序的定义和各种排序方法的特点,并能加以灵活应用; 了解各种方法的排序过程及其时间复杂度的分析方法。 二、实验要求 统计成绩:给出n个学生的考试成绩表,每条信息由姓名和分数组成,试设计一个算法: (1) 按分数高低次序,打印出每个学生在考试中获得的名次,分数相同的为同一名次; (2) 按名次列出每个学生的姓名与分数。 三、实验步骤 1.定义结构体。 Typedef struct student { 阅读详情

1.实验目的

1、掌握二叉树的动态存储结构及表示算法

2、掌握二叉树的前序、中序、后序遍历的递归和非递归算法

3、运用二叉树的3种遍历算法求解基于二叉树的相关问题

2.实验内容

1、二叉树的建立

2、二叉树的前中后序遍历及层次遍历

3、查找结点,返回结点的指针或双亲

4、统计n度结点的个数

5、返回前中后序的首点和尾点

3.设计思路

类似于树的创建,只不过分为左子树和右子树,前中后序遍历和树的也大致相同,层次遍历要用到队列,计算树的高度的策略是子树的最大高度+1,统计不同度数结点的个数就要先判断根结点是几度结点,再去看左子树和右子树该度数结点的个数。查找算法先判断树是否为空,若为空,返回NULL,在判断如果根是要找的,返回根,否则先到左边找,返回左边找的值,再到右边找,返回右边找到的值。树不空,前序首点即根,前序尾点即最右叶子,后序首点即最左叶子,后序尾点即根。

4.关键代码

#include <stdio.h>
#include <stdlib.h>
#define MAX 20
typedef struct k {
	char data;
	struct k* left, * right;
}btree;
typedef struct {
	btree* data[MAX];//后面需要使用到出队元素的孩子,所有存储的只能是tree*类型
	int f, r;//f是队首指针,r是队尾指针
}queue;
typedef struct {
	btree* a[100];
	int top;
}stack;

btree* Create() {//二叉树的建立,类似于树的建立
	btree* t;
	char c = getchar();
	if (c == '#') return NULL;//输入#号代表空
	t = (btree*)malloc(sizeof(btree));//造根
	t->data = c;//给根赋值
	t->left = Create();//造一棵树给t的左孩子t->left
	t->right = Create();//造一棵树给t的右孩子t->right
	return t;//最后返回t
}

//队列的操作
void init1(queue* q) { q->f = 0; q->r = 0; }//初始化队列
int isEmpty1(queue* q)//判空
{
	if (q->f == q->r) return 1;//为空返回1,否则返回0
	else return 0;
}
void enQueue(queue* q, btree* x) { q->data[q->r] = x; q->r = (q->r + 1) % MAX; }//入队,从尾入
btree* outQueue(queue* q)//出队,从头出
{
	btree* x;
	x = q->data[q->f];//将头部的值标记出来
	q->f = (q->f + 1) % MAX;//防止溢出,所以要对MAX求余
	return x;
}

//栈的操作
void init2(stack* s) //初始化栈
{
	s->top = 0;
}

int isEmpty2(stack* s) //判断栈是否为空
{
	return (s->top == 0) ? 1 : 0;
}

void push(stack* s, btree* x)//入栈
{
	s->a[s->top] = x; s->top++;
}

btree* pop(stack* s) //出栈
{
	s->top--; return s->a[s->top];
}

btree* top(stack* s) //返回栈顶元素,但不出栈
{
	return s->a[s->top - 1];
}

void pre(btree* t) {//前序遍历
	if (t == NULL) return;
	printf("%c ", t->data);//先根
	pre(t->left);//后子树
	pre(t->right);
}//Images\background.png

void in(btree* t) {//中序遍历
	if (t == NULL) return;
	in(t->left);
	printf("%c ", t->data);
	in(t->right);
}

void post(btree* t) {//后序遍历
	if (t == NULL) return;
	post(t->left);//先子树
	post(t->right);
	printf("%c ", t->data);//后根
}

//void level(btree* t) {//层次遍历
//	btree* p;
//	if (t == NULL) return;
//	queue q; init1(&q);                       //创建并初始化队列
//	enQueue(&q, t);                            //根入队
//	while (isEmpty1(&q) == 0)                  //当队列不为空时
//	{
//		p = outQueue(&q);                      //p=出队元素
//		printf("%c ", p->data);               //访问p
//		if (p->left != NULL)
//			enQueue(&q, p->left);             //p->left入队
//		if (p->right != NULL)
//			enQueue(&q, p->right);            //p->right入队
//	}
//}

void level(btree* t) {
	btree* p; queue q;
	if (t == NULL) return;
	init1(&q);
	enQueue(&q, t);//根入队
	while (isEmpty1(&q) != 1)
	{
		p = outQueue(&q);
		printf("%c ", p->data);
		if (p->left != NULL)
			enQueue(&q, p->left);
		if (p->right != NULL)
			enQueue(&q, p->right);
	}
}

btree* findX(btree* t, char x) {//基于前序遍历查找
	if (t == NULL) return NULL;//如果没有元素返回空
	if (t->data == x) return t;//如果根就是要找的,返回根;
	if (findX(t->left, x) != NULL)//先找左子树,如果找到则返回找到的结果
		return findX(t->left, x);
	//走至此处说明左子树中没有找到
	return findX(t->right, x); //以右子树结果为结果:无论是否找到
}



btree* locate(btree* t, char x) {
	if (t == NULL) return NULL;
	if ((t->left != NULL && t->left->data == x) || (t->right != NULL && t->right->data == x))
		return t;
	if (locate(t->left, x) != NULL)
		return locate(t->left, x);
	return locate(t->right, x);
}


int count_0(btree* t) {
	if (t == NULL) return 0;
	if (t->left == NULL && t->right == NULL)
		return 1;
	return count_0(t->left) + count_0(t->right);
}



int count_1(btree* t) {
	int c = 0;
	if (t == NULL) return 0;
	if ((t->left != NULL && t->right == NULL) || (t->left == NULL && t->right != NULL))
		c = 1;
	return count_1(t->left) + count_1(t->right);
}

int count_2(btree* t) {//统计2度结点个数
	int c = 0;
	if (t == NULL)
		return 0;
	if ((t->left != NULL) && (t->right != NULL))
		c = 1;
	return  count_2(t->left) + count_2(t->right) + c;
}

int high(btree* t) {//计算树的高度
	int max, maxC1, maxC2;
	max = 0; maxC1 = 0; maxC2 = 0;
	if (t == NULL) return 0;//如果t为空,说明树高为0;
	//策略:最高子树的树高+1
	maxC1 = high(t->left);//即左边子树的树高
	maxC2 = high(t->right);//即右边子树的树高
	if (maxC1 < maxC2) max = maxC2;
	else { max = maxC1; }
	//max即子树中树高最高的值
	return max + 1;//还要加上根的高度
}



int depth(btree* t, char x) {
	if (t == NULL) return 0;
	if (t->data == x) return 1;
	if (depth(t->left, x) > 0)
		return depth(t->left, x);
	if (depth(t->right, x) > 0)
		return depth(t->right, x);
	return 0;
}

void  convert(btree* t) {//二叉树的左右子树互换
	btree* temp;
	if (t == NULL)    return;
	temp = t->left; t->left = t->right; t->right = temp;
	convert(t->left);
	convert(t->right);
}

void preKN(btree* t)  //非递归 将二叉树以k叉树形式前序遍历
{
	stack s;
	init2(&s);
	while (t != NULL || isEmpty2(&s) != 1)//当t不空或栈不空
	{
		if (t != NULL)//如果t不空,则表示左子树还没打印完
		{
			printf("%c", t->data);//打印
			push(&s, t);//进栈保留回溯点
			t = t->left;
		}
		else  //如果t空,栈不空
		{
			t = pop(&s);//出栈找到右子树
			t = t->right;
		}
	}
}

btree* midfindX(btree* t, char x)  //中序非递归遍历,查找值为x的元素
{
	stack s;
	init2(&s);
	while (t != NULL || isEmpty2(&s) != 1)//当t不空或栈不空
	{
		if (t != NULL)//如果t不空,则表示左子树还没打印完
		{
			push(&s, t);//进栈保留回溯点
			t = t->left;
		}
		else//如果t空,栈不空
		{
			t = pop(&s);//出栈找到右子树
			if (t->data == x)
				return t;
			t = t->right;
		}
	}
	return NULL;//出循环表示没找到
}



btree* InFirstNode(btree* t) {
	btree* p;
	if (t == NULL) return NULL;
	p = t;
	while (p->left != NULL)
		p = p->left;
	return p;
}


btree* InLastNode(btree* t) {
	btree* p;
	if (t == NULL) return NULL;
	p = t;
	while (p->right != NULL)
	{
		p = p->right;
	}
	return p;
}

btree* preFirstNode(btree* t) {//返回前序首点
	if (t == NULL) return NULL;
	return t;//树不空,前序首点即根
}

btree* preLastNode(btree* t) {//返回前序尾点,前序尾点即最右叶子
	btree* p;
	if (t == NULL) return NULL;
	p = t;
	while (p->left != NULL || p->right != NULL)//当两个都为空时说明是叶子
		if (p->right != NULL) p = p->right;//左右都不为空则先访问右子树
		else
			p = p->left;
	return p;
}

btree* postFirstNode(btree* t) {//返回后序首点,后序首点即最左叶子
	btree* p;
	if (t == NULL) return NULL;
	p = t;
	while (p->left != NULL || p->right != NULL)//当两个都为空时说明是叶子
		if (p->left != NULL) p = p->left;//左右都不为空则先访问左子树
		else
			p = p->right;
	return p;
}

btree* postLastNode(btree* t) {//返回后序尾点,后序尾点即根
	if (t == NULL) return NULL;
	return t;
}

int main()
{
	btree* t, * p, * r;
	int x, y;
	printf("请输入结点,#代表空");
	t = Create();
	printf(" pre=");  pre(t);
	printf("\n  in="); in(t);
	printf("\npost="); post(t);
	printf("\n层次遍历结果为:\n"); level(t);
	printf("\npreKN="); preKN(t);
	printf("\n中序非递归查找结点A,结果为:");
	p = midfindX(t, 'A');
	if (p == NULL) printf("NULL ");    else printf("%c ", p->data);
	printf("\n找结点A、C、Z,结果为:");
	p = findX(t, 'A');
	if (p == NULL) printf("NULL ");    else printf("%c ", p->data);
	p = findX(t, 'C');
	if (p == NULL) printf("NULL ");    else printf("%c ", p->data);
	p = findX(t, 'Z');
	if (p == NULL) printf("NULL ");    else printf("%c ", p->data);
	printf("\nB的双亲为:");
	p = locate(t, 'B'); printf("%c ", p->data);
	printf("\nC的双亲为:");
	p = locate(t, 'C'); printf("%c ", p->data);
	printf("\n0度结点的个数为:"); x = count_0(t); printf("%d ", x);
	printf("\n1度结点的个数为:"); x = count_1(t); printf("%d ", x);
	printf("\n2度结点的个数为:"); x = count_2(t); printf("%d ", x);
	printf("\n树高为:"); y = high(t); printf("%d", y);
	printf("\n左右子树互换:");
	convert(t); pre(t);
	printf("\n中序首点为:");
	r = InFirstNode(t);//返回中序首点
	printf("%c ", r->data);
	printf("\n中序尾点为:");
	r = InLastNode(t);//返回中序尾点
	printf("%c ", r->data);
	printf("\n前序首点为:");
	r = preFirstNode(t);//返回前序首点
	printf("%c ", r->data);
	printf("\n前序尾点为:");
	r = preLastNode(t);//返回前序尾点
	printf("%c ", r->data);
	printf("\n后序首点为:");
	r = postFirstNode(t);//返回后序首点
	printf("%c ", r->data);
	printf("\n后序尾点为:");
	r = postLastNode(t);//返回后序尾点
	printf("%c ", r->data);
}

5.运行结果

6.实验总结(含心得体会)

通过本次实验,我们学习了二叉树的建立、二叉树的前中后序遍历及层次遍历、查找结点,返回结点的指针或双亲、统计n度结点的个数、返回前中后序的首点和尾点,通过本次实验,出现了一些问题,但是在老师的耐心指导下,一个个问题得到了解决,同时,自己的对代码的调试能力和理解能力也得到了提高。

《数据结构》实验报告 实验七:排序一.我的实验选题:排序算法二.实验主要内容和目的:将输入的n个数用插入排序、快速排序、选择排序分别重新排列成按一个数据元素某个项值有序的序列。本实验的目的在于:对于每一种排序,要深刻理解它的思想,熟练掌握排序过程,时间和空间复杂度,最好情况和最坏情况,稳定性如何,适用于什么样的初始序列。掌握重要排序的算法和排序过程,插入排 阅读详情

相关推荐

《数据结构与算法分析》课程实验报告八 排序

本实验通过C++语言实现多种排序算法,包括直接插入、折半插入、冒泡、快速和简单选择排序。使用Dev-Cpp环境,基于学生成绩管理系统进行测试,记录了23类常见编译错误及解决方法。实验验证了不同排序算法的实现过程,并总结出指针使用、内存管理、代码规范等编程要点。结果表明,选择合适的排序算法能显著提升执行效率,同时强调了代码编写中符号规范、头文件引用等细节的重要性。实验报告包含完整源码,展示了从算法设计到调试优化的完整过程。

qq_62992596的博客 1045

数据结构实验(8)

数据结构实验:一棵完全二叉树以顺序方式存储,设计一个递归算法,对该完全二叉树进 行中序遍历。

zu_zhu_xia的博客 899

数据结构课程设计实验报告.doc

1、程序设计任务 为宿舍管理人员编写一个宿舍管理查询软件。 ①程序设计要求: A. 采用交互工作方式 B. 建立数据文件 ,数据文件按关键字(姓名、学号、房号)进行排序(冒泡、选择、插入排序等任选一种) ②查询菜单: (用二分查找实现以下操作) A. 按姓名查询 B. 按学号查询 C. 按房号查询 ③打印任一查询结果(可以连续操作)

数据结构实验八 二叉树的构造和遍历

实验八 二叉树的构造和遍历 1、实验目的: (1)理解二叉树的二叉链表存储。 (2)理解二叉树这种递归数据结构以及其操作的递归实现。 2、实验环境与设备: 已安装Visual Studio 2010(或其以上版本)集成开发环境的计算机。 3、实验原理: (1)二叉树的二叉链表存储。 (2)二叉树的三种遍历算法。 4、实验内容: (1)基于标明空子树的先序遍历序列构造一棵采用二叉链表存储的二叉树。(...

愿时光能缓故人不散 2448

基于 SpringAI 整合 DeepSeek 模型实现 AI 聊天对话

很多云平台都提供了一键部署大模型的功能,这里不再赘述(阿里云百炼平台、火山方舟-火山引擎等)Ollama。

📜一个热爱探索的人 1279

现场总线课程设计-基于modbus协议使用QT实现主从站控制通信

【平台:QT】 【协议:modbus(注:由于要求,需要自己来实现modbus库,而非直接调用已有的库)】 【由于复制粘贴,时间原因可能格式有误,如需要具体工程文件以及报告文件请私信博主】 1、 大作业任务: (1)使用附件中工具软件体验MODBUS主从站数据传输过程(可在主从站模拟工具里面观察各功能码对应数据帧内容并对其进行分析) (2)使用串口调试助手,手工发出MODBUS主、从站该发出的数据,并观察对方发出的数据 (3)实现MODBUS主、从站功能,描述实现过程(语言不限于使用VC

weixin_44469597的博客 4066

数据结构实验八讲解指南

本博文源于数据结构第八次实验,我们先看实验内容,再看具体实现细节

执念斩长河 797

Converting Phase Noise to Random Jitter(Period)

推导了Phase Noise to Random Jitter(Period)的转换过程,解释了分频对Phase Noise & Spur(每2分频改善6dB)的影响,每N分频,TIE RJ(1𝜎)不变(之前已推导),而Period RJ(1𝜎)增加√N倍。

u010486560的博客 2039

山东大学数据结构实验八:图的操作

山东大学数据结构实验八:图的操作

Sunnyztg的博客 919

Gemini 2.5 Pro国内免魔法直连教程:5分钟搞定专业级PPT图表(附折线图/柱状图案例)

本文详细介绍了如何利用Gemini 2.5 Pro快速生成专业级PPT图表,包括折线图和柱状图等常见商业图表。通过自然语言交互和智能图表生成功能,用户可以在5分钟内完成数据可视化,大幅提升工作效率。文章还提供了实战案例和高级技巧,帮助用户轻松应对各种商业场景需求。

weixin_30733003的博客 460

【图数据库与知识图谱入门】2.2 图数据库 vs. 关系型数据库 vs. NoSQL数据库

本文对比了关系型数据库、NoSQL数据库和图数据库的核心差异与应用场景。关系型数据库以二维表结构为核心,适合结构化数据的事务处理(如MySQL),但多表关联查询性能随层级增加而下降。NoSQL数据库(如MongoDB)具有灵活schema,适合海量非结构化数据存储,但关联查询能力较弱。图数据库专注于节点-边关系建模,擅长处理复杂关联分析(如社交网络)。通过学生-课程案例展示了MySQL的多表JOIN操作和MongoDB的两种关联实现方式(内嵌文档和文档引用),揭示了不同数据库在数据关联处理上的本质区别。

kngines 1541

数据结构实验报告(八) Huffman编码与解码

输入符号数目n,以及n个字符和各字符的权值,通过一维结构数组的方式构建Huffman树,并输出各个字符所对应的Huffman编码。根据输出的Huffman编码,输入一串二进制比特序列,并将其解码为原始字符输出,对照Huffman编码检查解码功能的正确性。

m0_74976278的博客 866

【人工智能AI】是什么?

人工智能(Artificial Intelligence),英文缩写为AI。它是研究、开发用于模拟延伸和扩展人的智能的理论方法技术及应用系统的一门新的技术科学。(百度百科)人工智能的基本原理:机器从「特定的」大量数据中总结规律,形成某些「特定的知识」,然后将这种「知识」应用到现实场景中去解决实际问题。在这个基本原理的基础上,有3个特征:1、人工智能本质上是一种工具2、人工智能技能只能解决特定的问题,而不是什么都能做3、人工智能属于归纳逻辑,可以告诉你是什么,但是不能告诉你为什么。

KJCZ.AK的博客 2万+

上海交通大学python实验七答案_20192310 实验八《数据结构与面向对象程序设计》实验报告...

20192310 2020-2021-1 《数据结构与面向对象程序设计》实验八报告课程:《程序设计与数据结构》班级: 1923姓名: 严嘉钰学号: 20192310实验教师:王志强实验日期:2020年12月03日必修/选修: 必修1.实验内容1.参考教材PP16.1,完成链树LinkedBinaryTree的实现(getRight,contains,toString,preorder,postor...

weixin_39923945的博客 751

【Bluetooth蓝牙开发】一、开篇词 | 打造全网最详细的Bluetooth开发教程

1、开篇词 2、蓝牙开发入门 3、蓝牙协议栈总览 4、蓝牙协议栈——物理层 5、蓝牙协议栈——链路层 6、蓝牙协议栈——传输层 7、蓝牙协议栈——L2CAP协议 8、蓝牙协议栈——ATT协议 9、蓝牙协议栈——GATT协议 10、蓝牙通信流程分析 11、蓝牙协议栈——Bluez交叉编译 12、蓝牙调试工具汇总

Donge's Blog 1万+

LVGL 磁罗盘效果

环境:LVGL 9.x + SDL2,窗口 1280×800。界面文案用英文(默认 Montserrat,无 CJK)。本文按实现顺序讲:先建立两个耦合转动体,再把磁倾角误差从卡面倾斜里推出来,最后用同一套投影把刻度、数字和目标画到卡上。画面上的迟滞、涡流、摆动和读数偏差都来自方程,没有补间动画。

摸鱼专家 88

数据结构实验报告—顺序表的基本操作—学生管理系统

数据结构实验报告,顺序表的基本操作,学生管理系统

VLOKL的博客 8799

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

农夫过河【数据结构实验报告】

数据结构实验报告实验名称:实验三 农夫过河学号:***姓名:gnosed实验日期:2017.10.30 一、实验目的1、进一步掌握队列的使用2、会使用队列进行农夫过河解的搜索 二、实验具体内容1、实验题目1:(1)题目经典的农夫过河问题一个农夫带着一只狼,一只羊和一颗白菜过河,从西岸到东岸。船太小,他每次过河只能携带一样东西,船只有农夫能撑。问题是狼会吃羊,羊会吃白菜,所以不能单独让狼和羊或者羊和...

_ 1万+

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

数据结构实验报告(一)

数据结构实验报告(一) 一、实验名称 实验一  线性表的基本操作实现及其应用 二、实验目的 1、熟练掌握线性表的结构特点,掌握顺序表的基本操作。 2、巩固 C++相关的程序设计方法与技术。 3、学会使用顺序表解决实际问题。 三、实验内容 顺序表的建立与操作实现 建立 n 个元素的顺序表(n 的大小和表里数据自己确定),实现相关的操作:输出,插 入,删除,查找等功能。编写完整程序

cqc1161的博客 1万+

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

数据结构实验报告---栈

上机实验习题 上机实验要求及规范 C程序设计具有比较强的理论性,同时也具有较强的可应用性和实践性。在上机实验是一个重要的教学环节。具体实习步骤如下: 1.问题分析与系统结构设计 充分地分析和理解问题本身,弄清要求做什么(而不是怎么做),限制条件是什么。按照以数据结构为中心的原则划分模块,搞清数据的逻辑结构(是线性表还是树、图?),确定数据的存储结构(是顺序结构还是链表结构?)。然后设计有关操作的函...

qq_41529435的博客 6888

数据结构实验报告

《数据结构》实验指导书   实验一  线性表的应用 【实验目的】 1. 熟练掌握线性表的基本操作在顺序存储和链式存储上的实现; 2. 以线性表的各种操作(建立、插入、删除、遍历等)的实现为重点; 3. 掌握线性表的动态分配顺序存储结构的定义和基本操作的实现; 4. 通过本章实验帮助学生加深对C语言的使用(特别是函数的参数调用、指针类型的应用和链表的建立等各种基本操作)。 【实验内容

ESESZB的博客 2万+

hnu 数据结构 实验八

实验8 查找算法实验比较 实验目的 基于教材内容,从顺序查找、二分查找、基于BST的查找和哈希中任选两种查找算法,实现并比较性能。 基本要求 (1)对实现的查找算法进行实验比较,在不同数据规模(N)下执行100次成功查找,以表格形式记录最小、最大和平均查找时间;在不同数据规模(N)下执行100次不成功查找,以表格形式记录最小、最大和平均查找时间。 (2)查找算法要基于教材,测试输入的整数数据文件(5个,文件中数据规模N分别是100,1K,10K,100K和1M),每次查找的比较次数和时间也要输出到文件中。

zumhui的博客 492

数据结构实验报告,二叉树的基本操作(C语言)

数据结构实验报告,二叉树的基本操作(C语言)

VLOKL的博客 7517

迷宫问题【数据结构实验报告】

数据结构实验报告 实验名称:实验二 迷宫问题 学号:*** 姓名:gnosed 实验日期:2017.10.23   一、实验目的 1、了解回溯法在求解迷宫问题中的应用 2、进一步掌握栈的使用   二、实验具体内容 1、实验题目1: (1)题目 用回溯法求解迷宫问题,可以用一个栈保存探索的序列。并且在该迷宫的行走中,站在一点可以有八个方向选择。 比如如下的迷宫 Ente...

_ 3万+
上一篇: 数据结构实验报告(六)
future_dreaming
博客等级 码龄5年 11粉丝 15原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值