数据结构(C++)串.ppt
《数据结构(C++)串.ppt》由会员分享,可在线阅读,更多相关《数据结构(C++)串.ppt(54页珍藏版)》请在第壹文秘上搜索。
1、 算法题(本题算法题(本题12分)分) 假设以假设以I和和O分别表示入栈和出栈操作,栈的初分别表示入栈和出栈操作,栈的初态和终态均为空,入栈和出栈的操作序列可表态和终态均为空,入栈和出栈的操作序列可表示为仅由示为仅由I和和O组成的序列。称可以操作的序列组成的序列。称可以操作的序列为合法序列,否则称为非法序列。为合法序列,否则称为非法序列。 1.下面所示的序列中哪些是合法的?下面所示的序列中哪些是合法的? A.IOIIOIOO B.IOOIOIIO C.IIIOIOIO D.IIIOOIOO 2.通过对问题通过对问题1的分析,写出一个算法判定给所给的操的分析,写出一个算法判定给所给的操作序列是否
2、合法。若合法则返回作序列是否合法。若合法则返回true,否则返回,否则返回false。(假定被判定的操作序列已存入一维数组中。)(假定被判定的操作序列已存入一维数组中。)#define m 100#define true 1#define false 0int JudgeS(char s ) char Stackm; int top=-1, i=0; while(si!=#) if(si=I) top+; Stacktop=si+; else if(si=0) if(top=0) top-; i+; else return false; else return true; 一、串的定义一、串的
3、定义 二、串类的实现二、串类的实现 三、三、串的模式匹配串的模式匹配 四、一些应用四、一些应用难点难点 串是零个或多个字符组成的有限序列。串是零个或多个字符组成的有限序列。 一般记作一般记作S=“ a0a1a2an-1 “ (n=0) ai(0in-1)可以是字母、数字或其它字符;可以是字母、数字或其它字符; 串的应用非常广泛,许多高级语言中都把串的作为基串的应用非常广泛,许多高级语言中都把串的作为基本数据类型。在事务处理程序中,顾客的姓名、地址本数据类型。在事务处理程序中,顾客的姓名、地址货物的名称、产地可作为字符串处理,文本文件中的货物的名称、产地可作为字符串处理,文本文件中的每一行字符等
4、也可作为字符串处理。串可以看成字符每一行字符等也可作为字符串处理。串可以看成字符类型的顺序表。类型的顺序表。 例:例:(1)a = “This is a string”(2)b = “string” (3)c = “ ” (4)d = “”(5)e = “你好你好”说明:说明:(1)串中包含的字符个数,称为串的长度。)串中包含的字符个数,称为串的长度。 长度为长度为0的的串称为空串,它不包括任何字符串称为空串,它不包括任何字符;(2)串中所包含的字符可以是字母、数字或其他字符,)串中所包含的字符可以是字母、数字或其他字符,这依赖于具体计算机所允许的字符集。这依赖于具体计算机所允许的字符集。空空
5、 串串n=0的串的串子子 串串串中若干相邻字符组成的子序列串中若干相邻字符组成的子序列主主 串串包含子串的串包含子串的串空格串空格串仅含有空格字符的串仅含有空格字符的串(n不为不为0)串相等串相等设设 s1=a11,an1 s2=a12,an2 若若 n1=n2且且ai1=ai2(1in1) 则则 s1=s2 术语:术语:串的基本操作串的基本操作串的基本操作串的基本操作串的基本操作串的基本操作 原始的原始的C风格的串,容易出问题。风格的串,容易出问题。 char *s; 在在C+在头文件在头文件string中已含了一种安全的字中已含了一种安全的字符串实现,但由于这个库没有包含在一些较老符串实现
6、,但由于这个库没有包含在一些较老的的C+编译器中,因此本节将设计自已的安全编译器中,因此本节将设计自已的安全的的String类,使用面向对象技术来克服类,使用面向对象技术来克服C风格风格的串中存在的问题。的串中存在的问题。串类的实现串类的实现串相关操作串相关操作串构造函数串构造函数(1)(1)串构造函数串构造函数(2)(2)String:String(LinkList ©)/ 操作结果:从线性表转换构造新串操作结果:从线性表转换构造新串转换构造函数转换构造函数length = copy.Length();/ 串长串长strVal = new charlength + 1;/ 分配存储空
7、间分配存储空间 for (int i = 0; i m,故上述的时间复杂度为,故上述的时间复杂度为O(mn)2/ )2+(=)1+/(=)(1+1=1+1=mnmimnmmiPmnimnii简单匹配算法缺点在于每次不能匹配以后主串(目标简单匹配算法缺点在于每次不能匹配以后主串(目标串)指针和子串(模式串)指针都必须回溯,造成了串)指针和子串(模式串)指针都必须回溯,造成了这种算法的时间复杂度为这种算法的时间复杂度为O(m*n)。而而KMP算法使得主串指针不必回溯而只需回溯模式串算法使得主串指针不必回溯而只需回溯模式串指针,并且模式串指针也不一定需要回溯到模式串的指针,并且模式串指针也不一定需要
8、回溯到模式串的第一个字符,第一个字符,KMP算法的时间复杂度为算法的时间复杂度为O(m+n)。例如,当:例如,当:T=“0000000000000000000000000000001”P=“000001”时,时,KMP算法算法比简单算法效率要高的多。比简单算法效率要高的多。 改进算法是由改进算法是由D.E. Knuth, J.H.Morris, 和和V.R. Pratt同时发现的。同时发现的。KMP字符串模式匹配算法字符串模式匹配算法第第1趟匹配趟匹配 T a b a a b a b P a b a b | | |第第2趟匹配趟匹配 T a b a a b a b P a b a b |第第3
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构