数据结构(严蔚敏版)习题集第二章课后标新号习题答案

#include<iostream>
#include<stdio.h>
#include<cmath>
#include<string.h>
using namespace std;
/****预定义****/
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
/****类型定义****/
typedef int ElemType;
typedef int Status;
typedef int * Position;
typedef struct{
ElemType *elem;
int length;
int listsize;
}Sqlist;
struct LNode;
typedef struct Node * PtrToNode;
typedef struct LNode * PToNNode;
typedef PtrToNode List;
typedef PtrToNode Location;
typedef PToNNode ListL;
typedef struct Node {//单链表
ElemType Date;
Location Next;
};
typedef struct LNode {//双向链表结点
ElemType Date;
ListL Next;
ListL prior;
ElemType freq;
};
typedef struct {
int coef;
int exp;
}PolyTerm;
typedef struct {
PolyTerm *data;
int length;
} SqPoly;
typedef struct PolyNode * Polyposition;
typedef struct PolyNode * PolyNode_L;
typedef struct PolyNode {
PolyTerm data;
Polyposition Next;
}PolyNode;
/****构建一个一元多项式的链表L****/
void CreatePolyn_L(PolyNode_L &L)
{
int num=0, coef=0, exp=0;
const char * order[7] = { "First", "Second", "Third", "Fourth", "Fifth", "Sixth", "Seventh" };
cout << "Please cin the num of the Poly: "; cin >> num;
PolyNode_L tmp,position;
L = (PolyNode_L)malloc(sizeof(PolyNode)); L->Next = NULL; position = L;
for (int i = 0; i < num; i++)
{
tmp = (PolyNode_L)malloc(sizeof(PolyNode));
cout << "The " << order[i] << " coef: "; cin >> coef;
cout << "and exp: "; cin >> exp;
tmp->data.coef = coef; tmp->data.exp = exp;
L->Next = tmp; L = L->Next;
}
L->Next = NULL;
L = position;
}
/****展示一个一元多项式的链表L****/
void Show_SqPolyn(const PolyNode_L &L)
{
PolyNode_L position; position = L;
position = position->Next;
cout << "The Sqpoly is: ";
while (position->Next != NULL)
{
cout << position->data.coef << "x^" << position->data.exp;
cout << "+";
position = position->Next;
}
cout << position->data.coef<<endl;
}
/****构建一个一元多项式的线性表L****/
Status CreatePolyn(SqPoly &L,ElemType n)
{
L.data = (PolyTerm*)malloc(n*sizeof(PolyTerm));
if (!L.data) exit(OVERFLOW);
L.length = 0;
return OK;
}
/****对一元多项式的线性表进行初始化****/
void Init_Polyn(SqPoly &L)
{
int num,coef,exp;
const char * order[7]={"First", "Second", "Third", "Fourth", "Fifth", "Sixth", "Seventh" };
cout << "Please cin the num of the Poly: "; cin >> num;
CreatePolyn(L, num);
for (int i = 0; i < num; i++)
{
cout << "The " << order[i] << " coef: "; cin >> coef;
cout << "and data: ";cin >> exp;
L.data[i].coef = coef; L.data[i].exp = exp;
L.length++;
}
}
/****构建一个空的线性表L****/
Status InitList_Sq(Sqlist &L)
{
L.elem = (ElemType *)malloc(LIST_INIT_SIZE * sizeof(ElemType));
if (!L.elem) exit(OVERFLOW);
L.length = 0;
L.listsize = LIST_INIT_SIZE;
return OK;
}
/****展示线性表中的内容****/
void Show_Sq(const Sqlist &L)
{
for (int i = 0; i < L.length; i++)
{
cout << L.elem[i] <<" ";
}
}
/****展示单链表中的内容****/
void Show_List(List &L,int n)
{
Location P=L;
for (int i = 0; i < n; i++)
{
P = P->Next;
cout << P->Date << endl;
}
}
void Show_List(List &L)
{
Location P = L;
while(P->Next!=NULL)
{
P = P->Next;
cout << P->Date << endl;
}
}
/****展示双向链表中的内容****/
void Show_LList(ListL &L)
{
ListL P = L,original=L;
while (P->Next != original)
{
P = P->Next;
cout << P->Date << endl;
}
}
/*********删除单链表********/
void DeleteList(List &L) //使用说明:传入的要求是头结点
{
Location p,tmp;
p = L->Next;
L->Next = NULL;
while(p->Next!=NULL)
{
tmp = p->Next;
free(p);
p = tmp;
}
}
/******线性表删除特定位置元素的值******/
Status Delete_Sq(Sqlist &L, int num)//num为链表元素中的第num个
{
if ((num < 1) || (num > L.length))return ERROR;
for (int i = num-1; i < L.length-1; i++)
{
L.elem[i] = L.elem[i + 1];
}
L.length--;
return OK;
}
/*********线性表初始化**********/
void Sq_init(Sqlist &L,int n=0)
{
int num[10] = { 0 };
int num1[10] ={ 2, 2, 8, 12,13, 14, 17, 18, 20, 22 };
int num2[10] = { 2, 2, 2, 5, 10, 15, 16, 18, 20, 30 };
int num3[10] = { 2,4,6,8,10,12,14,16,18,20 };
if (n == 1)
{
for (int i = 0; i < 10; i++)
{
num[i] = num1[i];
}
}
if (n == 2)
{
for (int i = 0; i < 10; i++)
{
num[i] = num2[i];
}
}
if (n == 3)
{
for (int i = 0; i < 10; i++)
{
num[i] = num3[i];
}
}
for (int i = 0; i < 10; i++)
{
L.elem[i] = num[i];
L.length++;
}
}
/**********单链表初始化******/
void L_init(List &L,int n=1)
{
int num[10] ={ 2,2,3,4,5,6,7,8,9,10 };
int num1[10] = { 2, 2, 8, 12,13, 14, 17, 18, 20, 22 };
int num2[10] = { 2, 2, 2, 5, 10, 15, 16, 18, 20, 30 };
int num3[10] = { 2,4,6,8,10,12,14,16,18,20 };
if (n == 1)
{
for (int i = 0; i < 10; i++)
{
num[i] = num1[i];
}
}
if (n == 2)
{
for (int i = 0; i < 10; i++)
{
num[i] = num2[i];
}
}
if (n == 3)
{
for (int i = 0; i < 10; i++)
{
num[i] = num3[i];
}
}
Location tmp, original;
L = (PtrToNode)malloc(sizeof(Node));//创建头结点;
original = L;
L->Next = NULL;
for (int i = 0; i < 10; i++)
{
tmp = (PtrToNode)malloc(sizeof(struct Node));
tmp->Date = num[i];
//if (i == 0) { L->Next = tmp; p = tmp; tmp->Next = NULL; }//建立表的另一种方法。
//else { p->Next = tmp; p = tmp; tmp->Next = NULL; }
L->Next = tmp;
L = L->Next;
}
L->Next = NULL;
L = original;
}
/**********双向链表初始化******/
void LL_init(ListL &L, int n = 1)
{
int num[10] = { 2,2,3,4,5,6,7,8,9,10 };
int num1[10] = { 2, 2, 8, 12,13, 14, 17, 18, 20, 22 };
int num2[10] = { 2, 2, 2, 5, 10, 15, 16, 18, 20, 30 };
int num3[10] = { 2,4,6,8,10,12,14,16,18,20 };
if (n == 1)
{
for (int i = 0; i < 10; i++)
{
num[i] = num1[i];
}
}
if (n == 2)
{
for (int i = 0; i < 10; i++)
{
num[i] = num2[i];
}
}
if (n == 3)
{
for (int i = 0; i < 10; i++)
{
num[i] = num3[i];
}
}
ListL tmp, original,privious;
L = (PToNNode)malloc(sizeof(LNode));//创建头结点;
original = L;
L->Next = NULL; L->freq = 0;
for (int i = 0; i < 10; i++)
{
tmp = (PToNNode)malloc(sizeof(struct LNode));
tmp->Date = num[i]; tmp->prior = L; tmp->freq = 0;
L->Next = tmp;  L = L->Next;
}
L->Next = original; original->prior = L;
L = original;
}
/********2.11********/
void va_init(Sqlist &L)
{
int num[10] = { 2,5,6,8,10,15,16,18,20,30 };
for (int i = 0; i < 10; i++)
{
L.elem[i] = num[i];
L.length++;
}
}
Status XInsert_Sq(Sqlist &L, int X) //在线性表中插入X;
{
ElemType *newbase;
int temp=0,num=0;
if (L.length >= L.listsize) {
newbase = (ElemType *)realloc(L.elem, (L.listsize + LISTINCREMENT) * sizeof(ElemType));
if (!newbase)exit(OVERFLOW);
L.listsize += LISTINCREMENT;
}
for (int i = 0; i < L.length; i++)
{
if (L.elem[i] >= X)
{
num = i;
break;
}
}
for (int i = L.length-1; i >= num; i--)
{
L.elem[i+1] = L.elem[i];
}
L.elem[num] = X;
L.length++;
return OK;
}
/********2.12********/
void A_init(Sqlist &A)
{
int num[6] ={ 'x','y','y','z','x','z' };
for (int i = 0; i < 6; i++)
{
A.elem[i] = num[i];
A.length++;
}
}
void B_init(Sqlist &B)
{
int num[8] = { 'x','y','y','z','y','x','x','z' };
for (int i = 0; i<8; i++)
{
B.elem[i] = num[i];
B.length++;
}
}
int Compare_Sq(const Sqlist &A,const Sqlist &B)//比较两个线性表
{
int length=0,num=0;
Sqlist A1, B1;
InitList_Sq(A1);
InitList_Sq(B1);
length = A.length < B.length ? A.length : B.length;
for (int i = 0; i < length; i++)
{
if (A.elem[i] == B.elem[i])
{
num++;
}
else break;
}
/*也可以通过直接判断A.elem[num+1]与B.elem[num+1]来实现*/
if (num == A.length) A1.length = 0; //建立A';
for (int i = num; i < A.length; i++)
{
A1.elem[i - num] = A.elem[i];//A1.length=A.length-num;
A1.length++;
}
if (num == B.length) B1.length = 0; //建立B';
for (int i = num; i < B.length; i++)
{
B1.elem[i - num] = B.elem[i];//B1.length=B.length-num;
B1.length++;
}
if (A1.length == 0 && B1.length == 0)
{
return 0;//A=B;
}
else if(A1.elem[0]<B1.elem[0])
{
return 1;//A<B;
}
else if (A1.elem[0] > B1.elem[0])
{
return -1;//A>B;
}
}
/********2.13********/
Location LOCATE(List &L, ElemType &e)
{
Location original;
while (L->Next != NULL && L->Date != e)
{
L = L->Next;
}
return L;
}
/********2.14*********/
ElemType LENGTH(List &L)//返回链表长度
{
int num=0;
Location original;
original = L;
while (L->Next != NULL)
{
num++;
L = L->Next;
}
L = original;
return num;
}
/********2.15*******/
List Connect(List &a, List &b,int m,int n)//m为链表a的长度,n为链表b的长度
{//将a链表与b链表链接起来给c
List c;
if (m <= n)
{
c = a;
while (a->Next != NULL)
{
a = a->Next;
}
a->Next = b->Next;
}
else
{
c = b;
while (b->Next != NULL)
{
b = b->Next;
}
b->Next = a->Next;
}
return c;
}
/*********2.19*********/
void deleteMN(List &L,const int mink,const int maxk)//删除表中所有大于mink并且小于maxk的元素
{
Location P = L, tmp;
while ( mink < maxk && P->Next != NULL)
{
tmp = P->Next;//保留前驱
if (tmp->Date > mink)
{
if (tmp->Date < maxk)
{
P->Next = tmp->Next;
free(tmp);
}
else {
break;
}
}
else {
P = P->Next;
}
}
}
/************2.21************/
void Sq_inversion(Sqlist &L)//实现线性表的就地逆置
{
ElemType temp;
for (int i = 0; i < L.length/2; i++)
{
temp = L.elem[i];
L.elem[i] = L.elem[L.length - 1 - i];
L.elem[L.length - 1 - i] = temp;
}
}
/************2.22************/
void List_inversion(List &L)//实现链表的就地逆置
{
List P = L->Next,Privious=L,temp=L,First=P;
while (P->Next != NULL)
{
L->Next = P;
temp = P->Next;
P->Next = Privious;//记住先前的位置
Privious = P;
P = temp;
}
P->Next = L->Next;
L->Next = P;
First->Next = NULL;
}
/************2.24************/
List Merge(List &A, List &B)//A,B都为递增序列,故返回合并的序列也为递增序列;
{
List C=A,original=A;
A = A->Next; B = B->Next;
while (A != NULL && B != NULL)
{
if (A->Date <= B->Date)
{
C->Next = A;
A = A->Next;
}
else {
C->Next = B;
B = B->Next;
}
C = C->Next;
}
if (A != NULL) { C->Next = A; }
if (B != NULL) { C->Next = B; }
return original;
}
/************2.27************/
Sqlist gatherSq(Sqlist &A, Sqlist &B) //顺序表求A与B的交集
{
Sqlist C; InitList_Sq(C); C.elem[0] = -1;//定义C的第一个成员让其与A不一样
ElemType i = 0, j = 0, num = 0, index = 0;
while (i < A.length && j < B.length)
{
if(A.elem[i] == B.elem[j] && C.elem[index]!= A.elem[i])

C.elem[num] = A.elem[i]; num++; 
index = num - 1;
C.length++; i++;
}
if((A.elem[i] < B.elem[j])
|| (A.elem[i] == B.elem[j] && C.elem[index] == A.elem[i])) 
{  i++; } //为了避免C的元素重复一次
if (B.elem[j] < A.elem[i]) { j++; }
}
return C;
}
/************2.28************/
List gatherL(List &A, List&B)//线性表求A与B的交集,释放A中无用的结点,B执行完后会回到原结点
{
List C = A, originalA = A,originalB=B,tmp; C->Date = -1;//定义C的一个特征值方便下面进行
A = A->Next; B = B->Next;
while (A != NULL && B != NULL)
{
if (A->Date == B->Date && C->Date != A->Date)
{
C->Next=A;
C = C->Next;
C->Date = A->Date;
A = A->Next;
}
if(A != NULL && B != NULL)
{
if (A->Date < B->Date  || (A->Date == B->Date && C->Date == A->Date)) { tmp = A->Next; free(A); A = tmp; }
if (A->Date > B->Date) { tmp = B->Next; B = tmp; } //free(B);
}
}
C->Next = NULL;
B = originalB;
return originalA;
}
/************2.29************/
Sqlist delete_mixSq(Sqlist &A, Sqlist &B, Sqlist &C)
{
ElemType i=0,j=0;
B = gatherSq(B, C); 
B = gatherSq(A, B);
if (B.length == 0)
{
return A;
}
else
{
while (j < B.length && i < A.length)
{
if (A.elem[i] == B.elem[j] )
{
Delete_Sq(A, i+1); //删除时elem会迁移一个单位;
if (A.elem[i] != B.elem[j])
j++;
}
else i++;
}
}
return A;
}
/************2.30************/
List delete_mixL(List &A, List &B, List &C) //除去A中B与C的交集;
{
List temp,previous,original;
original = A;
B = gatherL(C, B);
B = gatherL(B, A);
Show_List(A);
if (B->Next == NULL)
{
return A;
}
else
{
B = B->Next; previous = A; A = A->Next;
while (B != NULL && A != NULL)
{
if (B->Date == A ->Date)
{
temp = A->Next; previous->Next = temp; 
free(A); A = temp;
if (B->Date != A->Date)//为了防止错过下一个值的判断,所以应在确保这次A里面的元素全删
{   //完了之后,将B指向下一个驱动元
B = B->Next;
}
}
else { previous = A; A = A->Next; }//这里一定要留有前驱,才方便后面删去
}
}
A->Next = NULL;
A = original;
return A;
}
/************2.38************/
ListL LOCATE_L(ListL &L, ElemType &e)//返回访问元素e的位置,并且记录访问频度,使得被访问多的结点
{ // 总是靠近头结点
ListL original=L,tmp,position;
while (L->Next != original && L->Date != e)
{
L = L->Next;
}
L->freq++; position = L;
while (L->prior!= original)
{
if (L->freq > L->prior->freq)//需解决的问题涉及三个节点
{
tmp = L->prior; L->prior = tmp->prior; tmp->Next = L->Next;
L->Next->prior = tmp;
tmp->prior->Next = L;//这个很关键,经常会漏掉
tmp->prior = L; L->Next = tmp;
}
else L = L->prior;
}
L = position;
return L;
}
/************2.39************/
ElemType Caculate_Polyn(const SqPoly &L,ElemType x0)//计算一元多项式x0的值
{
int value=0;
for (int i = 0; i < L.length; i++)
{
value = value + L.data[i].coef*pow(x0, L.data[i].exp);
}
return value;
}
/************2.41************/
PolyNode_L derivation(PolyNode_L &L)//求一元多项式的导数
{
PolyNode_L Position = L,original=L; L = L->Next;
while (L->Next != NULL)
{
L->data.coef = L->data.exp*L->data.coef;
L->data.exp--;
Position = L;
L = L->Next;
}
free(L); Position->Next = NULL;
L = original;
return L;
}
void main()
{
/****2.11****/
/* Sqlist va;
InitList_Sq(va);
va_init(va);
XInsert_Sq(va, 15);
Show_Sq(va);*/


/****2.12****/
/*Sqlist A, B;
InitList_Sq(A);
InitList_Sq(B);
A_init(A);
B_init(B);
int result = Compare_Sq(A, B);
cout << result << endl;*/


/****2.13****/
/*List L;
int e = 5;
L_init(L);
Show_List(L, 10);
Location p=LOCATE(L, e);
cout << p->Next->Date;*/

/****2.14****/
/*List L;
L_init(L);
int num = LENGTH(L);
cout << num << endl;
DeleteList(L);*/


/****2.15****/
/*List a, b, c;
L_init(a,1); L_init(b);
c = Connect(a, b, 10, 10);
Show_List(c);*/


/****2.19****/
/*List a; L_init(a);
deleteMN(a, 10, 30);
Show_List(a);*/


/****2.21****/
/*Sqlist L; InitList_Sq(L); Sq_init(L);
Sq_inversion(L);
Show_Sq(L);*/

/****2.22****/
/*List L; L_init(L);
List_inversion(L);
Show_List(L);*/


/****2.24****/
/*List A, B; L_init(A); L_init(B,2);
A = Merge(A, B);
List_inversion(A);
Show_List(A);*/


/****2.27****/
/*Sqlist A, B;
InitList_Sq(A); InitList_Sq(B);
Sq_init(A,1); Sq_init(B,2);
A=gatherSq(A, B); Show_Sq(A);*/


/****2.28****/
/*List A, B; L_init(A); L_init(B, 2);
A = gatherL(A, B); Show_List(A);*/


/****2.29****/
/*Sqlist A, B,C;
InitList_Sq(A); InitList_Sq(B); InitList_Sq(C);
Sq_init(A, 1); Sq_init(B, 2); Sq_init(C,3);
delete_mixSq(A, B, C);
Show_Sq(A);*/


/****2.30****/
/*List A, B, C;
L_init(A, 1); L_init(B, 2); L_init(C, 3);
delete_mixL(A, B, C);
Show_List(A);*/


/****2.33****/
/*ListL A,original; LL_init(A, 3);
original = A;
ElemType e = 18;
LOCATE_L(A, e); 
A = original;
Show_LList(A);*/


/****2.39****/
/*SqPoly L; ElemType x0,value; Init_Polyn(L);
cout << "Please enter x0: "; cin >> x0;
value=Caculate_Polyn(L,x0);
cout << "You will get the value: " << value << endl;*/


/****2.41****/
PolyNode_L L;
CreatePolyn_L(L);
Show_SqPolyn(L);
derivation(L);
Show_SqPolyn(L);
system("pause");
}
第1章 绪论 1.1 数据结构的基本概念和术语 1.1.1 引言 1.1.2 数据结构有关概念及术语 1.1.3 数据结构和抽象数据类型(ADT) 1.2 算法描述与分析 1.2.1 什么是算法 1.2.2 算法描述工具——C语言 1.2.3 算法分析技术初步 习题一 第2章 线性表 2.1 线性表的定义及其运算 2.1.1 线性表的定义 2.1.2 各种运算简介 2.2 线性表的顺序存储结构(向量) 2.2.1 顺序存储结构(向量) 2.2.2 向量中基本运算的实现 2.3 线性表的链表存储结构 2.3.1 单链表与指针 2.3.2 单链表的基本运算 2.4 循环链表和双向链表 2.4.1 循环链表 2.4.2 双向链表 2.4.3 顺序存储结构与链表存储结构的综合分析与比较 2.5 多项式相加问题 2.5.1 多项式相加的链表存储结构 2.5.2 多项式相加的算法实现 2.6 线性表的算法实现举例 2.6.1 实现线性表顺序存储结构及运算的C语言源程序 2.6.2 单链表处理的C语言源程序 习题二 第3章 栈和队列 3.1 栈 3.1.1 栈的定义及其运算 3.1.2 栈的顺序存储结构(向量) 3.1.3 栈的链表存储结构 3.1.4 栈的应用 3.2 队列 3.2.1 队列的定义及运算 3.2.2 队列的顺序存储结构(向量) 3.2.3 队列的链表存储结构 3.3 栈和队列的算法实现举例 习题三 第4章 串 4.1 串的基本概念 4.2 串的存储结构 4.2.1 串的顺序存储 4.2.2 串的链表存储 4.2.3 串变量的存储映象 4.3 串的运算 4.3.1 串的运算简介 4.3.2 串的匹配运算 4.4 文本编辑 习题四 第5章 数组和广义表 5.1 数组的基本概念 5.1.1 数组的概念 5.1.2 数组的顺序表示 5.1.3 特殊矩阵的压缩存储 5.2 稀疏矩阵的三元组存储 5.2.1 三元组表 5.2.2 稀疏矩阵的运算 5.3 稀疏矩阵的十字链表存储 5.3.1 十字链表的组成 5.3.2 十字链表的有关算法 5.4 广义表 5.4.1 广义表的概念和特性 5.4.2 广义表的存储结构 5.4.3 求广义表的深度 5.4.4 广义表的输出 5.4.5 建立广义表的存储结构 5.5 迷宫问题 习题五 第6章 树 6.1 树的基本概念和术语 6.1.1 树的定义 6.1.2 树的常用术语 6.1.3 树的表示方法 6.2 二叉树 6.2.1 二叉树的定义 6.2.2 二叉树的重要性质 6.2.3 二叉树的存储结构 6.2.4 二叉树二叉链表的一个生成算法 6.3 遍历二叉树 6.3.1 先根遍历 6.3.2 中根遍历 6.3.3 后根遍历 6.3.4 二叉树遍历算法的应用 6.4 线索二叉树 6.4.1 线索二叉树的基本概念 6.4.2 线索二叉树的逻辑表示图 6.4.3 中根次序线索化算法 6.4.4 在中根线索树上检索某结点的前趋或后继 6.4.5 在中根线索树上遍历二叉树 6.5 二叉树、 树和森林 6.5.1 树的存储结构 6.5.2 树与二叉树之间的转换 6.5.3 森林与二叉树的转换 6.5.4 一般树或森林的遍历 6.6 树的应用 6.6.1 二叉排序树 6.6.2 哈夫曼树及其应用 6.7 二叉树的建立和遍历C语言源程序示例 习题六 第7章 图 7.1 图的基本概念和术语 7.1.1 图的基本概念 7.1.2 路径和回路 7.1.3 连通图 7.1.4 顶点的度 7.2 图的存储结构 7.2.1 邻接矩阵 7.2.2 邻接链表 7.3 图的遍历和求图的连通分量 7.3.1 图的建立 7.3.2 图的遍历 7.3.3 求图的连通分量 7.4 图的生成树 7.4.1 生成树的概念 7.4.2 最小生成树 7.4.3 普里姆(Prim)算法和克鲁斯卡尔(Kruskal)算法 7.5 最短路径 7.5.1 单源顶点最短路径问题求解 7.5.2 求有向网中每对顶点间的路径 7.6 有向无环图及应用 7.6.1 拓扑排序 7.6.2 关键路径 7.7 图的算法C语言程序实现举例 7.7.1 无向图的邻接表的建立和遍历 7.7.2 有向无环图的拓扑排序和求关键路径 习题七 第8章 查找 8.1 基本概念
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值