- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
ch4 数据结构 串
数据结构讲义 第4章 串 主讲:梁宝兰 教学要求: 1、掌握:串的基本概念、串的抽象数据类型、串的2种存储结构,尤其是在顺序存储下的顺序串类及其基本运算、基于穷举法的Brute-Force串的简单模式匹配算法。 2、理解:KMP模式匹配算法。 内容提要 串的基本概念 串的抽象数据类型 串的存储结构 顺序存储的顺序串类及其基本运算 串的模式匹配算法 引子 串应用范围: 信息检索 文字编辑 语言翻译 音乐分析 串的基本概念 一、串的定义 串(string):由n(n≥0)个字符组成的有限序列。一般设为s=’ a0,a1,……,an-1’ 。 串也可以看成是一种特殊的线性表,只不过该线性表的数据元素都是字符。 (串的)长度:串中字符的个数称为串的长度; 空串:长度为零的串称为空串; 子串:串中任意个连续的字符组成的子序列称为该串的子串。相应地包含子串的串称为主串。 (字符在串中的)位置:一个字符在串这个字符序列中的序号; (子串在串中的)位置:子串的第一个字符在串中的位置。 4.1 串的抽象数据类型 一、串的基本操作 Initiate(s):初始化串s Assign( s, t):将串t 的值赋给串s Length(s):求字符串s的长度 串的比较Compare(s,t):比较字符串s和t的大小,如果s大于t,则返回1;如果s等于t,则返回0;如果s小于t,则返回-1 Insert(s,pos,t):将字符串t插入到字符串s的第pos个字符前面 Delete(s,pos,len):删除字符串s的从pos起以后的len个字符 SubString(s,start,len):返回从串s 的第start个字符起长度为len 的字符序列(子串) Concat(s,t):把串t 拼接在串 s 后面 模式匹配Index( s, t ) :求子串t在字符串s中的位置。 简单模式匹配(Brute-Force) KMP模式匹配 复习:C++中的字符串函数 求串的长度 int strlen(const char* str) 串拷贝 char* strcpy(char* str1,const char* str2) 串比较 int strcmp(const char* str1,const char* str2) 字符定位 char* strchr(const char* str,const char ch) 子串定位 char* strstr(char* str1,char* str2) 字符串连接 char* strcat(char* s,char* t) 4.2 串的存储结构 一、串的顺序存储结构 : 用一组地址连续的存储单元存储串的字符序列。 1、静态数组结构: const int MaxSize = 100; char str[MaxSize]; 2、使用动态数组: char *str; int MaxSize; str = new char[MaxSize]) 4.2 串的存储结构 3、串赋值 输入一行字符串: cin.getline(str,MaxSize); 利用循环输入字符串: for(int i=0;iMaxSize;i++) cin.get(str[i]); 4、串输出: cout str; //注意是否有串结束符 4.2 串的存储结构 二、串的链式存储结构 : 1. 用一个链表存放字符串,每个结点只存一个字符(图示) struct Node { char data; Node* next; }; Node* head; 4.2 串的存储结构 二、串的链式存储结构 : 2. 用一个链表存放字符串,每个结点存放多个字符(图示) struct Node { char data[4]; Node* next; }; Node* head; 4.3 顺序串类 字符串类的定义 class String { friend ostream operator (ostream os,const String s); friend istream operator (istream is,String s); private: char* str; //字符串字符数据存放 int size; //字符串长度 public: String(); //构造一个空串对象 String(int length); // 构造一个长度为length的空格串对象
文档评论(0)