- 1、本文档共80页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第4章 字符串及线性结构及扩展
01/06/2002 数据结构讲义 第4章 字符串及线性结构的扩展 教学内容: 4.1 字符串 4.2 数组 4.3 广义表 教学目的: (1)了解串、数组、广义表几中特殊的线形表的定义; (2)理解和领会串的存储方式和掌握常用的串运算; (3)理解多维数组的结构特点和在内存中的两种顺序存储方式; (4)领会稀疏矩阵的压缩方式和简单运算。 ⒊教学重点: (1)串和数组的逻辑结构、基本运算 (2)串的两种存储方式 (3)串的模式匹配算法 (4)多维数组的两种顺序存储方式 (5)对称矩阵、三角矩阵的压缩存储方式 (6)稀疏矩阵的三元组表表示方法 ⒋教学难点: (1)串的模式匹配 (2)串的综合应用 (3)稀疏矩阵压缩存储表示下的运算实现 ⒌学时安排: 4学时 4.1 字符串 4.1.1 字符串的基本概念 4.1.2 顺序串 4.1.3 模式匹配 4.1.1 字符串的基本概念 字符串(简称为串)是数据元素为字符的线性表,它的是由零个或多个任意字符组成的字符序列。 一般记作:s=”s1 s2 … sn”。 其中s 是串名;在本书中,用双引号作为串的定界符,引号引起来的字符序列为串值,引号本身不属于串的内容; si(1=i=n)是一个任意字符,它称为串的元素,是构成串的基本单位,i是它在整个串中的序号; n为串的长度,表示串中所包含的字符个数,当n=0时,称为空串,通常记为Ф。 字符串的基本运算 ⒈求串长 StrLength(s) ⒉串赋值 StrAssign(s1,s2) ⒊连接操作 StrConcat (s1,s2,s) 或 StrConcat (s1,s2) ⒋求子串 SubStr (s,i,len) ⒌串比较 StrCmp(s1,s2) ⒍子串定位 StrIndex(s,t) ⒎串插入 StrInsert(s,i,t) ⒏串删除 StrDelete(s,i,len) ⒐串替换 StrRep(s,t,r) 4.1.2 顺序串 线性表的存储方式仍适用于串,如顺序存或链式存储,通常采用顺序存储的方法,称为顺序串。也因为字符的特殊性和字符串经常作为一个整体来处理的特点,串在存储时还有一些与一般线性表不同之处。 1.顺序存储一个字符串 通常用一组地址连续的存储单元存储串值中的字符序列,可以定长来指明最大的字符个数,也叫定长串。如: #define MAXSIZE 256 char s[MAXSIZE]; 则字符串中的字符个数不能超过256。 字符串是许多程序设计语言支持的数据类型,不同语言环境得到一个串的实际长度的方法不同,下面介绍几种标识串实际长度的方法。 2 顺序串的基本运算 主要讨论定长串联接、求子串、串比较算法,顺序串的插入和删除等运算基本与顺序表相同,在此不在赘述。 在下面的实现中,设串结束用'\0'来标识。 (1)求串长算法 【算法 4-1】求串s的长度 int StrLength (char s[ ]) { int i=0; while(s[i]!=\0) i++; return i; } (2) 串联接 【算法 4-2】两个串的连接算法 int StrConcat1(char s1[ ], char s2[ ], char s[ ]) /* 把两个串s1和s2首尾连接成一个新串s*/ { int i=0, j, len1, len2; len1=StrLength(s1); len2=StrLength(s2); if (len1+ len2MAXSIZE?1) return 0 ; /* MAXSIZE为 s长度,不够长时*/ i=0; while(s1[i]!=\0) { s[i]=s1[i]; i++; } j=0; while(s2[j]!=\0) { s[i]=s2[j]; i++; j++; } s[i]=\0; /* 置串结束标志*/ return 1; /* 连接成功*/ } (3) 求子串 【算法 4-3】求子串算法 int StrSub (char *t, char *s, int i, in
文档评论(0)