串数组和广义表优秀课件.ppt
《串数组和广义表优秀课件.ppt》由会员分享,可在线阅读,更多相关《串数组和广义表优秀课件.ppt(59页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、串数组和广义表串数组和广义表第1页,本讲稿共59页 2022年9月23日 第第4 4章章串、数组和广义表串、数组和广义表 4.1 4.1 串串4.2 4.2 数组数组4.3 4.3 广义表广义表 教学内容教学内容第2页,本讲稿共59页 2022年9月23日 1.1.掌握串的存储方法,理解串的两种模式匹配掌握串的存储方法,理解串的两种模式匹配算法算法;2.2.明确数组和广义表这两种数据结构的特点,明确数组和广义表这两种数据结构的特点,掌握数组存储时地址计算方法,了解几种特掌握数组存储时地址计算方法,了解几种特殊矩阵的压缩存储方法。殊矩阵的压缩存储方法。教学目标教学目标1.了解串的存储方法,理解串
2、的两种模式匹配了解串的存储方法,理解串的两种模式匹配算法,重点掌握算法,重点掌握BF算法算法。2.明确数组和广义表这两种数据结构的特点,明确数组和广义表这两种数据结构的特点,掌握掌握数组地址计算方法数组地址计算方法,了解几种特殊矩阵,了解几种特殊矩阵的压缩存储方法。的压缩存储方法。3.掌握广义表的定义、性质及其掌握广义表的定义、性质及其GetHead和和GetTail的操作的操作。第3页,本讲稿共59页 2022年9月23日 4.1 4.1 串串串串(String)-(String)-零个或多个字符组成的有限序列零个或多个字符组成的有限序列串名串名串值串值串长串长n空串空串n=0第4页,本讲稿
3、共59页 2022年9月23日 a=a=BEIBEI,b=b=JINGJING c=c=BEIJINGBEIJING d=d=BEI JINGBEI JING子串子串字符位置字符位置主串主串子串位置子串位置串相等串相等空格串空格串第5页,本讲稿共59页 2022年9月23日 数据对象数据对象:数据关系数据关系:基本操作基本操作:(1)StrAssign(&T,chars)/串赋值串赋值(2)StrCompare(S,T)/串比较串比较(3)StrLength(S)/求串长求串长(4)Concat(&T,S1,S2)/串联串联ADT String 串的抽象数据类型串的抽象数据类型第6页,本讲稿共
4、59页 2022年9月23日 北京林业大学信息学院北京林业大学信息学院(5)SubString(&Sub,S,pos,len)/求子串求子串(6)StrCopy(&T,S)/串拷贝串拷贝(7)StrEmpty(S)/串判空串判空(8)ClearString(&S)/清空串清空串(9)Index(S,T,pos)/子串的位置子串的位置(11)Replace(&S,T,V)/串替换串替换(12)StrInsert(&S,pos,T)/子串插入子串插入(12)StrDelete(&S,pos,len)/子串删除子串删除(13)DestroyString(&S)/串销毁串销毁ADTString第7页,
5、本讲稿共59页 2022年9月23日 顺序存储顺序存储链式存储链式存储串的存储结构串的存储结构第8页,本讲稿共59页 2022年9月23日 typedef structtypedef struct charchar*ch;/*ch;/若串非空若串非空,则按串长分配存储区则按串长分配存储区,/否则否则chch为为NULLNULL int length;/int length;/串长度串长度 HString;HString;顺序存储表示顺序存储表示第9页,本讲稿共59页 2022年9月23日 链式存储表示链式存储表示第10页,本讲稿共59页 2022年9月23日 可将多个字符存放在一个结点中,以克
6、服其缺点可将多个字符存放在一个结点中,以克服其缺点优点:操作方便优点:操作方便缺点:存储密度较低缺点:存储密度较低实际分配的存储位实际分配的存储位串值所占的存储位串值所占的存储位存储密度存储密度=链式存储表示链式存储表示第11页,本讲稿共59页 2022年9月23日#define CHUNKSIZE 80 /可由用户定义的块大小可由用户定义的块大小typedef struct Chunk char chCHUNKSIZE;struct Chunk*next;Chunk;typedef struct Chunk*head,*tail;/串的头指针和尾指针串的头指针和尾指针int curlen;/
7、串的当前长度串的当前长度LString;链式存储表示链式存储表示第12页,本讲稿共59页 2022年9月23日 算法目的:算法目的:BFBF算法算法(又称古典的、经典的、朴素的、穷举的)(又称古典的、经典的、朴素的、穷举的)KMPKMP算法(特点:速度快)算法(特点:速度快)算法种类:算法种类:确定主串中所含子串第一次出现的位置(定位)确定主串中所含子串第一次出现的位置(定位)即如何实现教材即如何实现教材P72 Index(S,T,pos)函数函数串的模式匹配算法串的模式匹配算法第13页,本讲稿共59页 2022年9月23日 S:ababcabcacbabT:abcijS:ababcabcac
8、babT:abcS:ababcabcacbabT:abci i i i指针回溯指针回溯指针回溯指针回溯BFBF算法设计思想算法设计思想第14页,本讲稿共59页 2022年9月23日 将主串的第将主串的第pospos个字符和模式的第一个字符比较,个字符和模式的第一个字符比较,若若相等相等,继续逐个比较后续字符;,继续逐个比较后续字符;若若不等不等,从主串的下一字符起,重新与模式的第一个字,从主串的下一字符起,重新与模式的第一个字符比较。符比较。直到主串的一个连续子串字符序列与模式相等直到主串的一个连续子串字符序列与模式相等 。返。返回值为回值为S S中与中与T T匹配的子序列匹配的子序列第一个字
9、符的序号第一个字符的序号,即匹配,即匹配成功。成功。否则,匹配失败,返回值否则,匹配失败,返回值 0 0BFBF算法设计思想算法设计思想Index(S,T,pos)第15页,本讲稿共59页 2022年9月23日 int Index(Sstring S,Sstring T,int pos)i=pos;j=1;while(i=S 0&j T 0)return iT0;else return 0;BFBF算法描述(算法算法描述(算法4.14.1)第16页,本讲稿共59页 2022年9月23日 若若n n为主串长度,为主串长度,m m为子串长度,最坏情况是为子串长度,最坏情况是BFBF算法时间复杂度算
10、法时间复杂度主串前面主串前面n-mn-m个位置都部分匹配到子串的最后一位,即个位置都部分匹配到子串的最后一位,即这这n-mn-m位各比较了位各比较了m m次次最后最后m m位也各比较了位也各比较了1 1次次总次数为:总次数为:(n-m)*m+m(n-m+1)*m若若mn,则算法复杂度,则算法复杂度O(n*m)例:例:S=S=00000000010000000001,T=T=00010001,pos=1pos=1第17页,本讲稿共59页 2022年9月23日 利用已经利用已经部分匹配部分匹配的结果而加快模式串的滑动速度,的结果而加快模式串的滑动速度,且主串且主串S S的指针的指针i i不必回溯不
11、必回溯!亲!可提速到!亲!可提速到O(n+m)O(n+m)哦!哦!S=ababcabcacbabT=T=abcacS=ababcabcacbabT=T=abcacS=ababcabcacbabT=T=abcaci ii ii ik kk kabaabck ki ii iKMPKMP算法设计思想(了解)算法设计思想(了解)第18页,本讲稿共59页KMP算法的算法的时间复杂度时间复杂度可以达到可以达到O(m+n)当当SiTj时,已经得到的结果时,已经得到的结果:Si-j+1.i-1=T1.j-1若已知若已知T1.k-1=Tj-k+1.j-1则有则有Si-k+1.i-1=T1.k-1三、三、KMP(
12、D.E.Knuth,V.R.Pratt,KMP(D.E.Knuth,V.R.Pratt,J.H.Morris)J.H.Morris)算法算法第19页,本讲稿共59页定义:模式串的定义:模式串的next函数函数第20页,本讲稿共59页intIndex_KMP(SStringS,SStringT,intpos)/1posStrLength(S)i=pos;j=1;while(i=S0&jT0)returni-T0;/匹配成功匹配成功elsereturn0;/Index_KMP第21页,本讲稿共59页这实际上也是一个匹配的过程,这实际上也是一个匹配的过程,不同在于:主串和模式串是同一个串不同在于:主
13、串和模式串是同一个串求求next函数值的过程是一个函数值的过程是一个递推过程,分析如下递推过程,分析如下:已知:已知:next1=0;假设:假设:nextj=k;又;又Tj=Tk则:则:nextj+1=k+1若:若:Tj Tk则则需往前回朔,检查需往前回朔,检查Tj=T?第22页,本讲稿共59页voidget_next(SString&T,int&next)/求模式串求模式串T的的next函数值并存入数组函数值并存入数组next。i=1;next1=0;j=0;while(iT0)if(j=0|Ti=Tj)+i;+j;nexti=j;elsej=nextj;/get_next第23页,本讲稿共
14、59页还有一种特殊情况需要考虑:还有一种特殊情况需要考虑:例如:例如:S=aaabaaabaaabaaabaaab T=aaaab nextj=01234nextvalj=00004第24页,本讲稿共59页voidget_nextval(SString&T,int&nextval)i=1;nextval1=0;j=0;while(i 0 a,i=0 a+i*la第34页,本讲稿共59页 2022年9月23日 二维数组二维数组第35页,本讲稿共59页 2022年9月23日 以行序为主序以行序为主序C,PASCAL数组的顺序存储数组的顺序存储第36页,本讲稿共59页 2022年9月23日 以列序为
15、主序FORTRAN第37页,本讲稿共59页 2022年9月23日 anm设数组开始存放位置设数组开始存放位置LOC(0,0)=aLOC(j,k)=a+j*m+k二维数组的行序优先表示二维数组的行序优先表示第38页,本讲稿共59页 2022年9月23日 设有二维数组设有二维数组A10,20A10,20,其每个元素占两个字节,其每个元素占两个字节,A A0000存储地址为存储地址为100100,若,若按行优先按行优先顺序存储,则元素顺序存储,则元素A6,6A6,6的存的存储地址为储地址为 ,按列优先按列优先顺序存储,元素顺序存储,元素A6,6A6,6的存的存储地址为储地址为 。课堂任务课堂任务(经
16、验值(经验值200)352352232232(6*20+6)*2+100=352(6*20+6)*2+100=352(6*10+6)*2+100=232(6*10+6)*2+100=232第39页,本讲稿共59页 2022年9月23日 设设有有一一个个二二维维数数组组A A m mn n 按按行行优优先先顺顺序序存存储储,假假设设A A0000存存放放位位置置在在644644(10)(10),A A2222存存放放位位置置在在676676(10)(10),每每个个元元素素占占一一个个空空间间,问问A A3333(10)(10)存存放放在在什什么位置?脚注么位置?脚注(10)(10)表示用表示用
17、1010进制表示。进制表示。设数组元素设数组元素Aij存放在起始地址为存放在起始地址为Loc(i,j)的存储单元中的存储单元中Loc(2,2)=Loc(0,0)+2*n+2=644+2*n+2=676.n=(676-2-644)/2=15Loc(3,3)=Loc(0,0)+3*15+3=644+45+3=692.课堂任务课堂任务(经验值(经验值200200)第40页,本讲稿共59页 2022年9月23日 1.什么是压缩存储?什么是压缩存储?若多个数据元素的若多个数据元素的值都相同值都相同,则只分配一个元素值的存,则只分配一个元素值的存储空间,且零元素不占存储空间。储空间,且零元素不占存储空间。
18、2.什么样的矩阵能够压缩?什么样的矩阵能够压缩?一些值相同的元素或零元素在矩阵中分布有规律的特殊矩阵,一些值相同的元素或零元素在矩阵中分布有规律的特殊矩阵,如:对称矩阵,对角矩阵,三角矩阵,稀疏矩阵等。如:对称矩阵,对角矩阵,三角矩阵,稀疏矩阵等。3.什么叫稀疏矩阵?什么叫稀疏矩阵?矩阵中非零元素的个数较少(一般小于矩阵中非零元素的个数较少(一般小于5%5%)特殊矩阵的压缩存储特殊矩阵的压缩存储(课堂自学,完成以下任务,每任务课堂自学,完成以下任务,每任务200200经验值经验值)第41页,本讲稿共59页 2022年9月23日 4.3 4.3 广义表广义表广义表(列表):广义表(列表):n(0
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数组 广义 优秀 课件
限制150内