《数据结构专升本复习ppt课件.ppt》由会员分享,可在线阅读,更多相关《数据结构专升本复习ppt课件.ppt(287页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用数据结构经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用第一章数据的三个层次:数据、数据元素、数据项数据结构的概念:定义、逻辑结构、物理(存储)结构理解数据类型、抽象数据类型的概念。算法的概念(算法特性,算法设计要求)理解时间复杂度、空间复杂度的概念。经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用数据是
2、对客观事物的符号表示。数据结构相关的基本概念在计算机科学中其含义是指所有能够输入到计算机在计算机科学中其含义是指所有能够输入到计算机中并被计算机程序处理的符号集合。中并被计算机程序处理的符号集合。基本概念和术语经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用 数据元素数据元素 是数据集合中的一个实体,是计算机程序中加工处理的基本单位。有两类数据元素:一类是不可分割的原子型数据元素,如:整数5,字符 N 等;另一类是由多个款项构成的数据元素,其中每个款项被称为一个数据项。例如描述一个学生的信息的数据元素可由下列个数
3、据项组成。经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用数据结构简单地说,就是相互之间存在一种或多种特定关系的数据元素的集合。经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用数据结构的形式定义为:DataStructures=(D,S)其中:D是数据元素的有限集,S是D上关系的有限集。逻辑结构“数据结构”定义中的“关系”指数据间的逻辑关系,故也称数据结构为逻辑结构。存储结构顺序存储结构数据结构在计算机中的表示称为物理结构。又称存储
4、结构。链式存储结构经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用常见的存储结构顺序存储结构:特点是借助于数据元素的相对存储位置来表示数据元素之间的逻辑结构;链式存储结构:特点是借助于指示数据元素地址的指针表示数据元素之间的逻辑结构。经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用数据类型和抽象数据类型数据类型是一个“值”的集合和定义在此集合上的“一组操作”的总称。例:C语言中的整型,其内涵为一定范围的自然数集合,及定义在该集合上的
5、加减乘除及取模、比较大小操作。而实型则无取模操作。当然整型也不需四舍五入。经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用抽象数据类型(AbstractDataType简称ADT)是指一个数学模型以及定义在此数学模型上的一组操作。例如,矩阵的抽象数据类型定义为,矩阵是一个由mn个数排成m行n列的表,它可以进行初等变换、相加、相乘、求逆、等运算。抽象数据类型的形式描述为ADT=(D,S,P)其中:D是数据对象,S是D上的关系集,P是D的基本操作集。经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受
6、到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用一、算法定义算法(Algorithm):是对特定问题求解步骤的一种描述,是由若干条指令组成的有限序列,其中每一条指令表示一个或多个操作。它应该满足下列五个重要特性:1、有穷性一个算法必须总是在执行有穷步之后结束,且每一步都在有穷时间内完成。2、确定性算法中每一条指令必须有确切的含义,且执行路径唯一。即对于相同的输入只能得出相同的输出。3、可行性算法中描述的操作都是可以通过已经实现的基本运算执行有限次来实现的。4、输入一个算法有零个或多个的输入,这些输入取自于某个特定的对象的集合。5、输出一个算法有一个或多个的输出,这些输出同输入有着
7、某些特定关系的量。1.2算法描述经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用 二、算法设计的要求:二、算法设计的要求:1、正确性算法应满足具体问题的需求。通常算法的正确性可分为四个层次:a.程序不含语法错误;b.程序对于几组输入数据能够得出满足规格说明要求的结果;c.程序对于精心选择的典型、苛刻而带有刁难性的几组输入数据能够得出满足规格说明要求的结果;d.程序对于一切合法的输入数据都能产生满足规格说明要求的结果。一般情况下,通常以第c层意义的正确性作为衡量一个程序是否合格的标准。经营者提供商品或者服务有欺诈行
8、为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用二、算法设计的要求:二、算法设计的要求:2、可读性算法主要是为了人的阅读与交流,其次才是机器执行。可读性好有助于人对算法的理解,晦涩难懂的程序易于隐藏较多错误难以调试和修改。3、健壮性当输入数据非法时,算法也能适当地作出反应或进行处理,而不会产生莫明其妙的输出结果。4、效率与低存储需求经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用举例问题:按从小到大的顺序重新排列x,y,z三个数值的内容。算法:(1)输入x,y,
9、z三个数值;(2)从三个数值中挑选出最小者并换到x中;(3)从y,z中挑选出较小者并换到y中;(4)输出排序后的结果。经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用三、算法复杂性的概念确切地说,算法的复杂性是运行算法所需要的计算机资源的量。需要的时间资源的量称为时间复杂性需要的空间资源的量称为空间复杂性经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用*在算法分析中,通常所说的找到了时间复杂性的级别,是指找到了同样级别的最简单的函数
10、。如:307n2、n2/2、n2都是同一级别的函数,最简单的函数是n2。所以,307n2、n2/2、n2的级别都是O(n2)。f、g同级别:满足:f=O(g)且g=O(f)经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用例、for(i=1;i=n;+i)for(j=1;j=n;+j)cij=0;for(k=1;k=n;+k)cij+=aik*bkj;由于是一个三重循环,每个循环从1到n,则总次数为:nnn=n3经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买
11、商品的价款或接受服务的费用频度:是指该语句重复执行的次数例、+x;s=0;将x自增看成是基本操作,则语句频度为,即时间复杂度为(1);如果将s=0也看成是基本操作,则语句频度为,其时间复杂度仍为(1),即常量阶。经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用例、for(i=1;i=n;+i)+x;s+=x;。经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用课堂练习:求该程序的语句频度及时间复杂度1、for(i=2;i=n;+i)f
12、or(j=2;jlast=-1;returnL;6.经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用2.在线性表L中第i个数据元素之前插入数据元素XintInsert_SeqList(SeqList*L,inti,datatypex)intj;if(L-last=MAXSIZE1)printf(表满);return(-1);/*表空间已满,不能插入*/if(iL-last+2)/*检查插入位置的正确性*/printf(位置错);return(0);for(j=L-last;j=i-1;j-)L-dataj+1=L
13、-dataj;/*结点移动*/L-datai-1=x;/*新元素插入*/L-last+;/*last仍指向最后元素*/return(1);/*插入成功,返回*/经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用3.删除操作intDelete_SeqList(SeqList*L;inti)intj;if(iL-last+1)/*检查空表及删除位置的合法性*/printf(不存在第i个元素);return(0);for(j=i;jlast;j+)L-dataj-1=L-dataj;/*向上移动*/L-last-;ret
14、urn(1);/*删除成功*/经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用4.在线性表L中检索值为X的数据元素intLocation_SeqList(SeqList*L,datatypex)inti=0;while(idatai!=x)i+;if(iL-last)return-1;elsereturni;/*返回的是存储位置*/经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用插入算法的分析假设线性表中含有n个数据元素,在进行插入
15、操作时,若假定在n+1个位置上插入元素的可能性均等,则平均移动元素的个数为:经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用删除算法的分析删除算法的分析在进行删除操作时,若假定删除每个元素的可能性均等,则平均移动元素的个数为:分析结论顺序存储结构表示的线性表,在做插入或删除操作时,平均需要移动大约一半的数据元素。当线性表的数据元素量较大,并且经常要对其做插入或删除操作时,这一点需要值得考虑。经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务
16、的费用线性表的链式存储结构线性表的链式存储结构链表的结点定义链表的结点定义链表的建立链表的建立链表的常用的操作模式链表的常用的操作模式指指针搜索针搜索链表插入、删除运算链表插入、删除运算一些特殊的链表一些特殊的链表经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用线性表的链式存储结构线性表的链式存储结构线性表链式存储时结点结构线性表链式存储时结点结构有关结点数据后继结点位置信息数据域数据域指针域指针域经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或
17、接受服务的费用线性表的链式存储结构(单链表)线性表的链式存储结构(单链表).headhead头结点头结点首结点首结点首结点首结点经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用链表结点的定义链表结点的定义structnodeelemtpdata;structnode*next;typedefstructnode*pointer,*lklist;lklist与与pointer并并无无性性质质上上的的区区别别。通通常常用用lklist来来说说明明链链表表头头指指针针的的类类型型,而而用用pointer来来说说明明定定
18、位位指针或搜索指针的类型指针或搜索指针的类型经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用链表的基本操作算法链表的基本操作算法单链表的初始化单链表的初始化lklistinitiate(lklisth)malloc(h);h-next=0;returnh;单链表的单链表的length函数函数length(lklisth)k=0;p=h-next;while(p!=0)k=k+1;p=p-nextreturnk;经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买
19、商品的价款或接受服务的费用Setup1图解图解malloc(head);p=head;headp经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用Setup1图解图解malloc(q);p-next=q;p=qheadqp经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用Setup1图解图解malloc(q);p-next=q;p=qheadqp经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额
20、为消费者购买商品的价款或接受服务的费用链表的建立(带表头结点)链表的建立(带表头结点)lklist setup1(lklist head)lklist setup1(lklist head)malloc(head);malloc(head);p=head;scanf(x);p=head;scanf(x);while (x!=somevalue)while (x!=somevalue)malloc(q);q-data=x;malloc(q);q-data=x;p-next=q;p=q;p-next=q;p=q;scanf(x);scanf(x);p-next=0;p-next=0;return(
21、head);return(head);经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用Setup2图解图解malloc(head);head-next=0;head经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用Setup2图解图解malloc(p);p-next=head-nexthead-next=p;headp经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接
22、受服务的费用Setup2图解图解malloc(p);p-next=head-nexthead-next=p;headp经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用Setup2图解图解malloc(p);p-next=head-nexthead-next=p;headp经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用链表的建立(带表头结点)链表的建立(带表头结点)lklistsetup2(lklisthead)head=mallo
23、c(head);head-next=0;scanf(x);while(x!=somevalue)malloc(p);p-data=x;p-next=head-next;head-next=p;scanf(x);return(head);经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用链表的建立(不带表头结点)链表的建立(不带表头结点)lklist setup3(lklist head)lklist setup3(lklist head)head=0;scanf(x);head=0;scanf(x);while (
24、x!=somevalue)while (x!=somevalue)malloc(p);p-data=x;malloc(p);p-data=x;if (head=0)if (head=0)head=p;q=head;head=p;q=head;else q-next=p;q=p;else q-next=p;q=p;scanf(x);scanf(x);q-next=0;q-next=0;return(head);return(head);经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用链表的建立(不带表头结点)链表的
25、建立(不带表头结点)lklist setup4(lklist head)lklist setup4(lklist head)head=0;scanf(x);head=0;scanf(x);while (x!=somevalue)while (x!=somevalue)malloc(p);p-data=x;malloc(p);p-data=x;p-next=head;head=p;p-next=head;head=p;scanf(x);scanf(x);return(head);return(head);经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额
26、为消费者购买商品的价款或接受服务的费用链表常用的操作模式链表常用的操作模式指针搜索(链表指针搜索(链表的显示)的显示)voiddisplay(lklisthead)p=head-next;while(p!=0)printf(p-data);p=p-next;经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用链表常用的操作模式链表常用的操作模式指针搜索(链表指针搜索(链表结点的定位结点的定位)将将指针定位在指针定位在x结点结点Pointerlocate1(lklisthead,elemtpx)p=head-next;
27、while(p!=0&p-data!=x)p=p-next;returnp;;将指针定位在将指针定位在x结点的前驱结点上结点的前驱结点上Pointerlocate2(lklisthead,elemtpx)p=head;while(p-next&p-next-data!=x)p=p-next;returnp;;经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用链表的插入、删除运算链表的插入、删除运算插入点的定位插入点的定位*在指定点之前:在指定点之前:定位在指定点的直接前驱定位在指定点的直接前驱*在指定点之后:定位在
28、指定点在指定点之后:定位在指定点删除点的定位:定位在指定点的直接前驱删除点的定位:定位在指定点的直接前驱操作的顺序操作的顺序规范的删除操作规范的删除操作链链表表的的插插入入与与删删除除操操作作中中最最重重要要的的一一点点就就是是确确定定操操作作对对象象节节点点的的直直接接前前驱驱结结点点。否否则则,改改变变结结点点的的连连接接工工作作就就难于进行难于进行。经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用在指定点之前插入的图示在指定点之前插入的图示while(p!=0&p-data!=x)q=p;p=p-next;
29、qpS经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用在指定点之前插入的图示在指定点之前插入的图示s-next=q-next;q-next=s;qpS经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用在指定点之前插入算法在指定点之前插入算法voidinsert1(lklistla,elemtpx,elemtpy)/*将将值值为为y的的结结点点插插在在la中中值值为为x的的结结点点之之前前,若若无无x结结点点则则将将新结点新结点*/*作
30、为链表的尾结点作为链表的尾结点*/q=la;p=la-next;while(p-data!=x&p!=0)q=p;p=p-next;malloc(p);p-data=y;p-next=q-next;q-next=p;经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用在指定点之后插入的图示在指定点之后插入的图示s-next=p-next;p-next=s;PS经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用在指定点之后插入的图示在指定点
31、之后插入的图示s-next=p-next;p-next=s;(两语句不可对调)两语句不可对调)PS经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用voidinsert2(lklistla,elemtpx,elemtpy)/*将将值值为为y的的结结点点插插在在la中中值值为为x的的结结点点之之后后,若若无无x结结点则不插入点则不插入*/malloc(q);q-data=y;p=la-next;while(p-data!=x&p)p=p-next;if(p)q-next=p-next;p-next=q;经营者提供商品
32、或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用删除指定的结点的图示删除指定的结点的图示while(p-next!=0&p-next-data!=x)p=p-next;p经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用删除指定的结点的图示删除指定的结点的图示q=p-next;p-next=q-next;pq经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用删除指定的结
33、点的图示删除指定的结点的图示free(q)pq经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用删除指定的结点删除指定的结点voiddelete(lklistla,elemtpx)/*把把链链表表中中值值为为x的的结结点点删删除除,若若无无该该结结点点,则则给给出出错信息出出错信息*/p=la;while(p-next-data!=x&p-next)p=p-next;if(p-next!=0)q=p-next;p-next=q-next;free(q);elseprintf(“ERROR”);经营者提供商品或者服务
34、有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用单链表就地逆置的图示单链表就地逆置的图示q=head-next;head-next=0;headq经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用单链表就地逆置的图示单链表就地逆置的图示p=q;q=q-next;headPq经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用单链表就地逆置的图示单链表就地逆置的图示p-next=h
35、ead-next;head-next=p;headPq经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用单链表就地逆置的图示单链表就地逆置的图示p-next=head-next;head-next=p;headPq经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用例题例题将一单链表就地逆置算法将一单链表就地逆置算法voidinver(lklistla)p=la-next;la-next=0;while(p)q=p;p=p-next;q-
36、next=la-next;la-next=q;经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用消除单链表中的重复元素的示意图消除单链表中的重复元素的示意图pqqSHead经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用将单链表中的重复元素删除的算法将单链表中的重复元素删除的算法voiddelete3(lklistla)p=la-next;while(p-next!=0)q=p;while(q-next!=0)if(q-next-da
37、ta=p-data)s=q-next;q-next=s-next;free(s);elseq=q-next;p=p-next;经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用链表操作的几个注意点链表操作的几个注意点确定进行什么操作?在何处操作?确定进行什么操作?在何处操作?定位(搜索)方法定位(搜索)方法q自编程序自编程序q利用现成的子程序利用现成的子程序q搜索时注意指针移动的条件搜索时注意指针移动的条件是否可能丢失不该丢失的结点?是否可能丢失不该丢失的结点?表头指针不得随意移动表头指针不得随意移动确保操作完成后
38、,表尾结点的指针域为确保操作完成后,表尾结点的指针域为null注意了解无头结点链表的各种常见的操作注意了解无头结点链表的各种常见的操作经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用链表操作的几个注意点链表操作的几个注意点确定进行什么操作?在何处操作?确定进行什么操作?在何处操作?定位(搜索)方法定位(搜索)方法q自编程序自编程序q利用现成的子程序利用现成的子程序q搜索时注意指针移动的条件搜索时注意指针移动的条件是否可能丢失不该丢失的结点?是否可能丢失不该丢失的结点?表头指针不得随意移动表头指针不得随意移动确保操
39、作完成后,表尾结点的指针域为确保操作完成后,表尾结点的指针域为nil注意了解无头结点链表的各种常见的操作注意了解无头结点链表的各种常见的操作经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用循环链表和双向链表循环链表和双向链表单单循环链表:尾结点的指针指向头结点,循环链表:尾结点的指针指向头结点,形成一个形成一个“环环”。从任意一个结点都可以访。从任意一个结点都可以访问到单循环链表中的任何一个结点。问到单循环链表中的任何一个结点。双向链表:每个结点设有两个指针域,其一双向链表:每个结点设有两个指针域,其一指向该结点
40、的直接前驱结点,另一指针指向指向该结点的直接前驱结点,另一指针指向其直接后继结点。不光可以从任意一个结点其直接后继结点。不光可以从任意一个结点访问到双链表中的任何一个结点,而且结点访问到双链表中的任何一个结点,而且结点上的指针既可以向表尾方向移动,也可以向上的指针既可以向表尾方向移动,也可以向表头方向移动表头方向移动经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用循环链表和双向链表的图示循环链表和双向链表的图示head头结点头结点首结点首结点单循环链表循环链表双链表双链表head不带头结点的循环表不带头结点的循环
41、表经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用(单)循环链表的建立的图示(单)循环链表的建立的图示malloc(h);h-next=h;p=h;malloc(s);hps经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用(单)循环链表的建立的图示(单)循环链表的建立的图示s-next=p-next;p-next=s;p=s;或或p-next=s;s-next=h;p=p-next;hps经营者提供商品或者服务有欺诈行为的,应当按照
42、消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用(单单)循环链表建立的算法循环链表建立的算法lklistsetupcirlk(lklisth)malloc(h);h-next=h;p=h;scanf(x);while(x!=somevalue)malloc(s);s-data=x;p-next=s;s-next=h;p=s;scanf(x);returnh;经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用(单单)循环链表建立的算法循环链表建立的算法lklistsetupcir
43、lk1(lklisth)malloc(h);h-next=h;scanf(x);while(x!=somevalue)malloc(s);s-data=x;s-next=h-next;h-next=s;scanf(x);returnh;经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用单循环链表例单循环链表例有一无表头结点的循环链表,指针有一无表头结点的循环链表,指针s指向其中的指向其中的一个结点,设计算法删除一个结点,设计算法删除s的前趋结点。的前趋结点。sp经营者提供商品或者服务有欺诈行为的,应当按照消费者的要
44、求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用单循环链表例单循环链表例只有一个结点只有一个结点SPfree(p);S=0经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用单循环链表例单循环链表例有两个(或两个以上)结点有两个(或两个以上)结点SPqP-next=q-next经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用单循环链表例单循环链表例lklistdel(lklists)p=s-next;whil
45、e(p-next-next!=s)p=p-next;if(p-next=p)free(s);s=0;elseq=p-next;p-next=q-next;free(q);returns;经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用双向链表的结点定义双向链表的结点定义Structnodeelemtpdata;structnode*prior,*next;Typedefstructnode*bpointer,*lklist1priordatanext经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿
46、其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用1、掌握栈的定义和基本运算。2、掌握栈的顺序实现及其运算的实现。3、掌握栈和队列的链接实现及其运算的实现。4、掌握栈的应用。第3章栈经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用3.1ADT栈栈的定义栈是一种特殊的线性表。其特殊性在于限定插入和删除数据元素的操作只能在线性表的一端进行。如下所示:进行插入和删除的一端是浮动端,通常被称为栈顶,并用一个“栈顶指针”指示;而另一端是固定端,通常被称为栈底。a1,a2,a3,.,an插入和删插入和删除端除
47、端经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用anan-1a2a1栈顶栈底栈的示意图经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用结论:后进先出(LastInFirstOut),简称为LIFO线性表。举例1:家里吃饭的盘子,通常在洗干净后一个一个地落在一起存放,在使用时,若一个一个地拿,一定最先拿走最上面的那只盘子,而最后拿出最下面的那只盘子。举例2:在建筑工地上,使用的砖块从底往上一层一层地码放,在使用时,将从最上面一层一层
48、地拿取。经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用常用的栈运算:StackEmpty(S):测试栈S是否为空StackFull(S):测试栈S是否已满StackTop(S):返回栈S的栈顶元素Push(x,S):在栈S的栈顶插入元素x,简称入栈Pop(S):删除并返回栈S的栈顶元素,简称出栈或抛栈经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用举例程序编译时表达式或字符串的括号匹配问题。如:(x*(x+y)-z)求解:对于给定
49、的表达式expr,应用栈这种特殊的抽象数据类型。算法如下:(在算法中,栈ss是一个整数栈,用于存放未匹配左括号在字符串expr中的位置。)经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用voidParenthsis(char*expr)inti,n;Stackss=StackInit();n=strlen(expr);for(i=1;idata=malloc(size*sizeof(StackItem);S-maxtop=size;S-top=-1;returnS;经营者提供商品或者服务有欺诈行为的,应当按照消费
50、者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用2.测试栈S是否为空intStackEmpty(StackS)returnS-toptop=S-maxtop-1;注:当top=maxtop时当前栈为满栈。经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用4.返回栈S的栈顶元素StackItemStackTop(StackS)if(StackEmpty(S)Error(“Stackisempty”);elsereturnS-dataS-top;经营者提供商品或者服务有欺诈行为的,应当