数据结构与算法-第五章 串.pptVIP

  • 25
  • 0
  • 约9.41千字
  • 约 45页
  • 2019-08-04 发布于山东
  • 举报
第五章 串 5.1 串的基本概念 5.2 串的存储结构 5.3 串的基本运算 5.4 模式匹配 5.5 串在文本编辑中的应用 5.1 串的基本概念 串(String):由零个或多个字符组成的有限连续序列,一般记为 S= ‘s1s2…s n ’ 空串(null string):由零个字符组成的串 空格串:由一个或多个空格组成的串 子串:字符串中任意个连续的字符构成的子序列 主串:包含子串的字符串 位置:一个字符在序列中的序号称为该字符在串中的位置 两串相等:两个字符串的长度相等且各对应位置上的字符都相同 串变量:形如下面语句 S=‘12345’ 是一个合法的附值语句,其含义是把串值附给串变量,S是串变量名,字符序列12345是串值 事例:串a=‘BAO’, b=‘DING’,c=‘BAODING’,d=‘BAO□DING’,则: (1) a,b,c,d的串长分别为3,4,7, 8 (2) 串a,b都是串c,d的子串,其在主串c中的位置分别为1和4, 在主串d中的位置分别为1和5 (3) c不等于d 5.2 串的存储结构 串的静态存储结构 :将串定义成字符型数组,串的存储空间分配在编译时完成,不能更改 串的动态存储结构 :串的存储空间在程序运行时动态分配 ,分为 5.2.1 串的静态存储结构 串的顺序存储结构表示 #define MAXSTRLEN 256 /*定义串允许的最大字符个数*/ struct string { char ch_string[MAXSTRLEN]; /* MAXSTRLEN为串的最大长度*/ int len; /*串的实际长度*/ }SString 顺序存储结构的两种存储方式 紧凑格式:在存储单元中尽量的多存储字符 非紧凑格式 :一个存储单元只存放字符串的一个字符,存储中多余的空间置空不用 事例:S=‘Love China’ 二者比较:紧凑格式空间利用率高,而非紧凑格式对串中字符的处理效率低。 串的静态存储结构的两个缺点: 需要预先定义一个串允许的最大字符个数,当该值估计过大时,存储密度就会降低,较多的空间就会被浪费掉 由于限定了串的最大字符个数,使串的某些操作 5.2.2 串的动态存储结构 链式存储结构:包含字符域和指针域的结点链结结构 事例:S=‘Study Data Structures’ 块链存储结构:每个节点存放若干个字符,提高空间利用率 堆结构的存储方式 :系统将一个空间足够大、地址连续的存储空间作为串值的可利用空间;建立一个新串时,系统就从这个可利用空间中划分出一个大小和串长度相等的空间存储新串的串值;每个串的串值各自存储在一组地址连续的存储单元中 串的堆结构存储表示 typedef struct { char *ch; /*若是非空串,则按串长分配存储区,否则ch为NULL*/ int length; /*串长度*/ }HString; 算法5.1:堆结构的存储方式实现串插入操作 Status StrInsert(HString S,int pos,HString T) { if(pos1||posS.length+1) return ERROR; /*pos的值不合法*/ if(T.length) /*T非空,则进行下列操作*/ { /*重新分配存储空间,插入T*/ if(!(S.ch=(char *) realloc(S.ch,(S.length+T.length)*sizeof(char)))) exit(OVERFLOW); for(i=s.length-1;i=pos-1;--i) S.ch[i+T.length]=S.ch[i]; /*插入位置之后所有的元素后移*/ /*在pos位置插入串T*/ S.ch[pos-1..pos+T.length-2]=T.ch[0..T.length-1]; S.length+=T.length; /*修改串的长度*/ } //end if(T.length) return OK; } 5.3 串的基本运算 5.3.1 串的基本运算 假设有以下串: s1=‘I am a student’ s2=‘child’ s3=‘student’ 基本运算 串赋值A

文档评论(0)

1亿VIP精品文档

相关文档