数据结构-C语言-第四章串、数组和广义表课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《数据结构-C语言-第四章串、数组和广义表课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 语言 第四 数组 广义 课件
- 资源描述:
-
1、第四章第四章 串、数组和广义表串、数组和广义表2 学时学时教学目标教学目标l了解串的存储方法,理解串的两种模式匹配算法,重点掌握BF算法。l 明确数组和广义表这两种数据结构的特点,掌握数组地址计算方法,了解几种特殊矩阵的压缩存储方法。l掌握广义表的定义、性质及其GetHead和GetTail的操作。数据结构串串第一节第一节补充:补充:C语言中常用的串运算语言中常用的串运算调用标准库函数调用标准库函数#includel串比较,串比较,strcmp(char s1,char s2)l串复制,串复制,strcpy(char to,char from)l串连接,串连接,strcat(char to,c
2、har from)l求串长,求串长,strlen(char s)l 4.1.1 串串的基本概念的基本概念串串(String):零个或多个字符组成的有限序列。零个或多个字符组成的有限序列。21naaas串名串名串值串值串长串长n空串空串n=04.1.1 串串的基本概念的基本概念a=BEI,b=JING c=BEIJING d=BEI JINGla和和b是是c和和d的子串的子串la在在c和和d中的位置是中的位置是1。lb在在c中的位置是中的位置是4,在,在d中的位置为中的位置为5。l 是空格串是空格串子串子串字符位置字符位置主串主串子串位置子串位置串相等串相等空格串空格串4.1.2 串串的的抽象数
3、据类型抽象数据类型ADT String数据对象:数据对象:D=ai|aiCharacterSet,i=1,2,n,n 0 数据关系:数据关系:R=|ai-1,aiD,i=2,3,n 基本操作:基本操作:StrLength(s):求串求串s的长度。的长度。StrAssign(s1,s2):赋值,将赋值,将s2的值赋值给串的值赋值给串s1。StrConcat(s1,s2,s):连接,将串连接,将串s2放在串放在串s1的后面连接的后面连接成一个新串成一个新串s。SubStr(s,i,len):求子串,返回从串求子串,返回从串s的第的第i个字符开始取个字符开始取长为长为 len 的子串。的子串。4.1
4、.2 串串的的抽象数据类型抽象数据类型 StrCmp(s1,s2):串比较,若串比较,若s1=s2,返回,返回0;若;若s1s2,返回返回1。StrIndex(s,t):定位,返回子串定位,返回子串t在主串在主串s中首次出现的位中首次出现的位置。若置。若t不是不是s的子串,则返回的子串,则返回0。StrInsert(s,i,t):插入,将串插入,将串t插入到串插入到串s中的第中的第i个位置。个位置。StrDelete(s,i,len):删除,在串删除,在串s中删除从第中删除从第i个字符开始个字符开始的连续的连续len个字符。个字符。StrRep(s,t,r):替换,在串替换,在串s中用串中用串
5、r替换所有与串替换所有与串t相等相等的子串。的子串。ADT String4.1.2 串串的的抽象数据类型抽象数据类型求子串操作求子串操作SubStr(s,i,len)示例示例a b c d e f g ei=3,len=3i=7,len=4c d ea b c d e f g eg e空串空串4.1.3 串与线性表的比较串与线性表的比较l逻辑结构逻辑结构 串的逻辑结构和线性表极为相似,区别仅在于串的数据对串的逻辑结构和线性表极为相似,区别仅在于串的数据对象约束为字符集。象约束为字符集。l 基本操作基本操作l在线性表的基本操作中,大多以在线性表的基本操作中,大多以“单个元素单个元素”作为操作作为
6、操作对象;对象;l在串的基本操作中,通常以在串的基本操作中,通常以“串的整体串的整体”作为操作对象作为操作对象。4.1.4 串串的的存储结构存储结构l 串是一种特殊的线性表,其存储表示和线性表类似,但又串是一种特殊的线性表,其存储表示和线性表类似,但又不完全相同。串的存储方式取决于将要对串所进行的操作不完全相同。串的存储方式取决于将要对串所进行的操作。串在计算机中有。串在计算机中有3种表示方式:种表示方式:l定长顺序存储表示:定长顺序存储表示:将串定义成字符数组,利用串名可将串定义成字符数组,利用串名可以直接访问串值。用这种表示方式,串的存储空间在编以直接访问串值。用这种表示方式,串的存储空间
7、在编译时确定,其大小不能改变。译时确定,其大小不能改变。l堆分配存储方式:堆分配存储方式:仍然用一组地址连续的存储单元来依仍然用一组地址连续的存储单元来依次存储串中的字符序列,但串的存储空间是在程序运行次存储串中的字符序列,但串的存储空间是在程序运行时根据串的实际长度动态分配的。时根据串的实际长度动态分配的。l 块链存储方式:块链存储方式:是一种链式存储结构表示。是一种链式存储结构表示。4.1.4 串串的的存储结构存储结构l串的定长顺序存储表示串的定长顺序存储表示 这种存储结构又称为串的顺序存储结构。是用一组连续的存储单元来这种存储结构又称为串的顺序存储结构。是用一组连续的存储单元来存放串中的
8、字符序列。所谓定长顺序存储结构,是直接使用定长的字存放串中的字符序列。所谓定长顺序存储结构,是直接使用定长的字符数组来定义,数组的上界预先确定。符数组来定义,数组的上界预先确定。l特点特点:l串的实际长度可在这个予定义长度的范围内随意设定,超过予定义串的实际长度可在这个予定义长度的范围内随意设定,超过予定义长度的串值则被舍去,称之为长度的串值则被舍去,称之为“截断截断”。l按这种串的表示方法实现的串的运算时,其基本操作为按这种串的表示方法实现的串的运算时,其基本操作为“字符序字符序列的复制列的复制”。l定长顺序存储结构定义为:定长顺序存储结构定义为:#define MAX_STRLEN 256
9、 typedef struct char strMAX_STRLEN;int length;StringType;4.1.4 串串的的存储结构存储结构方案方案1:用一个变量来表示串的实际长度。用一个变量来表示串的实际长度。如何表示串的长度?如何表示串的长度?0 1 2 3 4 5 6 Max-1 a b c d e f g9空空 闲闲0 1 2 3 4 5 6 7 Max-1 a b c d e f g 0空空 闲闲方案方案2:在串尾存储一个不会在串中出现的特殊字符在串尾存储一个不会在串中出现的特殊字符作为串的终结符,作为串的终结符,表示串的结尾。表示串的结尾。方案方案3:用数组的用数组的0号
10、单元存放串的长度,从号单元存放串的长度,从1号单号单元开始存放串值。元开始存放串值。0 1 2 3 4 5 6 7 Max-1 9 a b c d e f g空空 闲闲4.1.4 串串的的存储结构存储结构l串的联接算法中需分三种情况处理:串的联接算法中需分三种情况处理:Status Concat(SString S1,SString S2,SString&T)/用用T返回由返回由S1和和S2联接而成的新串。若未截断联接而成的新串。若未截断,则返回则返回TRUE,否则,否则FALSE。if(S10+S20=MAXSTRLEN)/未截断未截断T1.S10=S11.S10;TS10+1.S10+S2
11、0=S21.S20;T0=S10+S20;uncut=TRUE;else if(S10 MAXSTRLEN)/s2截断截断,s1未截断未截断T1.S10=S11.S10;TS10+1.MAXSTRLEN=S21.MAXSTRLENS10;T0=MAXSTRLEN;uncut=FALSE;else /s1截断截断(仅取仅取S1)T1.MAXSTRLEN=S11.MAXSTRLEN;T0=MAXSTRLEN uncut=FALSE;return uncut;/Concat4.1.4 串串的的存储结构存储结构l串的堆分配存储表示串的堆分配存储表示l实现方法:实现方法:系统提供一个空间足够大且地址连续
12、的存储空系统提供一个空间足够大且地址连续的存储空间间(称为称为“堆堆”)供串使用。可使用供串使用。可使用C语言的动态存储分配函语言的动态存储分配函数数malloc()和和free()来管理。来管理。l特点:特点:仍然以一组地址连续的存储空间来存储字符串值,仍然以一组地址连续的存储空间来存储字符串值,但其所需的存储空间是在程序执行过程中动态分配,故是但其所需的存储空间是在程序执行过程中动态分配,故是动态的,变长的。动态的,变长的。l串的堆式存储结构的类型定义串的堆式存储结构的类型定义 typedef struct char*ch;/*若非空,按长度分配,否则为若非空,按长度分配,否则为NULL*
13、/int length;/*串的长度串的长度 */HString;4.1.4 串串的的存储结构存储结构l串的链式存储表示串的链式存储表示 串的链式存储结构和线性表的串的链式存储结构类似,采串的链式存储结构和线性表的串的链式存储结构类似,采用单链表来存储串,结点的构成是:用单链表来存储串,结点的构成是:l data域:存放字符,域:存放字符,data域可存放的字符个数称为结点的大小;域可存放的字符个数称为结点的大小;l next域:存放指向下一结点的指针。域:存放指向下一结点的指针。l 若每个结点仅存放一个字符,则结点的指针域就非常多,若每个结点仅存放一个字符,则结点的指针域就非常多,造成系统空
14、间浪费,为节省存储空间,考虑串结构的特殊造成系统空间浪费,为节省存储空间,考虑串结构的特殊性,使每个结点存放若干个字符,这种结构称为性,使每个结点存放若干个字符,这种结构称为块链结构块链结构first a b ge f gfirsta b c d4.1.4 匹配模式匹配模式模式匹配:模式匹配:给定主串给定主串S=s1s2sn和模式和模式T=t1t2tm,在在S中寻找中寻找T 的过程称为模式匹配的过程称为模式匹配。如果匹配成功,返回如果匹配成功,返回T 在在S中的位置,如果匹配失败,返回中的位置,如果匹配失败,返回0。基本思想:基本思想:从主串从主串S的第一个字符开始和模式的第一个字符开始和模式
15、T 的第一个字符的第一个字符进行比较,若相等,则继续比较两者的后续字符;否则,进行比较,若相等,则继续比较两者的后续字符;否则,从主串从主串S的第二个字符开始和模式的第二个字符开始和模式T 的第一个字符进行比较,的第一个字符进行比较,重复上述过程,直到重复上述过程,直到T 中的字符全部比较完毕,则说明本中的字符全部比较完毕,则说明本趟匹配成功;或趟匹配成功;或S中字符全部比较完,则说明匹配失败。中字符全部比较完,则说明匹配失败。模式匹配问题的特点:模式匹配问题的特点:算法的一次执行时间不容忽视:问题规模通常很大,常算法的一次执行时间不容忽视:问题规模通常很大,常常需要在大量信息中进行匹配;常需
16、要在大量信息中进行匹配;算法改进所取得的积累效益不容忽视:模式匹配操作经算法改进所取得的积累效益不容忽视:模式匹配操作经常被调用,执行频率高。常被调用,执行频率高。4.1.4 匹配模式匹配模式BP算法算法 si 主串主串S模式模式T tjji 回溯回溯 回溯回溯4.1.4 匹配模式匹配模式BP算法算法 si 主串主串S模式模式Tji tj4.1.4 匹配模式匹配模式BP算法算法例:主串例:主串S=ababcabcacbab,模式模式T=abcaca b a b c a b c a c b a bi=3,j=3失败;失败;i“回溯回溯”到到2,j回溯到回溯到1ij第第 1趟趟a b c a c
17、4.1.4 匹配模式匹配模式BP算法算法例:主串例:主串S=ababcabcacbab,模式模式T=abcaca b a b c a b c a c b a bij第第 1趟趟a b c a c i=3,j=3失败;失败;i“回溯回溯”到到2,j回溯到回溯到14.1.4 匹配模式匹配模式BP算法算法例:主串例:主串S=ababcabcacbab,模式模式T=abcaca b a b c a b c a c b a bij第第 2趟趟a b c a c i=2,j=1失败;失败;i“回溯回溯”到到3,j回溯到回溯到14.1.4 匹配模式匹配模式BP算法算法例:主串例:主串S=ababcabcac
18、bab,模式模式T=abcaca b a b c a b c a c b a bij第第 2趟趟a b c a c i=2,j=1失败;失败;i“回溯回溯”到到3,j回溯到回溯到14.1.4 匹配模式匹配模式BP算法算法例:主串例:主串S=ababcabcacbab,模式模式T=abcaca b a b c a b c a c b a bi=7,j=5失败;失败;i“回溯回溯”到到4,j回溯到回溯到1ij第第 3趟趟a b c a c 4.1.4 匹配模式匹配模式BP算法算法例:主串例:主串S=ababcabcacbab,模式模式T=abcaca b a b c a b c a c b a b
19、ij第第 3趟趟a b c a c i=7,j=5失败;失败;i“回溯回溯”到到4,j回溯到回溯到14.1.4 匹配模式匹配模式BP算法算法例:主串例:主串S=ababcabcacbab,模式模式T=abcaca b a b c a b c a c b a bij第第 4趟趟a b c a c i=4,j=1失败;失败;i“回溯回溯”到到5,j回溯到回溯到14.1.4 匹配模式匹配模式BP算法算法例:主串例:主串S=ababcabcacbab,模式模式T=abcaca b a b c a b c a c b a bij第第 4趟趟a b c a c i=4,j=1失败;失败;i“回溯回溯”到到
20、5,j回溯到回溯到14.1.4 匹配模式匹配模式BP算法算法例:主串例:主串S=ababcabcacbab,模式模式T=abcaca b a b c a b c a c b a bij第第 5趟趟a b c a c i=5,j=1失败;失败;i“回溯回溯”到到6,j回溯到回溯到14.1.4 匹配模式匹配模式BP算法算法例:主串例:主串S=ababcabcacbab,模式模式T=abcaca b a b c a b c a c b a bij第第 5趟趟a b c a c i=5,j=1失败;失败;i“回溯回溯”到到6,j回溯到回溯到14.1.4 匹配模式匹配模式BP算法算法例:主串例:主串S=
21、ababcabcacbab,模式模式T=abcaca b a b c a b c a c b a bij第第 6趟趟a b c a c i=11,j=6,T中全部字符都比中全部字符都比较完毕,较完毕,匹配成功匹配成功。4.1.4 匹配模式匹配模式BP算法算法l算法描述算法描述l在串在串S和串和串T中设比较的起始下标中设比较的起始下标i和和j;l循环直到循环直到S或或T的所有字符均比较完;的所有字符均比较完;如果如果Si=Tj,继续比较继续比较S和和T的下一个字符;的下一个字符;否则,将否则,将i和和j回溯,准备下一趟比较;回溯,准备下一趟比较;l如果如果T中所有字符均比较完,则匹配成功,返回匹
22、配的起中所有字符均比较完,则匹配成功,返回匹配的起始比较下标;否则,匹配失败,返回始比较下标;否则,匹配失败,返回0;4.1.4 匹配模式匹配模式BP算法算法int Index(SString S,SString T,int pos)/返回子串返回子串T在主串在主串S中第中第pos个字符之后的位置。若不存在,则函数个字符之后的位置。若不存在,则函数值为值为0。/其中,其中,T非空,非空,1posStrLength(S)。i=pos;j=1;while(i=S0&j T0)return i-T0;else return 0;/Indexijj-1i-1i-j+2i-j+1124.1.4 匹配模式
展开阅读全文