- 1、本文档共24页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构第五章 串课件
第五章 串; ? 5.1 串的定义和基本运算
5.2 串的定长顺序存储
5.3 串的链式存储
5.4 串的堆分配存储;串是一种特殊的线性表,它的数据元素类型为字符型。串是由0个或多个任意个字符组成的有限序列。; 串中任意个连续的字符组成的子序列称为该串的子串。 包含子串的串相应地称为主串。;串的基本操作 ; 5.1 串的定义和基本运算
? 5.2 串的定长顺序存储
5.3 串的链式存储
5.4 串的堆分配存储;串的存储——定长顺序存储;int StrLength (Str *S )
{
return (S-len);
};Str ConcatStr (Str *S, Str *T )
{
int i;
if(S-len+T-len=MAXLEN)
printf(“两个串太长,溢出”);
else
{
for (i=0; iT-len; i++ )
S-vec[S-len+i] = T-vec[i];
S-vec[S-len+i]=‘\0’;
S-len=S-len+T-len;
};Str SubStr (Str *S, int i, int len )
{ //返回串S的第i个字符起长度为len的子串
Str Sub;
int k;
if (i1 || iS-len || len1 || i+lenS-len+1)
Sub-len=0;
else
{ for ( k=0; klen; k++ )
Sub-vec[k] = S-vec[i+k-1];
Sub-len=len;
Sub-vec[len]=‘\0’;
}
return Sub;
};int EqualStr (Str *S, Str *T )
{ //相等返回0,ST返回负数,ST返回正数
int i=0;
for(S-vec[i] T-vec[i] S-vec[i]==T-vec[i]; i++);
return S-vec[i]-T-vec[i]; //ASCII码相减
};int InsStr (Str *S, int i, Str T )
{ // 在串S中的第i个位置插入串T
int k=0;
if ( iS-len+1) return 0; //插入位置不合法
else
{ for (k=S-len-1; k=i-1; k-- )
S-vec[T-len+k] =S-vec[k] ;
for (k=0; kT-len; k++ )
S-vec[i+k-1] =T-vec[k] ;
S-len=S-len+T-len;
S-vec[s-len]=‘\0’;
return 1;
}
};int DelStr (Str *S, int i, int len )
{ // 从串S中的第i个位置开始删除len个字符
int k=0;
if (i1 || iS-len || len1 || i+lenS-len+1)
return 0; //删除失败
else
{
for ( k=i+len-1; kS-len; k++;i++ )
S-vec[i] =S-vec[k]) ;
S-len=S-len-T-len;
return 1;
}
};串的模式匹配;int Index (SqString *S, SqString *T )
{ //返回子串T在主串S中第一次出现的位置,如不存在返回-1
int i=0, j=0, k;
while (iS-len jT-len)
{ if (S-vec[i]==T-vec[j]) { i++; j++; }
else { i=i-j+1; j=0; }
}
if( j=T-len) k = i-T-len+1;
else k=-1;
return k; //返回找到的子串所在的位序
};时间复杂度分析; 5.1 串的类型定义
5.2 串的定长顺序存储
? 5.3 串的链式存储
5.4 串的堆分配存储;串的存储——链式存储;串的存储密度; 5.1 串的类型定义
5.2 串的定长顺序存储
5.3 串的链式存储
? 5.4 串的堆分配存储;typedef struct
{
char *ch;
//若是非空串,则按串长分配存储
文档评论(0)