C语言动态数据结构.pptx
《C语言动态数据结构.pptx》由会员分享,可在线阅读,更多相关《C语言动态数据结构.pptx(62页珍藏版)》请在咨信网上搜索。
目录态数据结构n本章开始介绍动态数据结构,主要介绍链表结构的建立、在链表中查找指定元素、插入一个新元素、删除一个元素等操作。学完本章内容后,要求深刻理解动态存储结构的概念,并正确运用。7.1 从静态数据结构到动态数据结构n在此之前,我们涉及到的都是静态数据结构,像数组、简单类型(int、float)等。静态数据结构的特点是由系统分配固定大小的存储空间,以后在程序运行的过程中,存储空间的位置和容量都不会再改变。而实际生活中常常有这样的问题,数据量的多少是动态变化的。7.1 从静态数据结构到动态数据结构n例如,图书馆的藏书量,在图书馆初建时,假设有10000本,随着时间的推移,藏书的数量必定要增加。有人可能会想,在定义一个静态变量时,预留出一部分空间,但这也会引起一些问题,首先多出的那部分空间不知何时才能使用,在没有被使用之前一直被闲置;其次,谁又能保证增加的空间就足够呢?7.1 从静态数据结构到动态数据结构n问题的关键在于,此问题的数据本身就是变化的,而且是不确定的变化,什么时候变、怎么变都是未知的。对这样的问题用静态存储结构来描述和存放显然捉襟见肘,存在隐患。n动态数据结构不确定总的数据存储量,而是为现有的每一个数据元素定义一个确定的初始大小的空间,若干个数据元素分配若干个同样大小的空间;当问题的数据量发生变化时,数据的存储空间的大小也发生变化。如果数据量增加,就重新向系统申请新的空间;如果数据量减少,就将现有的多余的空间归还给系统。7.2.动态内存分配n使用计算机解决问题的所有方法都是通过使用系统提供给我们的基本命令或函数来实现的。所以首先让我们来看看,c的标准函数中有哪些是用于动态内存分配的,怎样使用。7.2.1 ANSI C 中动态内存操作标准函数nANSI C中提供了若干个动态内存操作标准函数,它们的名称分别是malloc、calloc、realloc、free等。这些函数可以使用在任何的C环境中。1malloc函数函数nmalloc函数是 C的标准函数之一。原型定义在malloc.h文件中。n原型为:nvoid*malloc(unsigned int size);n其作用是向系统申请一个确定大小(size 个字节)的存储空间,返回值为一个指向void类型的分配域起始地址的指针值。如果此函数操作失败,返回值为空。1malloc函数函数使用格式:指针型变量=(基类型*)malloc(需要的存储空间的字节数);例7-1:为一个整数分配存储空间,需要的语句为:在文件的头部:#include 在说明部分:int*p;在程序中:p=(int*)malloc(sizeof(int);测试malloc的程序举例:n#include n#include n#include nvoid main()nnint*p;/*定义一个指向整型的指针变量定义一个指向整型的指针变量*/nint x;np=(int*)malloc(sizeof(int);nif(!p)exit(0);p=&x;nscanf(“%d”,p);printf(“x=%d”,x);n2calloc函数函数ncalloc函数是 C的标准函数之一。原型定义在malloc.h文件中。n原型为:nvoid*calloc(unsigned int n,unsigned int size);n其作用是向系统申请 n 个大小为size 个字节的连续存储空间,返回值为一个指向void类型的分配域起始地址的指针值。如果此函数操作失败,返回值为空。可以为一维数组开辟一片连续的动态存储空间。2calloc函数函数n使用格式:指针型变量=(数组元素类型*)calloc(n,每一个数组元素的存储空间的字节数);n例7-2:为一个有10个整数的一维数组分配存储空间,需要的语句为:在文件的头部:#include 在说明部分:int*p;在程序中:p=(int*)calloc(10,sizeof(int);使用使用calloc函数程序举例:函数程序举例:#include#include#include main()int*p;int x;p=(int*)calloc(10,sizeof(int);if(!p)exit(0);for(i=0;i10;i+)scanf(“%d”,&x);*(p+i)=x;for(i=0;i10;i+)printf(“%6d”,*(p+i);3realloc函数函数nrealloc函数是 C的标准函数之一。原型定义在malloc.h文件中。n原型为:nvoid*realloc(void*p,unsigned int size);n其作用是向系统重新申请一个确定大小的存储空间,并将原存储空间中的数据值传送到新的地址空间的低端,返回值为一个指向void类型的分配域起始地址的指针值。如果此函数操作失败,返回值为空。原存储空间的数据将丢失。3realloc函数函数使用格式:指针型变量=(基类型*)realloc(原存储空间的首地址,新的存储空间的字节数);例7-3:现有一个为10个整数分配的存储空间,其首地址为p1;由于数据量的增加,原存储空间已满,需要扩大原空间为20个整数的大小;需要的语句为:在文件的头部:#include 在说明部分:int*p2;在程序中:p2=(int*)realloc(p1,sizeof(int)*20);程序举例:n#include n#include n#include n main()n int*p1,*p2;n int x;n p1=(int*)malloc(sizeof(int)*10);n if(!p1)exit(0);n p2=(int*)realloc(p1,sizeof(int)*20);n if(!p2)exit(0);nn realloc 函数主要的用于当原分配空间已被占满,而新的数据又要加入到该空间时的状况。它的优点是可以自动地将原空间的内容全部传递到新空间中,不必程序员再编语句来实现。缺点是一旦新空间申请失败,原空间的内容也将丢失。对这一点,使用时应加以注意。4free函数函数free函数是 C的标准函数之一。原型定义在malloc.h文件中,原型为:void free(void *p)其作用是释放由p所指的内存区,将一个存储空间归还给系统。使用格式:free(指针型变量);例7-4:将一个已分配存储空间释放,需要的语句为 在文件的头部:#include 在说明部分:int*p;在程序中:free(p)程序举例:程序举例:n#include n#include n#include nmain()n int*p;n p=(int*)malloc(sizeof(int);n if(!p)exit(0);n free(p);c+中为进行动态操作提供的运算符new和deleten在软件的研制过程中,程序中动态申请内存空间和释放内存空间是一件很常见的事,前面一节中,我们讲解了ANSI C 中的办法。利用标准库函数malloc、calloc、reallloc、free等。但malloc、calloc、reallloc等函数都要求程序设计者知道应开辟空间的确切大小,返回值的类型需要强制类型转换。nc+中对此进行了改进,为进行动态内存操作提供了运算符new和delete,来代替malloc和free。但在c+中依然保留了malloc和free,以便和C兼容。1new 运算符运算符nnew 是c+中提供的用于开辟一个动态存储空间的运算符。nnew 运算符的一般格式:n变量指针=new 类型(初值);n例如:n(1)申请一个存放整数的空间:语句格式:p=new int;执行结果:开辟了一个整数大小的空间,并将该空间的首地址送入指向整型数据的指针变量p中。(2)申请一个存放字符型数据的空间,并为该空间赋初值a:语句格式:p=new char(a);执行结果:开辟了一个字节大小的空间,并将该空间的首地址送入指向字符型数据的指针变量p中。P所指空间中的数据值为字符 a。(3)申请一个存放实数的空间:语句格式:p=new float(1.414);执行结果:开辟了一个实数大小的空间,并将该空间的首地址送入指向实型数据的指针变量p中。并将该空间中赋入初值1.414。(4)申请一个存放10个实数的数组的空间:语句格式:p=new float10;执行结果:开辟了一个10个实数大小的空间,将该空间的首地址送入指向实型数据的指针变量p中。注意:用new 为数组分配空间不能指定初值。2delete 运算符:运算符:ndelete 运算符是c+中的提供的实现动态内存释放功能的运算符,类似于标准库函数 free。n一般格式为:delete 名字指针;例如:n(1)释放一个存放整数的空间:如果 p=new int;则释放一个存放整数的空间的语句为:delete p;执行结果:将该整数空间释放掉,即将该资源归还给系统。2delete 运算符:运算符:n(2)释放一个存放10个实数的数组的空间:如果:p=new float10;则释放一个数组空间的语句为:delete p;执行结果:将该数组空间释放掉,即将该资源归还给系统。2delete 运算符:运算符:nnew 试图创建一个名字类型的对象,向系统申请sizeof(名字)个字节大小的空间。新对象的生存周期始于创建点,直到delete将其释放或到程序结束。如果申请成功,返回指向新对象的指针;若返回的指针为空指针,表示动态空间分配失败。注意:delete只能用于用new分配的内存的释放。例7-5申请一个结构体类型的存储空间,用来存放相应类型的数据。解决问题要点:q包含相关的头文件;q定义一个结构体类型;q定义结构体类型的变量;q申请空间;q对指定空间赋值;q释放申请的空间;程序举例:程序举例:n#include n#include n#include n#include ntypedef struct LNode n int data;n struct LNode*next;n LNode;nmain()n n LNode*p;n p=new LNode;n if(!p)exit(0);n p-data=10;n p-next=NULL;n delete p;n1.new 与malloc 的相同点是他们的作用都是在程序的执行过程中向系统申请存储空间,返回值都是申请到的存储空间的首地址,不同点是,malloc 是c编译系统提供的标准库函数,new 是c+系统提供的运算符,new的操作效率要高于malloc;2.new不需要使用显式的sizeof函数就能知道名字的大小,而malloc 需要明确指出所申请的空间的大小(总的字节数);new 的返回值是指向名字类型的确定的指针类型,不需要强制说明,而malloc的返回值是一个指向void类型的指针类型,需要强制转换成指向具体数据类型的指针类型。当所申请的空间是一个变量所需的空间时,new 运算符还可以为所申请的空间赋初值,malloc 不具有此功能。7.3 链链 表表n计算机处理数据需要两方面的工作,一方面是对计算机处理数据需要两方面的工作,一方面是对数据信息的描述,另一方面是对数据的操作,而数据信息的描述,另一方面是对数据的操作,而操作的方式取决于数据的描述方式,数据的描述操作的方式取决于数据的描述方式,数据的描述方式又取决于数据本身固有的内在联系。这里仅方式又取决于数据本身固有的内在联系。这里仅介绍数据之间的线性关系。介绍数据之间的线性关系。n对于图书馆的藏书这类数据信息可以用一种称对于图书馆的藏书这类数据信息可以用一种称为线性表的动态数据结构来描述。简单的说,线为线性表的动态数据结构来描述。简单的说,线性表是性表是 n 个数据元素的有限序列。各数据元素属个数据元素的有限序列。各数据元素属于同一数据对象,相邻数据元素之间存在序偶关于同一数据对象,相邻数据元素之间存在序偶关系。记为:系。记为:n(a1,a2,ai,ai+1,an)n线性表中的数据元素之间存在严格的顺序关系,有一个唯一的称为第一个的元素(首元),有唯一的称为最后一个的元素(尾元),其它元素都有唯一的直接后继元素和唯一的直接前趋元素。n线性表这种逻辑结构在计算机内表示时,可以采用链式存储结构,即一个数据元素存放于一个结点中,不同的数据元素之间的先后顺序用结点的指针域链接。一个结点就是一个结构体类型的变量。7.3.1 链表的定义链表的定义n链表是表示具有线性关系的一组数据元素的动态结构。每一个数据元素占据一个独立申请的存储空间,这个存储空间通常是一个结构体型变量,主要包括两部分,一部分用来存放数据元素的值称为值域,另一部分用来存放一个指向该结构体类型的指针变量值称为指针域。指针域的作用是存放逻辑上排在本结点后面的结点的存储空间的首地址。n数据元素结点的结构如图所示:值域指针域n若干个结点首尾相连按照其逻辑顺序链接成一若干个结点首尾相连按照其逻辑顺序链接成一排,称为线性链表。排,称为线性链表。n单向链表如下图所示:单向链表如下图所示:a1a2 an-1an图图7.2 7.2 单向链表单向链表1.链表结点的链表结点的 C 语句定义语句定义n对于链表这种数据结构,ANSI C 中,按如下方式描述:n首先用结构体类型描述一个数据元素结点,定义一个结点类型的语句格式:ntypedef struct LNode n ElemType data;n struct LNode *next;n LNode,*LinkList;其中:ntypedef 语句定义了一个结构体类型和链表类型语句定义了一个结构体类型和链表类型nLNode 是一个结点的类型名称。它有两个成员,是一个结点的类型名称。它有两个成员,一个名称为一个名称为data,类型为数据元素的类型,用来,类型为数据元素的类型,用来存放一个数据元素的值;另一个成员名称为存放一个数据元素的值;另一个成员名称为next,类型为指向本结构体类型的指针类型,用来存,类型为指向本结构体类型的指针类型,用来存放逻辑上排在本结点后面的结点的首地址。放逻辑上排在本结点后面的结点的首地址。nLinkList 是指向是指向 LNode 类型的指针类型。类型的指针类型。qElemType 是数据元素的类型的一般性描是数据元素的类型的一般性描述,当我们具体写程序时,应该用确定类述,当我们具体写程序时,应该用确定类型名称来替换,例如,型名称来替换,例如,int、float、char等。等。例7-6:链表中的数据元素用来存放整数,定义链表的结点类型的语句格式为:typedef struct LNode int data;struct LNode *next;LNode,*LinkList;1.定义一个指向结点类型的指针类型变量的语句:LNode *p;2.3定义一个链表类型的指针变量:LinkList L;3.4访问结点变量 p 的各个成员:p-data ,p-next4.说明:本章的所有程序都是基于以上类型定义。7.3.2 链表的建立链表的建立 n1.构造一个空线性链表构造一个空线性链表 L n首先,构造一个空的线性链表。为了描述方便,通常将链表的第一个结点空置,不存放数据元素,只是作为链表的开始标志,称为头结点。数据元素从链表的第二个结点开始存放。n空的线性表定义为没有数据元素的表。一个空的线性链表就规定为,只有一个头结点的链表。所以,构造一个空的线性链表就是建立只有一个头结点的链表。n(1)算法描述:q申请一个结点的空间;q将该结点作为线性链表的头结点;q将该结点的 next 域置空;(2)完整程序(Example 7_6.cpp):n/*程序名:Example7_6.cpp*/n void InitList(LinkList *L)n/*构造一个空的线性链表*/n (*L)=(LNode*)malloc(sizeof(LNode);/*申请一个结点空间*/n if(!(*L))exit(0);/*申请不成功,异常结束程序运行*/n (*L)-next=NULL;/*申请成功,头结点的next域置空*/n return(1);n 2逆序输入逆序输入 n 个数据元素,建立带表个数据元素,建立带表头结点的单线性链表头结点的单线性链表 Ln现在开始建立一个非空的线性链表。我们这里现在开始建立一个非空的线性链表。我们这里所建的链表的第一个结点都是头结点。数据元所建的链表的第一个结点都是头结点。数据元素从链表的第二个结点开始存放。素从链表的第二个结点开始存放。n一个非空的线性链表是除了头结点以外至少有一个非空的线性链表是除了头结点以外至少有一个数据元素的链表。线性链表由若干个数据一个数据元素的链表。线性链表由若干个数据元素结点组成。那么,构造一个非空的线性链元素结点组成。那么,构造一个非空的线性链表的过程就是逐个建立数据元素结点,并将它表的过程就是逐个建立数据元素结点,并将它们依次插入到链表中的过程。们依次插入到链表中的过程。所谓头插入,即每次将数据元素结点插入到表头结点的之后,第一个数据元素结点之前。插入过程如图7-3所示:初始状态:初始状态:插入第一个结点之后:插入第一个结点之后:ann插入第二个结点之后:n插入第三个结点之后:n插入最后一个结点之后:an-1anan-1an-2anan-1a1an nvoid CreateList(LinkList *L,int n)n int i;nLNode *P;n(*L)=(LNode*)malloc(sizeof(LNode);nif(!(*L)exit(0);n(*L)-next=NULL;nfor(i=n;i 0;i-)nnp=(LNode*)malloc(sizeof(LNode);nif(!p)exit(0);nscanf(“%d”,&p-data);np-next=(*L)-next;n(*L)-next=p;n return(1);n以上的算法只是建立链表的一种方法,它的核以上的算法只是建立链表的一种方法,它的核心是新的数据元素结点插在链表的第一个数据心是新的数据元素结点插在链表的第一个数据元素的位置;我们也可以将新建立的数据元素元素的位置;我们也可以将新建立的数据元素结点每次都插在链表的尾部,大家可以思考一结点每次都插在链表的尾部,大家可以思考一下,以尾插入的方式建立链表,程序怎样编写下,以尾插入的方式建立链表,程序怎样编写?7.3.3 链表结点的插入n将一个数据元素插入到链表中,有三种情况:头将一个数据元素插入到链表中,有三种情况:头插入,尾插入以及在链表中的第插入,尾插入以及在链表中的第i个数据元素的位个数据元素的位置处插入。将一个新元素插入在链表的头结点的置处插入。将一个新元素插入在链表的头结点的后面,其它的所有结点之前称为头插入。将一个后面,其它的所有结点之前称为头插入。将一个新元素插入在链表的尾结点的后面,使得新插入新元素插入在链表的尾结点的后面,使得新插入的结点成为尾结点称为尾插入。将一个新元素插的结点成为尾结点称为尾插入。将一个新元素插入在链表中的第入在链表中的第i个数据元素的位置处,即插入在个数据元素的位置处,即插入在第第i个数据元素结点之前,使得新插入的结点成为个数据元素结点之前,使得新插入的结点成为链表中的第链表中的第i个结点。下面我们详细介绍每一种插个结点。下面我们详细介绍每一种插入的算法实现。入的算法实现。例例7-8:已有链表:已有链表L 如图所示如图所示,链表中的链表中的元素按递增有序排列:元素按递增有序排列:图7.4 链表的插入过程其中每个结点中存放的值为学生的考试成绩。现在有另外三个学生的的成绩分别为65、82、90。将他们插入到链表L中,要求插入之后链表依然递增有序。807085图7.5 头插入过程 n首先将首先将65 插入到链表插入到链表L中中:q插入的过程:设插入的过程:设p=L-next,因为,因为p非空,判断非空,判断p-data65,所以,所以,65应该插在应该插在L的后面,的后面,70结结点的前面,插入之后的链表为:点的前面,插入之后的链表为:nL:65807085 s sp p65s s实现语句:n p=L-next;n s=(LNode*)malloc(sizeof(LNode);n s-data=x;n s-next=p;n L-next=s;将82 插入到链表L中:n插入的过程:n首先应找到82 应在的位置:82应该插在两个结点之间,82前面结点的data域值小于82;82后面结点的data域值大于等于82;如图所示:nL:65807085 82实现语句:nq=*L;np=(*L)-next;nwhile(p&p-datanext;n 将90 插入到链表L中:n显然,90应插到链表的尾部,即:插到链表的最后一个结点的后面。n插入的过程:n首先找到插入的位置:设p=L-next,当p非空并且 p-data next;循环一定以p为空结束。n将新结点90插在q的后面,插入之后的链表为:nL:6580708590 实现语句:nx=90;n p=L-next;s=(LNode*)malloc(sizeof(LNode);n s-data=x;n while(p&p-data next;nnq-next=s;ns-next=p;n 用一个程序来实现,程序如下:int ListInsert (LNode *L,int e)LNode*s,*q,*p;if(!(*L)return 0;s=(LNode*)malloc(sizeof(LNode);if(!s)exit(0);s-data=e;p=(*L)-next;q=*L;while(p&p-datanext;s-next=p;q-next=s;return(1);7.3.4 链表结点的删除n在7.3.3 节中,详细的讨论了在一个链表中插入一个数据元素结点的算法。本节将讨论删除链表中的结点的算法。n例7-9:已有链表L 如图所示:80657690 删除链表中数据元素值为76n解答:n首先查找值为76的结点:n设p=L-next,q=L;nL:80657690 qpn当p非空时,判断p-data=76吗?如果成立,则p所指的结点就是所要删除的结点;此时,q指示所要删除的结点的前驱结点;否则,继续查找;即p和q指针同时向后移。找到了值为76的结点:80657690 qp删除p所指的结点:n删除之后的链表为:65807690 qp 658090程序如下程序如下:nint Listdelete (LNode *L,int *e)n LNode*q,*p;n if(!(*L)return 0;n p=(*L)-next;n q=*L;n while(p&p-data!=(*e)n q=p;n p=p-next;n if(p)q-next=p-next;(*e)=p-data;free(p);n return(1);n else return(0);7.4 小 结n本章介绍了线性链表的定义和建立算法,又介绍了插入一个结点、删除一个结点等算法的实现。通过这一章的学习,我们初步了解了动态数据结构的特点和使用方式。n还有许多的动态数据结构,如堆栈、队列、树、图等。它们都被广泛的应用于计算机系统中,在计算的系统和应用软件中起着非常重要的作用。动态数据结构的更详细内容将在后续课程数据结构讲述。思考题:n只设尾指针的单循环链表的初始化、建立、插入和删除算法应怎样写?- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 动态 数据结构
咨信网温馨提示:
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【天****】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【天****】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【天****】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【天****】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
关于本文