资源描述
单击此处编辑母版标题样式,数据,结,结构,与,与算,法,法,第1,章,章,绪,绪,论,论,1.1,什,什,么,么是,数,数据,结,结构,1.2,基,基,本,本概,念,念和,术,术语,1.3,抽,抽,象,象数,据,据类,型,型的,表,表示,与,与实,现,现,1.4,算,算,法,法与,算,算法,分,分析,1.1,什,什,么,么是,数,数据,结,结构,一、,计,计算,机,机解,决,决问,题,题的,一,一般,过,过程,。,。,1、,建,建立,数,数学,模,模型,。,。,2、,根,根据,数,数学,模,模型,,,,设,计,计算,法,法。,3、,编,编写,程,程序,,,,调,试,试直,至,至问,题,题的,最,最终,解,解决,。,。,二、,数,数值,问,问题,与,与非,数,数值,问,问题,。,。,数值,问,问题,就,就是,我,我们,平,平时,所,所说,的,的计,算,算问,题,题,,如,如已,知,知圆,的,的半,径,径,,要,要求,圆,圆的,面,面积,。,。非,数,数值,问,问题,就,就是,问,问题,中,中涉,及,及的,对,对象,不,不能,用,用数,来,来表,达,达的,那,那些,问,问题,。,。,1),数,数值,问,问题,例1,已,已,知,知:,游,游泳,池,池的,长,长length和,宽,宽wide,,求,求面,积,积area。,分,分,析,析:,问,问,题,题涉,及,及的,对,对象,:,:游,泳,泳池,的,的长length,宽,宽wide,,,,面,积,积area;,对,对,象,象之,间,间的,关,关系,:,:area=length,wide,;,;,main()intlen,wide,area;scanf(“%d%d%n,”,”,2,)非,数,数值,问,问题,例2,已,已知,研,研究,生,生选,课,课情,况,况,,安,安排,课,课程,考,考试,的,的日,程,程。,研究,生,生选,课,课情,况,况表,姓名,选修课1,选修课1,选修课1,张,A,B,E,王,C,E,F,李,D,F,A,赵,B,F,分析,:,:,问,问题,涉,涉及,的,的对,象,象:,课,课程,;,;,课,课程,之,之间,的,的关,系,系:,同,同一,个,个研,究,究生,选,选修,的,的不,能,能按,排,排在,同,同一,时,时间,内,内考,试,试;,课程,及,及课,程,程之,间,间的,关,关系,可,可用,如,如下,所,所示,的,的图,表,表示,:,:,D,E,F,C,B,A,顶点,:,:表,示,示课,程,程;,边,边,:,:同,一,一研,究,究生,选,选修,的,的课,程,程用,边,边连,接,接,课,程,程,考,考,试,试,安,安,排,排,问,问,题,题,转,转,化,化,为,为,图,图,的,的,着,着,色,色,问,问,题,题,用,用,尽,尽,可,可,能,能,少,少,的,的,颜,颜,色,色,为,为,该,该,图,图,的,的,每,每,个,个,顶,顶,点,点,着,着,色,色,,,,,使,使,相,相,邻,邻,的,的,顶,顶,点,点,着,着,上,上,不,不,同,同,的,的,颜,颜,色,色,;,;,每,每,一,一,种,种,颜,颜,色,色,代,代,表,表,一,一,个,个,考,考,试,试,时,时,间,间,,,,,着,着,上,上,相,相,同,同,颜,颜,色,色,的,的,顶,顶,点,点,是,是,可,可,以,以,按,按,排,排,在,在,同,同,一,一,时,时,间,间,考,考,试,试,的,的,课,课,程,程,;,;,D,E,F,C,B,A,A,C,E,F,B,D,课,程,程,着,着,色,色,的,的,过,过,程,程,红,色,色,:,:a,,,,c,;,;,黄,黄,色,色,:,:b,,,,d,;,;,绿,绿,色,色,:,:e,;,;,蓝,蓝,色,色,:,:f,即,即a,c,可,可,安,安,排,排,在,在,同,同,一,一,时,时,间,间,考,考,试,试,,,,b,d,可,可,安,安,排,排,在,在,同,同,一,一,时,时,间,间,考,考,试,试;,设G,表,表,示,示,课,课,程,程,关,关,系,系,图,图,,,,,集,集,合,合V,包,包,含,含,图,图G,中,中,所,所,有,有,尚,尚,未,未,着,着,色,色,的,的,顶,顶,点,点,,,,NEW,表,表,示,示,可,可,以,以,用,用,新,新,颜,颜,色,色,着,着,色,色,的,的,顶,顶,点,点,集,集,合,合,。,。,I=1,;,;WHILEV,非,非,空,空DO,置,置NEW,为,为,空,空,集,集,合,合,;,;FOR,每,每,个,个v,VDOIFv,与,与NEW,中,中,所,所,有,有,的,的,结,结,点,点,间,间,都,都,没,没,有,有,边,边,从,从V,中,中,去,去,掉,掉v,;,;,将,将v,加,加,入,入NEW,;,;,(,(,第,第I,天,天,考,考,试,试,课,课,程,程,为,为NEW,中,中,顶,顶,点,点,所,所,对,对,应,应,的,的,课,课,程,程,),),以,以,某,某,种,种,形,形,式,式,输,输,出,出NEW,中,中,顶,顶,点,点,所,所,对,对,应,应,的,的,课,课,程,程,;,;I=I+1,;,;,通,过,过,对,对,上,上,个,个,问,问,题,题,的,的,分,分,析,析,,,,,在,在,这,这,个,个,问,问,题,题,的,的,分,分,析,析,解,解,决,决,的,的,过,过,程,程,中,中,我,我,们,们,遇,遇,到,到,了,了,以,以,下,下,几,几,个,个,问,问,题,题,:,:,1,、,、,如,如,何,何,表,表,示,示,节,节,点,点,以,以,及,及,它,它,们,们,之,之,间,间,的,的,关,关,系,系,(,(,相,相,邻,邻,接,接,),),2,、,、,在,在,计,计,算,算,机,机,中,中,如,如,何,何,存,存,储,储,。,。,3,、,、,相,相,应,应,的,的,操,操,作,作,如,如,何,何,描,描,述,述,。,。,(,(,染,染,色,色,过,过,程,程,),),3,),),数,数,值,值,问,问,题,题,与,与,非,非,数,数,值,值,问,问,题,题,的,的,比,比,较,较,数,值,值,问,问,题,题,已,知,知,游,游,泳,泳,池,池,的,的,长,长length,和,和,宽,宽wide,求,求,面,面,积,积area,。,。,(1,),),问,问,题,题,涉,涉,及,及,的,的,对,对,象,象,:,:length,wide,area,是,是,实,实,数,数,可,用,用,数,数,值,值,表,表,示,示,;,;,(2,),),对,对,象,象,之,之,间,间,的,的,关,关,系,系,:,:area=length,wide,可,用,用,方,方,程,程,或,或,函,函,数,数,表,表,示,示,;,;,(3,),),数,数,据,据,存,存,储,储,:,:,可,可,用,用,程,程,序,序,设,设,计,计,语,语,言,言,中,中,的,的,实,实,型,型,变,变,量,量,存,存,储,储,;,;,(4,),),问,问,题,题,求,求,解,解,:,:,用,用,某,某,种,种,计,计,算,算,方,方,法,法,求,求,解,解,;,;,已,知,知,研,研,究,究,生,生,选,选,课,课,情,情,况,况,,,,,安,安,排,排,课,课,程,程,考,考,试,试,的,的,日,日,程,程,。,。,1,),),问,问,题,题,涉,涉,及,及,的,的,对,对,象,象,:,:,课,课,程,程,可,用,用,课,课,程,程,名,名,表,表,示,示,不,不,能,能,用,用,数,数,值,值,表,表,示,示,2,),),对,对,象,象,之,之,间,间,的,的,关,关,系,系,:,:,同,一,一,研,研,究,究,生,生,选,选,修,修,的,的,课,课,程,程,不,不,能,能,安,安,排,排,在,在,同,同,一,一,时,时,间,间,考,考,试,试,,,,,同,同,一,一,研,研,究,究,生,生,选,选,修,修,的,的,课,课,程,程,之,之,间,间,有,有,某,某,种,种,“,“,冲,冲,突,突,”,”,关,关,系,系,课,课,程,程,之,之,间,间,的,的,这,这,种,种,关,关,系,系,不,不,能,能,用,用,方,方,程,程,或,或,函,函,数,数,表,表,示,示,3,),),数,数,据,据,及,及,数,数,据,据,之,之,间,间,的,的,关,关,系,系,如,如,何,何,存,存,储,储,?,?,4,),),如,如,何,何,求,求,解,解,?,?,非,数,数,值,值,数,数,据,据之,间,间,的,的,结,结,构,构,关,关,系,系,,,,,如,如,何,何表,示,示,,如,如,何,何存,储,储,,如,如,何,何处,理,理的,问,问,题,题,。,。,数,据,据,结,结,构,构,是,是,一,一,门,门,研,研,究,究,非,非,数,数,值,值,计,计,算,算,的,的,程,程,序,序,设,设,计,计,问,问,题,题,中,中,计,计,算,算,机,机,的,的操,作,作,对,对,象,象以,及,及,他,他,们,们,之,之,间,间关,系,系,和,和,操,操,作,作等,的,的,学,学,科,科,。,。,1.2,基,基,本,本,概,概,念,念,和,和,术,术,语,语,1,、,、,数,数,据,据,:,:,一,一,切,切,能,能,够,够,输,输,入,入,到,到,计,计,算,算,机,机,中,中,并,并,被,被,计,计,算,算,机,机,程,程,序,序,处,处,理,理,的,的,信,信,息,息,,,,,包,包,括,括,文,文,字,字,、,、,表,表,格,格,、,、,图,图,象,象,等,等,,,,,都,都,称,称,为,为,数,数,据,据,。,。,例,例,如,如,,,,,一,一,个,个,个,个,人,人,书,书,库,库,管,管,理,理,程,程,序,序,所,所,要,要,处,处,理,理,的,的,数,数,据,据,可,可,能,能,是,是,一,一,张,张,如,如,表,表1-1,所,所,示,示,的,的,表,表,格,格,。,。,2数,据,据元素,数据元,素,素(也,叫,叫节点,),),它,是,是组成,数,数据的,基,基本单,位,位。在,程,程序中,通,通常作,为,为一个,整,整体进,行,行考虑,和,和处理,。,。例如,,,,在表1-1所示的,个,个人书,库,库中,,为,为了便,于,于处理,,,,把其,中,中的每,一,一行(,代,代表一,本,本书),作,作为一,个,个基本,单,单位来,考,考虑,,故,故该数,据,据由10个结,点,点构成,。,。,一般情,况,况下,,一,一个结,点,点中含,有,有若干,个,个字段,(,(也叫数据,项,项)。,例,例如,,,,在表1-1所示,的,的表,格,格数,据,据中,,,,每,个,个结,点,点都,有,有登,录,录号,、,、书,号,号、,书,书名,、,、作,者,者、,出,出版,社,社和,价,价格,等,等六,个,个字,段,段构,成,成。,字,字段,是,是构,成,成数,据,据的,最,最小,单,单位,。,。,表1-1,个,个人,书,书库,3、,数,数据,对,对象,:,:是,性,性质,相,相同,的,的数,据,据元,素,素的,集,集合,,,,是,数,数据,的,的一,个,个子,集,集。,例,例如,,,,,整数,数,数据,对,对象,的,的集,合,合N=0,,1,,,,2,,,,,,字母,数,数据,对,对象,的,的集,合,合C=,A,B,Z,。,。,4、数据,结,结构,:,:是,相,相互,之,之间,存,存在,一,一种,或,或多,种,种特,定,定关,系,系的,数,数据,元,元素,的,的集,合,合。,数据,元,元素,之,之间,的,的相,互,互关,系,系称,为,为结,构,构。,根据,数,数据,结,结构,之,之间,关,关系,,,,通,常,常有,下,下列4类,基,基本,结,结构,。,。,集合,线,线性,结,结构,树,树,型,型结,构,构,图,图,状,状结,构,构,数据,结,结构,的,的形,式,式定,义,义为,:,:数,据,据结,构,构是,一,一个,二,二元,组,组,Data_Structure=(D,S),其中,:,:D,是,是数,据,据元,素,素的,有,有限,集,集,S是D上,的,的关,系,系的,有,有限,集,集合,。,。,5、,数,数据,的,的逻,辑,辑结,构,构:,数,数据,元,元素,之,之间,的,的逻,辑,辑关,系,系。,数据,的,的存,储,储结,构,构:,数,数据,结,结构,在,在计,算,算机,中,中的,表,表示,。,。,本课,程,程中,介,介绍,的,的存,储,储结,构,构有,:,:,顺序,存,存储,结,结构,链,链式,存,存储,结,结构,索,索,引,引结,构,构,散,散,列,列结,构,构,6、,数,数据,类,类型,:,:数,据,据类,型,型是,一,一个,值,值的,集,集合,和,和定,义,义在,这,这个,值,值集,上,上的,一,一组,操,操作,的,的总,称,称。,7、,抽,抽象,数,数据,类,类型,(,(ADT,),)是,指,指一,个,个数,学,学模,型,型以,及,及定,义,义在,该,该模,型,型上,的,的一,组,组操,作,作。,抽象,数,数据,类,类型,可,可以,用,用下,面,面的,三,三元,组,组来,表,表示,(D,,,,S,,,,P,),),其中,,,,D,是,是数,据,据对,象,象,S是D上,的,的关,系,系集,,,,P,是,是对D的,基,基本,操,操作,集,集。,本,本书,采,采用,以,以下,格,格式,定,定义,抽,抽象,数,数据,类,类型,:,:,ADT,抽,抽,象,象数,据,据类,型,型名,数据,对,对象,:,:,数据,关,关系,:,:,基本,操,操作,:,:,ADT,抽,抽象,数,数据,名,名。,1.4,算,算法,和,和算,法,法分,析,析,算法,:,:是,对,对特,定,定问,题,题求,解,解步,骤,骤的,一,一种,描,描述,,,,它,是,是指,令,令的,有,有限,序,序列,,,,其,中,中每,一,一条,指,指令,表,表示,一,一个,或,或多,个,个操,作,作;,它有5个,重,重要,特,特征,。,。,有穷,性,性:,确定,性,性:,相,相同,的,的输,入,入得,到,到相,同,同的,输,输出,。,。,可行,性,性:,输入,:,:,输出,:,:,算法,设,设计,的,的要,求,求:,正确,性,性:,正,正确,的,的含,义,义,,有,有四,个,个层,次,次。,可读,性,性:,健壮,性,性:,效率,和,和低,存,存储,量,量的,要,要求,:,:,一个,用,用高,级,级语,言,言编,写,写的,程,程序,在,在计,算,算机,上,上运,行,行所,需,需要,的,的时,间,间取,决,决于,下,下列,因,因素,:,:,依,据,据算法,所,所选,用,用的,策,策略。,问题,的,的规,模,模。一,般,般情,况,况下,,,,处,理,理的,数,数据,量,量越,大,大,,执,执行,的,的时,间,间相,对,对也,越,越长,。,。,书写,程,程序,的,的语,言,言。语言,的,的级,别,别越,高,高,,其,其执,行,行效,率,率就,越,越低,。,。,编译,程,程序,所,所生,成,成目,标,标代,码,码的,质,质量。,机,机器,指,指令,执,执行,的,的速,度,度(硬件,的,的速,度,度),。,。与硬,件,件的,配,配置,高,高低,有,有关,。,。,通常,的,的做,法,法是,:,:不,考,考虑,不,不确,定,定的,情,情况,,,,而,以,以算,法,法中,简,简单,操,操作,重,重复,执,执行,的,的次,数,数作,为,为算,法,法的,时,时间,度,度量,。,。为,此,此,,一,一个,特,特定,算,算法,的,的运,行,行时,间,间长,短,短就,只,只依,赖,赖于问题,的,的规,模,模n,或者,说,说它,是,是问,题,题规,模,模n,的,的函,数,数f(n)。,【例,】,】求,累,累加,求,求和,intsum(intb,,,,intn,),),intsum=0;/*,第,第1,条,条定,义,义并,赋,赋初,值,值语,句,句执,行,行1,次,次*/,for(inti=0;in;i+),sum+=bi;/*n,次,次*/,returnsum;/*,返,返,回,回语,句,句执,行,行1,次,次*/,要精,确,确地,计,计算f(n)是,困,困难,的,的,,引,引入,渐,渐进,时,时间,复,复杂,度,度在,数,数量,上,上估,计,计一,个,个算,法,法的,执,执行,时,时间,。,。算,法,法时,间,间的,度,度量,记,记作,T(n)=(f(n),它表,示,示随,问,问题,的,的规,模,模n,的,的增,大,大,,算,算法,执,执行,时,时间,的,的增,长,长率,和,和f(n),相,相同,。,。使,用,用大,记,号,号,,(f(n),称,称为,算,算法,的,的渐,进,进时,间,间复,杂,杂度,,,,简,称,称时,间,间复,杂,杂度,。,。,例如,,,,一,个,个程,序,序的,实,实际,执,执行,时,时间,为,为,2.7n,3,+3.8n,2,+5.3,。,。则T(n),(n,3,)。,例、,求,求下,面,面程,序,序段,的,的时,间,间复,杂,杂度,。,。,s=0;,for(j=1;j=n;j+),for(x=1,k=1;k=n;k+),x=x*k;,s+=x;,+x;a=0;,T(n)=O(1);/,常,常量,阶,阶,for(i=1;i=n;+i)+x;s+=x;,T(n)=O(n);/,线,线性,阶,阶,for(j=1;j=n;+j),for(k=1;k=n;+k)+x;s+=x;,T(n)=O(n,2,)/平,方,方阶,通常,将,将称,(1),为,为常数,阶,阶,(n)为线性,阶,阶,O(n2),为,为平方,阶,阶。算,法,法还,可,可能,呈,呈现,的,的复,杂,杂度,有,有:,对,对数,阶,阶(log2n),,指,指数,阶,阶(2,n,)等,,,,不,同,同数,量,量级,时,时间,复,复杂,度,度的,关,关系,有,有:,(1),(log,2,n),(n),(nlog,2,n),(n,2,),(n,3,),(2,n,),常见,函,函数,的,的增,长,长率,第2,章,章,线,线性,表,表,2.1,线,线性,表,表概,念,念及,基,基本,操,操作,2.2,线,线性,表,表的,顺,顺序,存,存储,和,和实,现,现,2.1,线,线性,表,表概,念,念及,基,基本,操,操作,例1,、,、数,学,学中,的,的数,列,列(11,,,,13,15,,,,17,19,,,,21),例2,、,、英,文,文字,母,母表,(,(A,B,C,D,E,Z,),)。,例3,、,、某,单,单位,的,的电,话,话号,码,码簿,。,。,姓名 电话号码,蔡颖 63214444,陈红 63217777,刘建平 63216666,王小林 63218888,张力 63215555,.,说明,:,:设A=(a1,a2,.,ai-1,ai,ai+1,an,),),是,是一,线,线性,表,表,1),线,线,性,性表,的,的数,据,据元,素,素可,以,以是,各,各种,各,各样,的,的,,但,但同,一,一线,性,性表,中,中的,元,元素,必,必须,是,是同,一,一类,型,型的,;,;,2),在,在,表,表中ai-1,领,领先,于,于ai,,,,ai,领,领先,于,于ai+1,,,,称ai-1,是,是ai,的,的,直,直接,前,前趋,,,,ai+1,是,是ai,的,的直,接,接后,继,继;,3)在线性表,中,中,除第,一,一个元素,和,和最后一,个,个元素之,外,外,其他,元,元素都有,且,且仅有一,个,个直接前,趋,趋,有且,仅,仅有一个,直,直接后继,,,,具有这种,结,结构特征,的,的数据结,构,构称为线,性,性结构。,线,线性表是,一,一种线性,数,数据结构,;,;,4),线,线性表中,元,元素的个,数,数n称为,线,线性表的,长,长度,n=0时称,为,为空表;,5)ai是,线,线性表的,第,第i 个,元,元素,称i 为数,据,据元素ai 的序,号,号,每一,个,个元素在,线,线性表中,的,的位置,,仅,仅取决于,它,它的序号,;,;,2.2,线,线性表,的,的顺序表,示,示和实现,线性表的,顺,顺序存储,结,结构,就,是,是用一组,连,连续的内,存,存单元依,次,次存放线,性,性表的数,据,据元素。,用,用顺序表,存,存储线性,表,表时,数,据,据元素之,间,间的逻辑,关,关系,是,通,通过数据,元,元素的存,储,储顺序反,映,映出来的,。,。,假没线性,表,表中每个,数,数据元素,占,占用 k,个,个存储,单,单元,那,么,么,在顺,序,序存储结,构,构中,线,性,性表的第i个元素,的,的存储位,置,置与第1,个,个元素的,存,存储位置,的,的关系是,:,:,Loc(ai )= Loc(a1 )+ (i 1), k,这里 Loc(ai)是第i 个,元,元素的存,储,储位置,Loc( a1) 是,第,第1个元,素,素的存储,位,位置,也,称,称为线性,表,表的基址,;,;,线性表的,顺,顺序存储,的,的基本操,作,作,1)初始,化,化操作InitList_Sq(SqList&L),2 ),销,销毁操作DetroyList_Sq( SqList&L)功,能,能:回收,为,为顺序表,动,动态分配,的,的存储空,间,间,3)置空,操,操作ClearList_Sq (SqList&L),功,功能,:,:若L已,存,存在,重,新,新将其置,成,成空表,5) 插,入,入操作L,istInsert_Sq( &L, i, e) 参,数,数:L,:,:顺序表,,,, i,插,插入,位,位置,e 被,插,插入元素; 因为,插,插入操作,对,对顺序表,进,进行修改,所以用,了,了引用参,数,数i的取值,范,范围在1-ListLength_Sq(L)+1;,功能:在,顺,顺序表L,的,的第i个,元,元素之前,插,插入一个,新,新元素e;,6)删除,操,操作 ListDelete_sq( SqList &L, int i,ElemType &e) 功,能,能:删除,顺,顺序表L,的,的第i个,元,元素,并,用,用e返回,3,.1栈,3.1.1,栈,栈的概,念,念,3.1.2,栈,栈的顺,序,序存储和,实,实现,第3章,栈,栈和队,列,列,3.1.1 抽,象,象数据类,型,型栈的定,义,义,栈是限定,仅,仅能在表,尾,尾一端进,行,行插入、,删,删除操作,的,的线性表,说明:设(a1, a2, a3, ,an,),) 是一,个,个栈,1)表尾,称,称为栈顶,,,,表头称,为,为栈底,,,,即a1,为,为栈底元,素,素,an,为,为栈顶元,素,素。2,),)在表尾,插,插入元素,的,的 操作,称,称进栈操,作,作,在表,头,头删除元,素,素的操作,称,称为出栈,操,操作;,(a,1, a,2, . , a,i -1, a,i, a,i+1, , a,n,),栈底,栈顶,进栈,出栈,c,b,a,f,e,d,栈操作演,示,示,3)元素,按,按a1,a2,a3,an,的,的次序进,栈,栈, 第,一,一个进栈,的,的元素一,定,定在栈底,,,,最后一,个,个进栈的,元,元素一定,在,在栈顶,第,第一个,出,出栈的元,素,素为栈顶,元,元素;,4)栈的,元,元素具有,后,后进先出,的,的特点,所,所以栈又,称,称为后进,先,先出表(LIFO,表,表)5,),)由于进,栈,栈、出栈,操,操作总是,在,在栈顶一,端,端进行,,通,通常设置,称,称为栈顶,指,指针的变,量,量指示栈,顶,顶的位置,。,。,栈的基本,操,操作,1)初,始,始化操作InitStack(&S),操,操作结,果,果:构造,一,一个空栈S;,2) 销,毁,毁栈操作DestroyStack(&S),初,初始条件,:,:栈S存,在,在。,操作结果,:,:销毁一,个,个已存在,的,的栈;,3) 置,空,空栈操作ClearStack(&S),初,初始,条,条件:栈S存在。,操作结果,:,:将栈S,置,置为空栈;,4) 判,空,空操作StackEmpty(S),初,初始条件,:,:栈S存,在,在。,操作结果,:,:若栈S,为,为空,则,返,返回True,否,则,则返回False;,5) 求,栈,栈长度操,作,作StackLength(S),初始条件,:,:栈S存,在,在。,操作结果,:,:返回S,元,元素的个,数,数,即栈,的,的长度。,6)取栈,顶,顶元素操,作,作GetTop(S, &e)初,始,始条件:,栈,栈S存在,,,,且非空,。,。,操作结果,:,:取栈顶,元,元素,并,用,用e 返,回,回;,7)进栈,操,操作Push(&S, e)初始,条,条件:栈S存在。,操作结果,:,:元素e,进,进栈;,8)退栈,操,操作Pop(&S, &e) 操,作,作结果:,栈,栈顶元素,退,退栈,并,用,用e返回;,9)栈的,遍,遍历操作StackTraverse(S,visit(),初始条件,:,:栈S存,在,在。,操作结果,:,:从栈底,到,到栈顶依,次,次对S的,每,每个数据,元,元素调用,函,函数visit(),一旦visit()失,败,败,则操,作,作失败。,3.1.2 栈,的,的顺序存,储,储和实现,栈的顺序,存,存储结构,也,也是利用,一,一组连续,的,的内存单,元,元依次存,放,放自栈底,到,到栈顶的,数,数据元素,,,,栈顶元,素,素的位置,由,由一个称,为,为栈顶指,针,针的变量,指,指示,。,栈操作图,示,示,top,base,base,top,base,top,base,top,A,A,B,C,D,A,B,空栈,A进栈,B CD 进栈,D C出,栈,栈,3.2,队,队列,3.2.1,队,队列的概,念,念,3.2.2,循环队列,一,什,什么是队,列,列,队列是限,定,定仅能在,表,表头进行,删,删除,表,尾,尾进行插,入,入的线性,表,表,(a,1, a,2, . ,a,i -1, a,i, a,i+1, ,a,n,),插入,删除,3.2.1,队,队列的概,念,念,说明:设,(,(a,1,a,2,a,3, . ,a,n,)为一队,列,列1),表,表尾称作,队,队尾,表,头,头称为队,头,头;2,),)a,1,为队头元,素,素,a,n,为队尾元,素,素;3,),)在表尾,插,插入元素,操,操作,称,为,为入队操,作,作;在表,头,头,删,删除元素,的,的操作,,称,称为出队,操,操作;4)元素,按,按a,1,a,2,a,3,.a,n,顺序入队,,,,第一个,入,入队的元,素,素为a,1,, 最后,一,一个入队,的,的元素是a,n,,,第一个出,队,队的元素,为,为a,1,,最后一,个,个出队的,元,元素是an,;5)队列,具,具有先进,先,先出的特,点,点,所以,又,又称为先,进,进先出表,(,(FIFO表),队列的示,意,意图,队列类似,于,于日常的,排,排队,新,来,来的人站,在,在队尾,,队,队头的人,进,进行事务,处,处理后离,队,队。,队列通常,设,设置两个,变,变量分别,指,指示队头,元,元素位置,和,和队尾元,素,素的位置,,,,这两个,变,变量分别,称,称为队头,指,指针、队,尾,尾指针;,a,1,a,2,a,3,a,n,入队列,队头,队尾,出队列,二,队,队列,的,的基本操,作,作,1)初始,化,化操作InitQueue( &Q),功,功能:构,造,造一个空,队,队列Q;2)销,毁,毁操作DestroyQueue(&Q),功,功,能,能:销毁,已,已存在队,列,列Q;3)置空,操,操作ClearQueue(&Q),功能:,将队列Q,置,置为空队,列,列 ;,4)判空,操,操作QueueEmpty(Q),功能:若,队,队列Q为,空,空, 则,返,返回True,,否则返回False;,5)求队,列,列长度QueueLength(LinkQueue&Q),6)取队,头,头元素操,作,作GetHead(Q,&e),功,功能:,取,取队头元,素,素,并用e返回;7,)入队操,作,作EnQueue( &Q, e),功,功能:,将,将元素e,插,插入Q的,队,队尾;8)出队,操,操作DeQueue( &Q,&e),功,功,能,能:若队,列,列不空,,则,则删除Q,的,的队头元,素,素,用e,返,返回其值,,,,并返回OK,否,则,则返回ERROR,;,;,第4章,树,树和二,叉,叉树,4.1树的有关,概,概念,1树的,概,概念,树结构,(,(除了一,个,个称为根,的,的结点外,),)每个元,素,素都有且,仅,仅有一个,直,直接前趋,,,,有且仅,有,有零个或,多,多个直接,后,后继。,树是n个,结,结点的有,限,限集合,,在,在任一棵,非,非空树中,:,:(1,),)有且仅,有,有一个称,为,为根的结,点,点。(2)其余,结,结点可分,为,为个互不,相,相交的集,合,合,而且,这,这些集合,中,中的每一,集,集合都本,身,身又是一,棵,棵树,称,为,为根的子,树,树。,树是递归,结,结构,在,树,树的定义,中,中又用到,了,了树的概,念,念,例:下面,的,的图是一,棵,棵树,T=A, B,C,D, E, F,G,H, I, J,A,是根,其,余,余结点可,以,以划分为3个,互不相交,的,的集合:,T1=B, E, F,T2=C, D ,T3=D,H, I, J,这些集合,中,中的每一,集,集合都本,身,身又是一,棵,棵树,它,们,们是A的,子,子树。,例如,对,对于 T1,B是,根,根,其余,结,结点可以,划,划分为2,个,个,互不相交,的,的集合:,T11=E,T12=F,T11,T12,是,是B的子,树,树。,J,I,A,C,B,D,H,G,F,E,从逻辑结,构,构看:1)树中,只,只有根结,点,点没有前,趋,趋;2,),)除根外,,,,其余结,点,点都有且,仅,仅一个前,趋,趋;,3)树的,结,结点,可,以,以有零个,或,或多个后,继,继;,4)树是,一,一种层次,结,结构,J,I,A,C,B,D,H,G,F,E,树的基本,术,术语,树的结点,:包含一,个,个数据元,素,素及若干,指,指向子树,的,的分支;,孩子结点,:结点的,子,子树的根,称,称为该结,点,点的孩子,;,;,双亲结点,:B结点,是,是A结点,的,的孩子,,则,则A结点,是,是B结点,的,的双亲;,兄弟结点,:同一双,亲,亲的孩子,结,结点;,堂兄结点,:同一层,上,上结点;,结点层,:,根结点的,层,层定义为1,;根的孩,子,子为第2,层,层结点,,,,依此,类,类推;,树,树的高度,:,:树中最,大,大的结点,层,层,结点的度,:,:结点子,树,树的个数,树,树的度,:,: 树中,最,最大的结,点,点度。,叶,叶子结点,:,:也叫终,端,端结点,,是,是度为0,的,的结点;,分,分枝结,点,点:度不,为,为0的结,点,点;森,林,林;互不,相,相交的树,集,集合;,有,有序树:,子,子树有序,的,的树,如,:,:家族树,;,;无序,树,树:不考,虑,虑子树的,顺,顺序;,5,树,树的基本,操,操作,1,)InitTree(,2)DestroyTree(,3)CreateTree(,4)ClearTree(,5)TreeEmpty(T);,6)TreeDepth(T);,7) Root(T);,8) Value(T,9) Assign(T,cur_e,value);,10)Parent(T,cur_e);,11)LeftChild(T,cur_e);,12)RightSibling(T, cur_e);,13)InsertChild(,14)DeleteChild(,15)TraverseTree(T, Visit( );,4.2.1 二叉,树,树的定义,二叉树:,它,它的特点,是,是每个结,点,点至多只,有,有两棵子,树,树,并且,,,,二叉树,的,的子树有,左,左右之分,,,,其次序,不,不能任意,颠,颠倒。,二叉树是,递,递归结构,,,,在二叉,树,树的定义,中,中又用到,了,了二叉树,的,的概念。,A,F,G,E,D,C,B,4.2,二,二叉树,A,F,G,E,D,C,B,(a)、(b),是不同的,二,二叉树,,(a),的左子树,有,有四个结,点,点,,(b),的左子树,有,有两个结,点,点,,(a),A,G,E,D,B,C,F,(b),2,二,二叉树的,基,基本形态,4.3,二,二叉树,的,的遍历,遍历,:按某种,搜,搜索路径,访,访问二叉,树,树的每个,结,结点,而,且,且每个结,点,点仅被访,问,问一次。,访问,:含义很,广,广,可以,是,是对结点,的,的各种处,理,理,如修,改,改结点数,据,据、输出,结,结点数据,。,。,遍历是各种,数,数据结构最,基,基本的操作,,,,许多其他,的,的操作可以,在,在遍历基础,上,上实现。对,于,于线性结构,由,由于每个结,点,点只有一个,直,直接后继,,遍,遍历是很容,易,易的事。,思考:,二叉树是非,线,线性结构,,每,每个结点可,能,能有两个后,继,继,如何访,问,问二叉树的,每,每个结点,,而,而且每个结,点,点仅被访问,一,一次?,二叉树的遍,历,历方法,二叉树由根,、,、,左子树、右,子,子树三部分,组,组成,二叉树的遍,历,历可以分解,为,为:访问根,,,,遍历,左子树和,遍历,右子树,令:L:,遍历左子树,D:,访问根结点,R:,遍历右子树,有六种遍历,方,方法:,DLR,LDR,LRD,,DRL,RDL,RLD,约定先左后,右,右,有三种,遍,遍历方法:,DLR、LDR、LRD,,分别称为,:,:,先序遍历、,中,中序遍历、,后,后序遍历。,A,F,G,E,D,C,B,先序遍历(DLR),若二叉树非,空,空,(1)访问,根,根结点;,(2)先序,遍,遍历左子树,;,;,(3)先序,遍,遍历右子树,;,;,先序遍历序,列,列,:A,B,D,E,G,C,F,A,F,G,E,D,C,B,中序遍历(,LDR,),若二叉树非,空,空(1),中,中序遍历左,子,子树(2,),)访问根结,点,点,(3)中序,遍,遍历右子树,中序遍历序,列,列,: D,B,G,E,A,C,F,A,F,G,E,D,C,B,后序遍历(,LRD,),若二叉树非,空,空(1),后,后序遍历左,子,子树(2,),)后序遍历,右,右子树,(3)访问,根,根结点,后序遍历序,列,列:,D,G,E,B,F,C,A,A,F,G,E,D,C,B,e,d,c,b,f,a,+,*,/,-,-,后序遍历序,列,列,:a,b,c,d,-,*,+,e,f,/,-,中序遍历序,列,列,:a,+,b,*,c,-,d,-,e,/,f,先序遍历序,列,列,:-,+,a,*,b,-,c,d,/,e,f,例:先,序遍历、中,序,序遍历、,后,序遍历下图,所,所示的二叉,树,树,一、 顺序,表,表及查找(,线,线性表及查,找,找),查找表组织,:,:查找表用,线,线性表表示,。,。即将查找,表,表的记录排,成,成一个记录,序,序列。L1=(45,53,12,3,37,24,100,61,90,78),基本思想:,从,从表的最后,一,一个记录(,或,或第一个记,录,录)开始,,依,依次将记录,的,的关键字与,给,给定值比较,,,,若相等:,查,查找成功,,否,否则,继续,查,查找。,第5章 查,找,找和排序,5.1 查,找,找,二、有序表,及,及查找,有序表:若,线,线性表中的,记,记录按关键,字,字有序,则,称,称为有序表,。,。,二分查找法,(,(也称为折,半,半查找法),基本思想:,将查找范围,中,中间位置的,记,记录关键字,与,与给定值比,较,较:, :继续,在,在前半个表,中,中用二分查,找,找法查找,= :查找,成,成功,返回,记,记录位置, :继续,在,在后半个表,中,中中用二分,查,查找法查找,L2=(3,12,24,37,45,53,61,78,90,100),查找Key=24的记录,1 2 3 4 5 6 7 8 9 10,3 12 24 37 45 53 61 78 90 100,low,mid,high,1 2 3 4 5 6 7 8 9 10,3 12 24 37 45 53 61 78 90 100,low,mid,high,24,45,继续在前半,个,个表中用二,分,分查找法查,找,找,1 2 3 4 5 6 7 8 9 10,3 12 24 37 45 53 61 78 90 100,Low mid high,24,12,继续在后半,个,个表中用二,分,分查找法查,找,找,5.2.1,插,插入排序,基本思想,依次将待排,记,记录插入到,有,有序子表中,,,,并使插入,子,子表后仍保,持,持有序,直,到,到全部记录,插,插入完毕;,初,初始时,有,序,序子表中只,有,有一个元素,。,。,直接插入排,序,序,插,插入排序,的,的关键:如,何,何查找插入,位,位置。直接,插,插入排序是,用,用顺序查找,法,法定位插入,位,位置。若采,用,用二分查找,法,法定位插入,位,位置则得到,另,另一种插入,算,算法,二分,插,插入排序,5.2,排,排序,例:待排记,录,录49 38 6597761327,49,(49)38 65977613 27,49,(3849)65977613 27,49,(3849 65)977613 27,49,(3849 65 97,),) 7613 27,49,(3849 65 7697)13 27,49,(1338 49 657697)27,49,(1327 38 49657697),49,(1327 38 49,49,65 76 97,),),交换法排序,基,基本思想:,对待排序列,中,中相邻元素,进,进行比较,,如,如果为逆序,,,,则将这两,个,个元素的位,置,置交换。重,复,复此操作直,到,到整个序列,全,全部有序为,止,止。,一、冒泡排,序,序,基本思路为,:,:首先将第,一,一个记录的,关,关键字和第,二,二个记录的,关,关键字比较,,,,若为逆序,,,,则两个记,录,录交换;然,后,后比较第二,个,个记录和第,三,三个记录的,关,关键字,,,直至第n-1个记,录,录和第n个,记,记录的关键,字,字比较、交,换,换结束为止,。,。经过第一,趟,趟排序后,,关,关键字最大(或最小),的,的记录被调,整,整到最后一,个,个记录的位,置,置。下一趟,排,排序时,这,个,个关键字最,大,大(或最小)的记录就,不,不必考虑了,。,。直到某一,趟,趟排序过程,中,中没有进行,交,交换操作为,止,止,。,5.2.3,快,快速,排,排序,二、快速排,序,序,当冒泡排序,在,在数据元素,的,的关键字呈,逆,逆序时进行,排,排序,需要,进,进行多次比,较,较和移动操,作,作,数据元,素,素移动是一,步,步一步进行,的,的,且有很,多,多是重复的,。,。快速排序,是,是对冒泡排,序,序算法的改,进,进。,基本思想:快速排序,又,又称为分区,交,交换法,是,通,通过对某关,键,键字(支点)的比较,,将,将各待排序,列,列分成前后,两,两部分,后,半,半部分所有,记,记录的关键,字,字值大于等,于,于支点的关,键,键字值,前,半,半部分所有,记,记录的关键,字,字小于等于,支,支点的关键,字,字值。将待,排,排序列按关,键,键字以支点,分,分成两部分,的,的过程,称,为,为一次划分。对各部分,不,不断的划分,,,,直到整个,序,序列按关键,字,字有序为止,。,。,【例】一趟,快,快速排序过,程,程示例,r0r1r2 r3 r4r5r6r7 r8 r9r10,43283976986945158,28,r0r1r2 r3 r4r5r6r7 r8 r9r10,4343283976986945158,28,lowhigh,从high向,前,前搜,索,索小,于,于r0.key的,记,记录,,,,将,其,其赋,值,值给low指,向,向的,位,位置,r0r1r2r3r4r5r6r7r8r9r10,43,28,28397698694515828,lowhigh,从low,向,向后,搜,搜索,大,大于r0.key,的,的记,录,录,,将,将其,赋,赋值,给,给high指,向,向的,位,位置,43,28,28397698694515876,lowhigh,从high向,前,前搜,索,索小,于,于r0.key的,记,记录,,,,将,其,其赋,值,值给low指,向,向的,位,位置,43,28,2839498694515876,lowhigh,从low,向,向后,搜,搜索,大,大于r0.key,的,的记,录,录,,将,将其,赋,赋值,给,给high指,向,向的,位,位置,43,28,28394986998515876,lowhigh,43,28,28394986998515876,lowhigh,low=high,,,,划,分,分结,束,束,,将,将r0.key的,值,值赋,值,值给low(high)指,向,向的,位,位置,28,28394436998515876,大于等于,43,小于等于,43,是,是以,降,降低,数,数据,元,元素,的,的移,动,动次,数,数为,排,排序,思,思路,。,。,10.4.1,直,直,接,接选,择,择排,序,序,排序,过,过程,:,:,第一,次,次,,选,选取,整,整个,序,序列,中,中关,键,键字,最,最小,的,的记,录,录与,第,第一,个,个元,素,素交,换,换;,第二,次,次,,从,从剩,余,余的n-1个,记,记录,中,中选,出,出关,键,键字,最,最小,的,的记,录,录与,第,第二,个,个记,录,录交,换,换;,第i,次,次,,则,则从,剩,剩余,的,的n-i+1,个,个记,录,录选,出,出关,键,键字,最,最小,的,的记,录,录与,第,第i,个,个记,录,录交,换,换;,直到,整,整个,序,序列,按,按关,键,键码,有,有序,。,。,5.2.4,选,选,择,择排,序,序,演讲,完,完毕,,,,谢,谢,谢观,看,看!,
展开阅读全文