数据结构第4章.

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

if (S1[0]+S2[0]<=MAXSTRLEN){
T[1..S1[0]]=S1[1..S1[0]];
T[S1[0]+1..S1[0]+S2[0]]=S2[1..S2[0]];
T[0]=S1[0]+S2[0]; uncut=TRUE; }
else if (S1[0]<MAXSTRLEN){ T[1..S1[0]]=S1[1..S1[0]]; T[S1[0]+1..MAXSTRLEN] =S2[1..MAXSTRLEN-S1[0]]; T[0]=MAXSTRLEN; uncut=FALSE; } else { T[0..MAXSTRLEN] =S1[0..MAXSTRLEN]; uncut=FALSE; } return uncut; }//Concat
int Index(String S,String T,int pos) {//返回子串T在主串pos之后的位置 if (pos>0){ n=StrLength(S); m=StrLength(T); i=pos; while (i<n-m+1){ SubString(sub,S,i,m); if (StrCompare(sub,T)!=0) i++; else return i; } } return 0; }//Index
Status StrInsert(HString &S,int pos,HString T) {//将T插入到S中 if (pos<1||pos>S.length+1) return ERROR; if (T.length){ if (!(S.ch=realloc(S.ch,S.length,T.length)) ) exit(OVERFLOW); for (i=S.length-1;i>=pos-1;i--) S.ch[i+T.length]=S.ch[i]; S.ch[pos-1..pos+T.length-2]=T.ch[0..T.length-1]; S.length+=T.length; } i return OK; }// StrInsert
Status SubString(SString &Sub,SString S,
int pos,int len) { //返回子串Sub if (pos<1||pos>S[0]||len<0||len>S[0]-pos+1) return ERROR; Sub[1..len]=S[pos..pos+len-1]; Sub[0]=len; return OK; }//SubString
T.length
Status StrAssign(HString &T,char *chars) {//串赋值 if (T.ch) free(T.ch); for (i=0,c=chars;*c;++i,++c); //求chars的长度 if (!i) {T.ch=NULL;T.length=0;} else { if (!(T.ch=new char[i])) exit(OVERFLOW); T.ch[0..i-1]=chars[0..i-1]; T.length=i; } return OK; }// StrAssign
第4章 串
4.1
串的定义
串定义
串是由零个和多个字符组成的有 限序列。 例 S=“a1a2a3...an” ai: 组成串的字符
S:串名
n: 串的长度
S=“” 空串 S=“ ” 空格串
串中任意连续的字符组成的子序列 被称为子串;包含子串的串被称为 主串。子串在主串中第一次出现的 第一个字符的位置被称为子串在主 串中的位置。 当且仅当两个串的长度相等且对应
S1 S2
T
S1[0]+S2[0]<=MAXSTRLEN
字符串连接运算 T=S1+S2
S1
S2
T
S1[0]<MAXSTRLEN 但 S1[0]+S2[0]>MAXSTRLEN
字符串连接运算
S1 S2
T=S1+S2
T
S1[0]==MAXSTRLEN
Status Concat(SString &T, SString S1, SString S2) {
4.2 串的表示和实现
串的静态存储结构
用一组地址连续的存储单元存储串值 的字符序列。
1、定长顺序存储表示
#define MAXSTRLEN 255 typedef unsigned char SString[MAXSTRLEN+1]; //0单元存放串的长度,超长截断。
字符串连接运算 T=S1+S2
}HString;
基本操作的函数原型:
Status StrAssign(HString &T,char *chars)
int StrLength(HString S)
int StrCompare(HString S,HString T)
Status ClearString(HString &S)
Status Concat(HString &T,HString S1,HString S2) HString SubString(HString S,int pos,int len)
2、堆分配存储表示
在程序运行以后,动态地为串分配 一块连续的存储空间以供使用。在
源自文库
C 语言中称该存储区为“堆”,并
由malloc()和free()管理;在C++中 用new和delete运算符管理。
串的堆分配存储表示的定义
typedef struct{ char *ch; //存储串的存储区
int length; //串长度
ClearString(&S) SubString(&Sub,S,pos,len) Concat(&T,S1,S2) Index(S,T,pos) Replace(&S,T,V) StrInsert(&S,pos,T) StrDelete(&S,pos,len)
DestroyString(&S)
}ADT String
的字符均相等时称这两个字符串相
等。
ADT String{
数据对象:D={ai|aiElemSet,i=1,2,...n,n>=0} 数据关系:R={<ai-1,ai>|ai-1,ai D,i=2,...,n} 基本操作: StrAssign(&T,chars) StrCopy(&T,S) StrEmpty(S) StrCompare(S,T) StrLength(S)
相关文档
最新文档