数据结构-第4章 串-1精要.pptVIP

  • 7
  • 0
  • 约5.65千字
  • 约 31页
  • 2017-04-21 发布于湖北
  • 举报
数据结构-第4章 串-1精要

第4章 串;4.1 串类型的定义;注意:空串和空白串的不同,例如“ ”和“”分别表示长度为1的空白串和长度为0的空串。 子串(substring):串中任意个连续字符组成的子序列称为该串的子串,包含子串的串相应地称为主串。 子串的序号:将子串在主串中首次出现时的该子串的首字符对应在主串中的序号,称为子串在主串中的序号(或位置)。 例如,设有串A和B分别是: A=“这是字符串”,B=“是” 则B是A的子串,A为主串。B在A中出现了两次,其中首次出现所对应的主串位置是3。因此,称B在A中的序号为3 。; 特别地,空串是任意串的子串,任意串是其自身的子串。 串相等:如果两个串的串值相等(相同),称这两个串相等。换言之,只有当两个串的长度相等,且各个对应位置的字符都相同时才相等。 通常在程序中使用的串可分为两种:串变量和串常量。 串常量和整常数、实常数一样,在程序中只能被引用但不能不能改变其值,即只能读不能写。通常串常量是由直接量来表示的,例如语句错误(“溢出”)中“溢出”是直接量。 串变量和其它类型的变量一样,其值是可以改变。;4.1.2 串的抽象数据类型定义 ;操作结果:将串t联结到串s后形成新串存放到s中。 StrLength(t) 初始条件:字符串t已存在。 操作结果:返回串t中的元素个数,称为串长。 SubString (s, pos, len, sub) 初始条件:串s, 已存在, 1≦pos≦StrLength(s)且 0≦len≦StrLength(s) –pos+1。 操作结果:用sub返回串s的第pos个字符起长度为len的子串。 …… } ADT String;4.2 串的存储表示和实现;4.2.1 串的定长顺序存储表示;1 串的联结操作 Status StrConcat ( StringType s, StringType t) /* 将串t联结到串s之后,结果仍然保存在s中 */ { int i, j ; if ((s.length+t.length)MAX_STRLEN) Return ERROR ; /* 联结后长度超出范围 */ for (i=0 ; it.length ; i++) s.str[s.length+i]=t.str[i] ; /* 串t联结到串s之后 */ s.length=s.length+t.length ; /* 修改联结后的串长度 */ return OK ; };2 求子串操作 Status SubString (StringType s, int pos, int len, StringType *sub) { int k, j ; if (pos1||poss.length||len0||len(s.length-pos+1)) return ERROR ; /* 参数非法 */ sub-length=len-pos+1 ; /* 求得子串长度 */ for (j=0, k=pos ; k=leng ; k++, j++) sub-str[j]=s.str[i] ; /* 逐个字符复制求得子串 */ return OK ; };4.2.2 串的堆分配存储表示;1 串的联结操作 Status Hstring *StrConcat(HString *T, HString *s1, HString *s2) /* 用T返回由s1和s2联结而成的串 */ { int k, j , t_len ; if (T.ch) free(T); /* 释放旧空间 */ t_len=s1-length+s2-length ; if ((p=(char *)malloc(sizeof((char)*t_len))==NULL) { printf(“系统空间不够,申请空间失败 !\n”) ; return ERROR ; } for (j=0 ; js-length; j++) T-ch[j]=s1-ch[j] ; /* 将串s复制到串T中 */;for (k=s1-length, j=0 ; js2-length; k++, j++) T-ch[j]=s1-ch[j] ; /* 将串s2复制到串T中 */ free(s1-ch) ; free(s2-ch) ; return OK ; };4.2.3 串的链式存储表示;串的块链式存储的类型定义包括: ⑴ 块结点的类型定义 #define BLOCK_SIZE 4 typedef struct Blstr

文档评论(0)

1亿VIP精品文档

相关文档