数据结构C语言版第四章严蔚敏学习教案.pptx
《数据结构C语言版第四章严蔚敏学习教案.pptx》由会员分享,可在线阅读,更多相关《数据结构C语言版第四章严蔚敏学习教案.pptx(36页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、会计学1数据结构数据结构(sh j ji u)C语言版第四章课语言版第四章课件严蔚敏件严蔚敏第一页,共36页。4.1 串类型串类型(lixng)的定义的定义 1.基本概念基本概念串串(字字符符串串)String:是是零零个个或或多多个个字字符符组组成成的的有有限限序序列列。一一般般(ybn)记为:记为:S=a1a2.an(n0)栈、队列:操作受限的线性表。栈、队列:操作受限的线性表。串:取值范围受限的线性表,数据对象约束为字符集。串:取值范围受限的线性表,数据对象约束为字符集。其其中中S是是串串的的名名字字,用用单单引引号号括括起起来来的的字字符符序序列列是是串串的的值值,ai(1in)可以是
2、字母、数字或其它字符。可以是字母、数字或其它字符。串的长度:串中字符的个数串的长度:串中字符的个数n。空串空串(Null String):n=0时的串称为空串,用符号时的串称为空串,用符号“”表示表示 。第1页/共36页第二页,共36页。l子子串串:串串中中任任意意个个连连续续的的字字符符组组成成的的子子序序列列称称为为该该串串的的子子 串。串。“”为任意串的子串。为任意串的子串。l主串:包含主串:包含(bohn)子串的串相应地称为主串。子串的串相应地称为主串。第2页/共36页第三页,共36页。l l位置:字符在串中的序号称为该字符在串中的位位置:字符在串中的序号称为该字符在串中的位位置:字符
3、在串中的序号称为该字符在串中的位位置:字符在串中的序号称为该字符在串中的位置。子串在主串中的位置则以子串的第一个字符置。子串在主串中的位置则以子串的第一个字符置。子串在主串中的位置则以子串的第一个字符置。子串在主串中的位置则以子串的第一个字符在主串中的位置来表示。在主串中的位置来表示。在主串中的位置来表示。在主串中的位置来表示。l l A=China Beijing,B=Beijing,C=China,A=China Beijing,B=Beijing,C=China,则则则则它们的长度分别它们的长度分别它们的长度分别它们的长度分别(fnbi)(fnbi)为为为为1313、7 7和和和和5 5
4、。B B和和和和C C是是是是A A的的的的子串子串子串子串,B,B在在在在A A中的位置是中的位置是中的位置是中的位置是7,C7,C在在在在A A中的位置是中的位置是中的位置是中的位置是1 1。l l串相等:当且仅当两个串的值相等时串相等:当且仅当两个串的值相等时串相等:当且仅当两个串的值相等时串相等:当且仅当两个串的值相等时,称这两个串称这两个串称这两个串称这两个串是相等的,即只有当两个串的长度相等是相等的,即只有当两个串的长度相等是相等的,即只有当两个串的长度相等是相等的,即只有当两个串的长度相等,并且每个并且每个并且每个并且每个对应位置的字符都相等时才相等。对应位置的字符都相等时才相等
5、。对应位置的字符都相等时才相等。对应位置的字符都相等时才相等。l l空格串:由一个或多个空格组成的串。与空串不空格串:由一个或多个空格组成的串。与空串不空格串:由一个或多个空格组成的串。与空串不空格串:由一个或多个空格组成的串。与空串不同。同。同。同。第3页/共36页第四页,共36页。串的基本操作和线性表区别串的基本操作和线性表区别(qbi)很大。很大。线性表线性表:大多以大多以“单个元素单个元素(yun s)”为操作对象为操作对象串串:通常通常(tngchng)以以“串的整体串的整体”为操作对象为操作对象例,例,查找某个元素;插入某个元素;删除某个元素查找某个元素;插入某个元素;删除某个元素
6、例,例,查找某个子串;截取某个子串;查找某个子串;截取某个子串;在某个位置插入、删除某个子串在某个位置插入、删除某个子串串的逻辑结构和线性表相似,故看作一种线性表。串的逻辑结构和线性表相似,故看作一种线性表。s=a1a2 an (n0)第4页/共36页第五页,共36页。2.串的基本运算串的基本运算:串赋值串赋值StrAssign(&T,chars)初始条件初始条件:chars是字符串常量。是字符串常量。操作结果操作结果:生成一个值等于生成一个值等于chars的串的串T。串比较串比较(bjio)StrCompare(S,T)初始条件初始条件:串串S和和T存在。存在。操作结果操作结果:若若ST,则
7、返回值则返回值0;如如S=T,则返回值则返回值=0;若若ST,则返回值则返回值0。求串长求串长StrLength(S)初始条件初始条件:串串S存在。存在。操作结果操作结果:返回串返回串S的长度的长度,即串即串S中的元素个数。中的元素个数。第5页/共36页第六页,共36页。l 串联串联(chunlin)接接Concat(&T,S1,S2)l 初始条件初始条件:串串S1和和S2存在。存在。l 操作结果操作结果:将将T返回由返回由S1和和S2联接而成的新串。联接而成的新串。l 求子串求子串SubString(&Sub,S,pos,len)l 初始条件初始条件:串串S存在存在,1posStrLengt
8、h(S)且且l 1lenStrLength(S)-pos+1。l 操操作作结结果果:用用Sub返返回回串串S的的第第pos个个字字符符起起长长度度为为len的的l 子串。子串。第6页/共36页第七页,共36页。4.2 串的表示串的表示(biosh)和实和实现现 定长顺序存储表示定长顺序存储表示(biosh)顺序存储顺序存储 堆分配堆分配(fnpi)存储表示存储表示顺序存储顺序存储 块链存储表示块链存储表示链式存储链式存储第7页/共36页第八页,共36页。1.定长顺序存储表示定长顺序存储表示(biosh)(定长顺序串)(定长顺序串)define MAXSTRLEN 255 typedef uns
9、igned char SStringMAXSTRLEN+1;l定长顺序串的存储分配是在编译定长顺序串的存储分配是在编译(biny)时完成的。与前面所讲的线性表的顺序存储结构类似时完成的。与前面所讲的线性表的顺序存储结构类似,用一组地址连续的存储单元存储串的字符序列。用一组地址连续的存储单元存储串的字符序列。l超出予定义长度的串值被舍去,称之为超出予定义长度的串值被舍去,称之为“截断截断”。012255第8页/共36页第九页,共36页。n n串长的表示:串长的表示:n n以下标为以下标为0的数组分量存放串的实际长度;的数组分量存放串的实际长度;n n串值后加入一个不计入串值后加入一个不计入(j
10、r)串长的结串长的结束标记字符,束标记字符,C中中“0”表串值的终结,其表串值的终结,其ASC码值为码值为0。第9页/共36页第十页,共36页。算法算法(sun f)4.2 串联接串联接 strcat(&T,S1,S2)要求要求:顺序联接顺序联接(lin ji)串串 S1 和串和串 S2 得到新串得到新串 T。思想思想(sxing):基于串基于串S1和和S2长度的不同情况,串长度的不同情况,串T可能出现可能出现3种情况种情况:S10+S20MAXSTRLEN,S10+S20MAXSTRLENS10MAXSTRLEN,S10MAXSTRLEN,直接联接,直接联接,T0MAXSTRLEN;截断截断
11、S2,联接,联接,T0MAXSTRLEN;T S1;第10页/共36页第十一页,共36页。1255S101255T0T0=S10+S201255S20S10+S20MAXSTRLEN第11页/共36页第十二页,共36页。1255S10S10+S20MAXSTRLEN,S10MAXSTRLEN1255T0 255-S101255S20 255-S10T0MAXSTRLEN第12页/共36页第十三页,共36页。2.堆分配存储堆分配存储(cn ch)表示(堆串)表示(堆串)在在C语言中,已经有一个称为语言中,已经有一个称为“堆堆”的自由的自由(zyu)存储空间,并可用存储空间,并可用malloc()
12、和()和free()函数完成动态存储管理。()函数完成动态存储管理。typedef struct char *ch;int length;HString;应用程序用到的内存分配应用程序用到的内存分配(fnpi):栈分配:栈分配(fnpi)和堆分配和堆分配(fnpi)。堆:用户程序动态申请的地址空间。堆:用户程序动态申请的地址空间。栈:保存函数参数和块内局部变量的内存区。栈:保存函数参数和块内局部变量的内存区。void Fun1()void Fun2()int i;int*p=new int10;char p10;.;delete p;.;第13页/共36页第十四页,共36页。3.串的块链存储串
13、的块链存储(cn ch)表示(链串)表示(链串)define CHUNKSIZE typedef struct Chunk char chCHUNKSIZE;struct Chunk *next;Chunk;typedef struct Chunk *head;Chunk *tail;int curlen;LString;第14页/共36页第十五页,共36页。l存储密度大,一些操作(如插入存储密度大,一些操作(如插入(ch r),删除)有所不便,删除)有所不便,引起大量字符移动,适合于在串基本保持静态使用方式时采引起大量字符移动,适合于在串基本保持静态使用方式时采用;用;l存储密度小,运算处理
14、方便,但存储空间量大,若处理过程存储密度小,运算处理方便,但存储空间量大,若处理过程中,需大量内外存交换,会影响总效率;中,需大量内外存交换,会影响总效率;l串的字符集的大小,也会影响串值存储方式的选取。串的字符集的大小,也会影响串值存储方式的选取。第15页/共36页第十六页,共36页。l l作业作业(zuy):l l 4.1l l4.18第16页/共36页第十七页,共36页。1.朴素模式匹配算法朴素模式匹配算法(Brute-Force算法算法)求子串位置的定位函数求子串位置的定位函数Index(S,T,pos).模式匹配:子串的定位操作通常称作串的模式匹配。模式匹配:子串的定位操作通常称作串
15、的模式匹配。目标串:主串目标串:主串S。模式串:子串模式串:子串T。匹配成功:若存在匹配成功:若存在T的每个字符依次和的每个字符依次和S中的一个连续字符序中的一个连续字符序列列(xli)相等,则称匹配成功。返回相等,则称匹配成功。返回T中第一个字符在中第一个字符在S中的中的位置。位置。匹配不成功:返回匹配不成功:返回0。4.3 串的模式匹配算法串的模式匹配算法(sun f)第17页/共36页第十八页,共36页。l lBrute-Force简称为简称为BF算法算法,亦称简亦称简单匹配算法单匹配算法,其基本思路是其基本思路是:l l 从目标串从目标串s=“s1s2sn”的第的第一个字符开始和模式串
16、一个字符开始和模式串t=“t1t2tm”中的第一个字符比较中的第一个字符比较(bjio),若相等若相等,则继续逐个比较则继续逐个比较(bjio)后续字符;否则从目标串后续字符;否则从目标串s的第二个字符开始重新与模式串的第二个字符开始重新与模式串t的第一个字符进行比较的第一个字符进行比较(bjio)。依次类推依次类推,若从目标串若从目标串s的第的第i个字个字符开始符开始,每个字符依次和模式串每个字符依次和模式串t中中的对应字符相等的对应字符相等,则匹配成功则匹配成功,该算该算法返回法返回i;否则;否则,匹配失败匹配失败,函数返函数返回回0。第18页/共36页第十九页,共36页。例如,设目标串s
17、=“cddcdc”,模式串t=“cdc”。s的长度(chngd)为n(n=6),t的长度(chngd)为m(m=3)。用指针i指示目标串s的当前比较字符位置,用指针j指示模式串t的当前比较字符位置。BF模式匹配过程如下所示。i=i j+2;j=1;第19页/共36页第二十页,共36页。l l子串定位子串定位子串定位子串定位(dngwi)int Index(SString S,SString T,(dngwi)int Index(SString S,SString T,int pos)int pos)l l l l i=pos;j=1;i=pos;j=1;l l while(i=S0&j=T0)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 语言版 第四 章严蔚敏 学习 教案
限制150内