第二章 线性数据结构 ch2_4串1 《软件技术知识基础》 .pptVIP

  • 2
  • 0
  • 约5.27千字
  • 约 25页
  • 2018-05-29 发布于天津
  • 举报

第二章 线性数据结构 ch2_4串1 《软件技术知识基础》 .ppt

第二章 线性数据结构 ch2_4串1 《软件技术知识基础》 .ppt

* 2.4 串 2.4.1 串类型的定义 2.4.2 串的存储结构 2.4.3 串的基本运算 2.4.4 串的模式匹配 小结 §2.4.1 串类型的定义 定义 串(String)是零个或多个字符组成的有限序列。 记作S=“a1a2a3…an”, 其中S 是串名,双引号括起来的字符序列是串值;ai(1≦i≦n)可以是字母、数字或其它字符; 特点 串中所包含的字符个数n称为该串的长度。 空串:零个字符的串。 子串:串中任意个连续的字符组成的子序列。 主串:包含子串的串。 特点 位置:字符在序列中的序号为该字符在串中的位置。 子串在主串中的位置以子串的第一个字符在主串中的首次出现的位置来表示。 §2.4.1 串类型的定义 例如,设A和B分别为 A=“This is a string” B=“is” 则B是A的子串,A为主串。B在A中出现了两次,其中首次出现所对应的主串位置是3。因此,称B在A中的序号(或位置)为3 通常将仅由一个或多个空格组成的串称为空白串(Blank String) 空串和空白串的不同,例如“ ”和“”分别表示长度为1的空白串和长度为0的空串。 特别地,空串是任意串的子串,任意串是其自身的子串。 2.4.2 串的存储结构 顺序存储结构 用一组连续的存储单元依次存储串中的各个字符 紧缩方式:以字节为单位顺序存储串中的每个字符,一个字可存放多个字符。 P R O G R A M M I N G 紧缩方式:一个字可存放多个字符 若一个字为四个字节,则一个字可存放四个字符, “programming”需三个字存储 顺序存储结构 用一组连续的存储单元依次存储串中的各个字符 紧缩方式:以字节为单位顺序存储串中的每个字符,一个字可存放多个字符。 2.4.2 串的存储结构 非紧缩方式:以一个字为存储单位 顺序存储串中的每个字符 P R O G R A M M I N G 非紧缩方式:一个字只存放一个字符 求串的长度 顺序存储方式求长度 int S_strlen(char *s) { int k=0; char *t=s; while(*t++!=‘\0’) k++; return k; } 链接存储方式求长度 int L_strlen(NODE *s) //一般链接方式 { NODE *p; int k=0; for(p=s; p!=NULL; k++) p=p-next; return k; }//linkstrl.c 2.4.3 串的基本运算 字符串比较 顺序存储方式串的比较 int S_strcmp(char *s1, char *s2) { char *p1=s1; *p2=s2; while(*p1==*p2 *p1!=‘\0’ *p2!=‘\0’) { p1++; p2++; } return (*p1-*p2); } 链接存储方式串的比较 字符串比较 int L_strcmp(NODE *s1, NODE *s2) { NODE *p1=s1,*p2=s2; while(p1-data==p2-data p1!=NULL p2!=NULL) { p1=p1-next; p2=p2-next; } if(p1==NULLp2==NULL) return 0; else if(p1==NULL) return –1; else if(p2==NULL) return 1; else return (p1-data- p2-data); } LINKSTRC.c 顺序存储方式串的连接 串的连接 int S_strcat(char *s1 , char *s2) { int k,m,n; char *p1=s1,*p2=s2; m=S_strlen(s1); n=S_strlen(s2); if(m+nMAXSIZE) return –1; //空间不够连接失败 for(k=0,p1=p1+m; k=n;k++) *p1++=*p2++; //将s2(连同结尾标志)复制到s1后面 return 1; } 链接存储方式串的连接 串的连接 void L_strcat(NODE *s1, NODE *s2) { NODE *p; if(s1==NULL) s1=s2; /*s1为空表时*/ e

文档评论(0)

1亿VIP精品文档

相关文档