- 222
- 0
- 约8.77千字
- 约 13页
- 2016-09-01 发布于重庆
- 举报
数据结构-串实验报告
实验报告
课程 数据结构 实验名称 实验三 串 学号 姓名 实验日期: 2011/10/27
实验三 串
实验目的:
1. 熟悉串类型的实现方法,了解简单文字处理的设计方法;
2. 熟悉C语言的字符和把字符串处理的原理和方法;
3. 熟悉并掌握模式匹配算法。
顺序存储结构下的关于字符串操作的基本算法。
模式匹配算法BF、KMP
4-19. 在4.4.3节例4-6的基础上,编写比较Brute-Force算法和KMP算法比较次数的程序。
4-20. 设串采用静态数组存储结构,编写函数实现串的替换Replace(S,start,T,V),即要求在主串S中,从位置start开始查找是否存在字串T。若主串S中存在子串T,则用子串V替换子串T,且函数返回1;若主串S中不存在子串T,则函数返回0;并要求设计主函数进行测试。一个测试例子为:S=“I am a student”,T=“student”,V=“teacher”。/*静态存储结构*/typedef struct
{
char str[MaxSize];
int length;
} String;
void Initiate(String *S)
{
S-length=0;
}
int Insert(String *S, int pos, String T)
/*在串S的pos位置插入子串T*/
{
int i;
if(pos 0)
{
printf(参数pos出错!);
return 0;
}
else if(S-length + T.length MaxSize)
{
printf(数组空间不足无法插入!);
return 0;
}
else
{
for(i = S-length-1; i = pos; i--)
S-str[i+T.length] = S-str[i]; /*为插入做准备*/
for(i = 0; i T.length; i++)
S-str[pos+i] = T.str[i]; /*插入*/
S-length += T.length; /*产生新的元素个数*/
return 1;
}
}
int Delete(String *S, int pos, int len)
{
int i;
if(S-length = 0)
{
printf(数组中未存放字符无元素可删! \n);
return 0;
}
else if(pos 0 || len 0 || pos+len S-length)
{
printf(参数pos和len出错);
return 0;
}
else
{
for(i = pos+len; i = S-length-1; i++)
S-str[i-len] = S-str[i]; /*依次前移*/
S-length -= len; /*产生新的长度值*/
return 1;
}
}
int SubString(String S, int pos, int len, String *T)
{
int i;
if(pos 0 || len 0 || pos+len S.length)
{
printf(参数pos和len出错);
return 0;
}
else
{
for(i = 0; i len; i++)
T-str[i] = S.str[pos+i]; /*给子串T赋值*/
T-length = len; /*给子串T的长度域赋值*/
return 1;
}
}
(2) BFandKMP.h
/*查找子串BF(Brute-Force)操作*/int BFIndex(String S,int start,String T)
{
int i=start,j=0,v;
while(iS.lengthjT.length)
{
if(S.str[i]==T.str[j])
{
i++;
j++;
}
else
{
i=i-j+1;
j=0;
}
}
if(j==T.length)
v=i-T.length;
else
v=-1;
return v;
}
int KMPIndexA(
原创力文档

文档评论(0)