公共基础知识教案最新.docx

上传人:b****5 文档编号:28206891 上传时间:2023-07-09 格式:DOCX 页数:35 大小:863.25KB
下载 相关 举报
公共基础知识教案最新.docx_第1页
第1页 / 共35页
公共基础知识教案最新.docx_第2页
第2页 / 共35页
公共基础知识教案最新.docx_第3页
第3页 / 共35页
公共基础知识教案最新.docx_第4页
第4页 / 共35页
公共基础知识教案最新.docx_第5页
第5页 / 共35页
点击查看更多>>
下载资源
资源描述

公共基础知识教案最新.docx

《公共基础知识教案最新.docx》由会员分享,可在线阅读,更多相关《公共基础知识教案最新.docx(35页珍藏版)》请在冰豆网上搜索。

公共基础知识教案最新.docx

公共基础知识教案最新

第一部分

程序=数据结构+算法

一、算法基本了解

二、数据结构的基本概念深刻理解

三、线性表及其顺序存储结构深刻理解

四、栈和队列深刻理解

五、线性链表基本了解

六、树与二叉树熟练应用

第一节算法

一.算法的基本概念

所谓算法是指解决方案的准确而完整的描述。

对于一个问题,如果可以通过一个计算机程序,在有限的存储空间内运行有限长的时间而得到正确的结果,则称这个问题是算法可解的。

例如:

把两个容器的液体交换一下。

它的算法是:

算法和程序是不太一样的。

程序可以作为算法的某种计算机语言的实例化。

算法是对问题的具体分析过程,是一个步骤的序列。

程序通常还需要考虑其它细节问题,因为我们必须要考虑计算机系统的具体运行环境。

算法的基本特征是:

可行性:

算法是可行的

确定性:

算法的每一步必须有明确定义,不允许有模棱两可的解释,更不允许有多义性

有穷性:

算法必须在有限的时间内做完,也就是说执行有限个步骤后终止

拥有足够的情报:

不同的输入会有不同的结果输出

综上所述:

算法是一组严谨地定义运算顺序的规则,并且每一个规则都是有效的,且是明确的,此规则序将在有限的次数下终止。

二.算法复杂度

时间复杂度:

执行算法所需要的计算工作量,也就是步骤有限。

空间复杂度:

执行算法所需要的内存空间。

第二节数据结构的基本概念

一.什么是数据结构

利用计算机进行数据处理时,我们经常面对的是海量的数据,这些数据元素都要存储到计算机中,那么这些数据如何组织是进行数据处理的第一步。

存储都做不到,怎么可能处理好呢?

可以说,大量的数据元素如何组织,以便提高数据处理的效率,并且节省计算机的存储空间,这是进行数据处理的关键问题。

一句话,程序执行的效率与数据的存储结构密切相关。

例如,校园的图书馆。

对于图书馆而言,数据元素就是一本本的书。

对这些数据元素存储时,必须要考虑:

1、节省空间。

2、方便查找和统计。

因此,我们需要认真研究一下数据的存储问题。

数据结构研究的就是如何把数据保存到计算机中,主要涉及到三个方面的问题:

●数据集合中各数据元素之间本来就有的逻辑关系,即数据的逻辑结构;

●在对数据进行处理时,各数据元素在计算机中的存储关系,即数据的存储结构;

●对各种存储结构进行运算。

讨论这些问题主要目的是为了提高书本处理的效率,并且节省图书馆的存储空间。

说到底什么是数据结构?

数据结构就是相互有关联的数据元素的集合。

在深入学习数据结构之前,我们先要掌握数据结构的几个概念:

1.数据元素:

一般来说,现实世界中客观存在的一切个体都可以是数据元素,例如:

描述一年四季的季节名:

春、夏、秋、冬可以作为季节的数据元素;表示数值的各个数18、11、35、23、16………可以作为数值的数据元素;表示家族成员的各成员名父亲、儿子、女儿可以作为家族成员的数据元素。

总之,在数据处理领域中,每一个需要处理的对象都可以抽象成数据元素,数据元素一般称之为元素。

2.数据的逻辑结构:

前面我们已经提到,数据结构是指相互有关联的数据元素的集合。

更通俗地讲,数据结构是带有结构的数据元素的集合。

例如,我们前面提到的一年四季的季节名:

春、夏、秋、冬。

“春”是“夏”的前驱,“夏”是“春”的后继;同样,“夏”是“秋”的前驱,“秋”是“夏”的后继。

数据元素之间的前驱、后继关系就是数据的逻辑结构,这与它们在计算机中的存储位置无关。

3.数据的物理结构:

在利用计算机进行数据处理时,总是要考虑被处理的各数据是如何存放在计算机的存储空间的;并且,各数据元素在计算机存储空间中的位置关系与它们的逻辑关系不一定相同,而且一般也是不可能相同。

数据的逻辑结构在计算机存储空间的存放形式称之为数据的存储结构。

也称之为数据的物理结构。

二.数据的逻辑结构的分类

如果在一个数据结构中一个数据元素都没有,则称该数据结构为空的数据结构。

根据数据结构中各数据元素之间前后件关系的复杂程度,一般把数据结构分为两个大的类型:

线性结构和非线性结构。

线性结构也称之为线性表:

应该满足以下两个条件:

●有且只有一个根结点;

●每一个结构最多只能有一个前驱,也最多只能有一个后继。

例如:

买火车票时排的长队就是一个线性的结构。

很多数据结构并不是线性的,例如:

反映家族成员间辈分关系的数据结构。

第三节线性表及其顺序存储结构

一、线性表的基本概念

线性表是最简单、最常用的数据结构。

是由n个数据元素a1,a2,…,an组成的一个有限序列,表中的每一个数据元素,除第一个外,有且只有一个前驱,除最后一个之外,有且只有一个后继。

例如,下面有一个表格:

姓名

学号

性别

年龄

健康状况

王强

800356

19

良好

刘建平

800357

20

一般

赵军

800361

19

良好

葛文华

800367

21

较差

……

……

……

……

……

我们曾经提到过,对于数据库表来说,每一条记录是一个整体。

因此,在数据库表中,数据元素不再是简单项,每个数据元素都由五个数据项组成。

从数据结构的观点来研究这个表,我们可以认为这是一个由多个记录构成的线性表。

二、线性表的顺序存储结构

在计算机中存放线性表,最简单的方法是顺序存储,我们用数组来实现。

顺序存储结构具有以下两个基本特点:

●线性表的所有元素所占的存储空间是连续的;

●线性表中各元素在存储空间中是按逻辑顺序依次存放的。

在线性表的顺序存储结构中,如果线性表中各数据元素所占的存储空间相同,则要在该线性表中查找某一个元素是很方便的。

假设线性表中的第一个数据元素的存储地址为ADR(a1)。

每个数据元素占k个字节,则线性表中第i个元素ai在计算机存储空间中的存储地址是

ADR(ai)=ADR(a1)+(i-1)K

即在顺序存储结构中,线性表中每一个数据元素在计算机存储空间中的存储地址由该元素在线性表中的位置序号惟一确定。

三、顺序表的插入运算

一般情况下,我们用数组来实现线性表的顺序存储。

看一个例子,把一个长度为8的线性表顺序存储在一个长度为10的存储空间中。

现在要求在第2个元素之前插入一个新元素。

我们看一下操作过程:

首先从最后一个元素开始到第2个元素,将其中的每一个元素均依次往后移动一个位置,然后再把新的元素插入到第2个位置。

如果再要在线性表的第9个元素之前插入一个新元素14,则采用类似的办法来。

现在,为线性表开辟的空间已经存满了,不能再插入新的元素了。

如果再插入,则会造成称为“上溢“的错误。

在一般情况下,要在第i个元素之前插入一个新元素时,首先要从最后一个元素开始,直到第i个元素之间共n-i+1个元素依次向后移动一个位置,移动结束后,第i个位置就被空出,然后将新元素插入到第i项。

一起分析一下它的复杂度:

如果是在线性表的末尾进行插入,不需要移动表中的元素;如果要在第1个元素之前插入一个新元素,则需要移动表中所有的元素;如果插入在第i个元素之前进行,则原来第i个元素包括它自己都要被移动。

在平均情况下,要在线性表中插入一个新元素,需要移动表中的一半的元素。

四、顺序表的删除运算

在一般情况下,要删除第i个元素时,则要从第i+1个元素开始,走到第n个元素之间共n-i个元素依次向前移动一个元素。

如果分析这种算法的复杂度,也要移动表中的一半的元素。

第四节栈和队列

栈和队列均是在操作上比较特殊的线性表,它们的逻辑结构依然是线性的,存储结构?

一、栈及其基本运算

栈是一种特殊的线性表。

特殊在插入和删除操作上。

在这种线性结构中,一端是封闭的,另一端是开口的。

也就是说,对这种类型线性表的运算是不允许移动表中其他数据元素的。

栈(stack)是限定在一端进行插入和删除的线性表。

栈顶:

允许进行插入与删除操作的一端;栈底:

不允许进行插入和删除另一端。

栈项元素是最后被插入的元素,从而也是最先被删除的元素;栈底元素总是最先被插入的元素,从而也是最后才能被删除的元素。

即栈按照“先进后出”或者是“后进先出”的原则组织数据。

通常我们用top表示栈项bottom表示栈底。

往栈中插入一个元素称为进栈,从栈中删除一个元素称为出栈。

举个例子吧:

弹夹………

以上只是关于栈的逻辑结构。

栈是物理结构又是什么样子的?

与一般的线性表一样,在程序设计语言中,也是用一维数组来作为栈的顺序存储空间:

栈底就是数组地址空间的低地址那一端(即栈底指向了数组的起始地址)也就是说,栈的顺序存储结构是一维数组。

 

图a是一个容量为10的栈顺序存储空间,栈中已有6个元素;图b和图c分别是入栈和退栈后的状态。

在栈的顺序存储空间中S(1:

m),S(bottom)通常指栈底元素,S(top)为栈顶元素。

Top=0表示栈空,top=m表示栈满。

二、队列及其基本运算

在计算机系统中,如果一次只能执行一个用户程序,则在多个用户程序需要执行时,这些用户程序必须先按照到来的顺序进行排队等待。

计算机管理系统,通常用一个线性表来组织管理用户程序的排队执行,原则是:

●初始时,线性表为空;

●当有用户程序来时,将该用户程序加入到线性表的末尾进行等待;

●当计算机管理系统执行完当前的用户程序时,就从线性表的头部再取出一个用户程序执行。

也就是说,在这种线性表中,需要加入的元素总是插入到线性表的末尾,并且又总是从线性表的头部取出元素。

这种线性表称为队列。

队列(queue)是指允许在一端进行插入、而在另一端进行删除的线性表。

允许插入的一端称为队尾,通常用一个称为rear的指针指向队尾元素;允许删除的一端称为队头,通常用一个称为front的指针指向队头元素。

这样的话,最先插入的元素将最先被删除,反之,最后插入的元素将最后才被删除。

因此,队列,也称之为“先进先出”。

看下面的图解:

 

再看一下,关于队列操作的图解:

 

队列的顺序存储结构一般采用循环队列的形式。

如下图所示:

 

初始条件下:

front=rear=0

插入一个元素,则队尾rear++,删除一个元素则队头front++。

这里要解决的关键问题是“数组越界,但未占满空间”。

 

我们在火车站排队买票时,也是一个队列,也是从队头出,从队尾进,但是,从来没有遇到过“越界”的问题(队列的长度是有限的,但是,从来不会有人进不去,因为,有人出队列后,后面的“元素”都在向前移,这种做法在计算机中显然是无法实现的,因为要消耗大量的CPU资源)。

我们在计算机中以是如何解决呢?

我们使用的是数学中的“取余”的办法。

就是说,每次加入元素,队尾指针加1后再取对数组的总量取余。

所以,我们得到了下面的这个式子:

 

第五节线性链表

一、线性链表的基本概念

我们前面主要学习的内容是线性表的逻辑结构和它的顺序存储,以及和顺序存储相关的基本操作。

还研究了两个具有特殊操作的线性表:

堆栈和队列。

有些情况下,对线性表进行顺序存储并不明智:

1.一般情况下,在顺序存储的线性表中插入或删除一个新元素时,为了保证修改后的线性表仍然是顺序存储,需要移动大量的元素;

2.使用顺序存储空间存储线性表时,如果线性表的存储空间已满,但还需要插入新的元素时,会发生“上溢”错误。

3.实际应用时,常常是多个线性表存储在内存中,此时分配内存空间时会变得非常麻烦。

对于大的线性表,特别是元素变动频繁的大线性表不宜采用顺序存储结构,最好采用链式存储结构:

假设数据结构中的每一个数据结点对应一个存储单元,这种存储单元称为存储结点,简称结点。

在链式存储结构中,要求每个结点由两部分组成:

一部分用于存入数据元素值,称为数据域;另外一部分用于存放指针,称为指针域。

其中指针域里的指针用于指向该结点的前一个或后一个结点。

在这种存储结构中,存储数据结构的存储空间可以不连续,各数据结点的存储顺序与数据元素之间的逻辑关系可以不一致,数据元素之间的逻辑关系是由指针域来确定的。

线性表的链式存储结构称为线性链表。

为了适应线性表的链式存储结构,计算机存储空间被划分为一个一个小块,每一个小块占若干个字节,通常称这些小块为存储结点。

为了存储线性表中的每一个元素,一方面要存储数据元素的值,另一方面要存储各数据元素之间的前后件关系。

所以,我们把存储空间中的每一个存储结点分为两部分:

数据域和指针域。

在线性链表中,用一个专门的指针HEAD指向线性链表中第一个数据元素的结点(即存储线性表中第一个数据元素的存储结点的序号)。

线性表中最后一个元素没有后件,因此,线性链表中最后一个结点的指针域为空,表示链表到此为止。

线性表的逻辑状态和物理状态如下图所示:

 

一般来说,线性表的链式存储结构中,各数据结点的存储序号是不连续的。

在线性链表中,各数据元素之间的前后件关系是由各结点的指针域来指示的,指向线性链表的第一个结点的指针HEAD称为头指针,当HEAD=0时或NULL时,称为空表。

对于线性链表,可以从头指针开始,沿各结点的指针扫描到链表中的所有结点。

我们现在讨论的线性链表称为线性单链表。

在这种链表中,每一个结点只有一个指针域,由这个指针只能找到后件结点,但不能找到前件结点。

所以,这种线性链表中,只能顺指针向链尾方向进行扫描,这对于某些问题的处理会带来不便,因为在这种链接方式下,由某一个结点出发,只能找到它的后件,而为了找出它的前件,必须从对指针开始重新寻找。

为了弥补线性单链表的这个缺点,在某些应用中,对于线性链表中每个结点设置两个指针,一个称为左指针,用左指向其前件结点;另一个称为右指针,用右指向其后件结点。

这样的线性链表称为双向链表,其状态如图:

 

二、线性链表的基本运算

在对线性链表进行插入和删除运算时,首先需要找到插入或删除的位置,这就需要对线性链表进行扫描查找:

例如:

在非空线性链表中寻找包含指定元素值x的前一个结点p。

从头指针指向的结点开始往后沿指针进行扫描,直到后面已经没有结点或下一个结点的数据就是x为止。

这种查找方法会遇到两种可能:

1、当线性链表中存在包含元素x的结点时,则找到的p为第一次遇到的包含元素x的前一个结点的序号;2、当线性链表中不存在包含元素x的结点时,找到的p为线性链表中的最后一个结点号。

我们用图来解释如何对线性链表进行简单的插入和删除操作:

 

 

三、循环链表及其基本运算

前面的线性链表的插入和删除操作运算可能比较简单,但存在很多问题。

我们再引入另一种链接方式,循环链表,它有两个特点:

1、增加了一个表头结点,其数据域为任意或者根据需要进行设置,指针域指向线性表的第一个元素的结点。

循环链表的头指针指向表头结点;

2、循环链表中最后一个结点的指针域不为空,而是指向表头结点。

即在循环链表中,所有的指针构成了一个环状链。

如下图所示:

在循环链表中,只要指出表中任何一个结点的位置,就可以从它出发访问到表中其他所有的结点,这对于线性链表是不可能完成的任务。

第六节树与二叉树

一、树的基本概念

树是一种简单的非线性结构。

在这种数据结构中,所有的数据元素之间呈现一种明显的层次特性。

看下面的图:

 

族谱使用的就是这种结构。

这是一棵倒长的树。

在树的图形表示中,上端结点是前件,下端结点是后件。

在现实世界中,能用树这种数据结构的例子还很多,例如,学校的行政关系,计算机的目录:

在所有的层次关系中,人们最熟悉的是血缘关系,按血缘关系可以很直观地理解树结构中各种数据元素结点之间的关系,因此,在描述树结构时,也经常使用血缘关系中的一些术语。

在树结构中,每一个结点只有一个前件,称为父结点,没有前件的结点只有一个,称为树的根结点,简称为树的根。

每一个结点可以有多个后件,它们都称为该结点的子结点。

没有后件的结点称为叶子结点。

一个结点所拥有的后件个数称为该结点的度。

在树中,所有结点中的最大的度称为该树的度。

叶子结点的度是?

前面已经谈过,树结构有明显的层次关系,即树是一种层次结构。

根结点在第一层。

同一层的所有结点的所有子结点都在下一层。

树的最大层数称为树的深度。

在树中,以某结点的一个子结点为根构成的树称为该结点的一棵子树。

当然叶子结点没有子树。

 

二、二叉树及其基本性质

二叉树是树的一种特例,它具有以下两个特点:

●非空二叉树只有一个根结点;

●每一个结点最多有两棵子树,且分别称为该结点的左子树和右子树。

在树的结构中,每一个结点的度可以是任意的,而对于二叉树而言,每一个结点的度最大为2.

满二叉树:

指的是除最后一层外,每一层上的所有结点都有两个子结点。

完全二叉树:

指的是除最后一层外,每一层上的所有结点都有两个子结点。

最后一层上只缺少右边的若干结点。

 

二叉树有下面几个性质:

●在二叉树的第K层上,最多有2k-1个结点;

●深度为m的二叉树最多有2m-1个结点;

●在任意一个二叉树上,度为0的结点总是比度为2的结点多一个:

设二叉树有n0个叶子结点,n1个度为1的结点n2个度为2的结点,则结点总数为n=n0+n1+n2

那么分支总数为n1+2n2所以,n1+2n2+1=n0+n1+n2

●具有n个结点的二叉树,其深度至少为[log2n]+1,其中表示取整数部分。

 

三、二叉树的存储结构

在计算机中,二叉树通常采用链式存储结构。

用于存储二叉树的存储结点也由两部分组成:

数据域和指针域。

但在二叉树中,由于每一个元素可以有两个后件(即可以有两个子结点),因此,用于存储二叉树的存储结点的指针域有两个:

一个用于指向该结点的左子结点的存储地址,称为左指针域;另一个用于指向该结点的右子结点的存储地址,称为右指针域。

四、二叉树的遍历

二叉树的遍历指的是不重复地访问二叉树中的所有结点。

在遍历二叉树中,当访问到某个结点时,再往下访问可能有两个分支,那么先访问哪一个分支呢?

我们做一个约定,先访问左子树,后访问右子树。

于是,在遍历二叉树时,根、左子树、右子树三者就构成了三种关系:

●先序遍历:

先遍历根再遍历左子树,后遍历右子树;

●中序遍历:

先遍历左子树再遍历根,后遍历右子树;

●后序遍历:

先遍历左子树再遍历右子树,后遍历根。

第七节查找技术

查找是数据处理领域中的一个重要内容,查找的效率将直接影响到数据处理的效率。

根据不同的数据结构,应采用不同的查找方法。

一、顺序查找

从线性表的第一个元素开始,依次将线性表中的元素与被查找元素相比较,若相等则表示查找成功。

若所有元素都与被查元素比较但都不相等,则表示查找失败。

进行顺序查找时,若被查找的是第一个元素,那查找效率非常高,若查找的是最后一个元素,或者根本就不可能找到这个元素,这是顺序查找的最坏情况。

在平均情况下,利用顺序查找,大约要与线性表中的一半元素进行比较。

二、二分法查找

只适用于顺序存储的有序表。

在此所说的有序表中的元素按值大小排列。

方法如下:

将被查元素与表的中间项进行比较;

●若是则找到,查找结束,若小于中间项的值,则在线性表的前半部分查找以相同的方法进行下一轮的查找;

●查大于中间项的值,则在线性表的后半部分查找以相同的方法进行下一轮的查找。

显然,当有序线性表为顺序存储时才能采用二分查找,并且,二分查找要比顺序查找效率高得多。

可以证明,对于长度为n的有序线性表,在最坏情况下,二分法查找中需要log2n次,而顺序查找需要比较n次。

第八节排序技术

一、交换类排序法

分为冒泡排序和快速排序。

最糟的情况都需要n(n-1)/2次。

二、插入类排序法

 

三、选择类排序法

算法的有穷性是指

A.算法程序的运行时间是有限的B.算法程序所处理的数据量是有限的

C.算法程序的长度是有限的D.算法只能被有限的用户使用

下列叙述中正确的是

A.程序执行的效率与数据的存储结构密切相关

B.程序执行的效率只取决于程序的控制结构

C.程序执行的效率只取决于所处理的数据量

D.以上三种说法都不对

还记得我们研究数据结构的目的吗?

提高数据处理的效率,并且节省计算机的存储空间。

程序执行的效率与数据的存储结构密切相关。

(6)下列叙述中正确的是

A.数据的逻辑结构与存储结构必定是一一对应的

B.由于计算机存储空间是向量式的存储结构,因此,数据的存储结构一定是线性结构

C.程序设计语言中的数组一般是顺序存储结构,因此,利用数组只能处理线性结构

D.以上三种说法都不对

各数据元素在计算机存储空间中的位置关系与它们的逻辑关系不一定相同,而且一般也是不可能相同

(1)下列叙述中正确的是

A)算法的效率只与问题的规模有关,而与数据的存储结构无关

B)算法的时间复杂度是指执行算法所需要的计算工作量

C)数据的逻辑结构与存储结构是一一对应的

D)算法的时间复杂度与空间复杂度一定相关

算法的效率主要体现在数据处理的效率上,上一题刚说过,程序执行的效率与数据的存储结构密切相关。

(4)下列叙述中正确的是

A)顺序存储结构的存储一定是连续的,链式存储结构的存储空间不一定是连续的

B)顺序存储结构只针对线性结构,链式存储结构只针对非线性结构

C)顺序存储结构能存储有序表,链式存储结构不能存储有序表

D)链式存储结构比顺序存储结构节省存储空间

线性存储结构也可以使用链式存储结构。

链式存储结构当然可以存储有序表。

链式存储结构并不节省存储空间,因为,我们增加了指针域。

这也是要占用一定内存空间的。

下列叙述中正确的是

A线性链表是线性表的链式存储结构B栈与队列是非线性结构

C双向链表是非线性结构D只有根结点的二叉树是线性结构

(1)一个栈的初始状态为空。

现将元素1、2、3、4、5、A、B、C、D、E依次入栈,然后再依次出栈,则元素出栈的顺序是

A)12345ABCDE                         B)EDCBA54321

C )ABCDE12345                          D)54321EDCBA

(2)下列叙述中正确的是

A)循环队列有队头和队尾两个指针,因此,循环队列是非线性结构

B)在循环队列中,只需要队头指针就能反应队列中元素的动态变化情况

C)在循环队列中,只需要队尾指针就能反应队列中元素的动态变化情况

D)循环队列中元素的个数是由队头和队尾指针共同决定

 

(7)下列关于栈的叙述正确的是

A.栈按“先进先出”组织数据B.栈按“先进后出”组织数据

C.只能在栈底插入数据D.不能删除数据

(5)下列对列的叙述正确的是

A)队列属于非线性表B)队列按“先进后出”原则组织数据

C)队列在队尾删除数据D)队列按“先进先出”原则组织数据

线性表的存储结构主要分为顺序存储结构和链式存储结构。

队列是一种特殊的线性表,循环队列是队列的(3)存储结构。

顺序

(8)一棵二叉树中共有70个叶子结点与80个度为1的结点,则该二叉树中的总结点数为

A.219B.221C.229D.231

对下列二叉树

进行前序遍历的结果为

A)DYBEAFCZXB)YDEBFZXCA

C)ABDYECFXZD)ABCDEFXYZ

某二叉树中有n个度为2的结点,则该二叉树中的叶子结点为

A)n+1B)n-1C)2nD)n/2

在深度为7的满二叉树中,叶子结点的个数为

A32B31C64D63

(2)深度为5的满二叉树有__个叶子结点。

(1)在深度为7的满二叉树中,度为2的结点个数为_________。

 

第二部分程序设计基础

第一节程序设计方法与风格

了解了算法和数据结构之后,我们要进入到真正的程序设

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 幼儿教育 > 唐诗宋词

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1