发布时间 : 星期五 文章第四章 串 - 数据结构基本实验算法更新完毕开始阅读
实验 1 实现顺序串各种基本运算的算法
#include
#define MaxSize 100 //最多的字符个数 typedef struct {
char data[MaxSize];//定义可以容纳MaxSize个字符的空间 int length; //标记当前实际串长 }SqString;
void StrAssign(SqString &str,char cstr[])//由串常量cstr创建str {
int i;
for(i=0;cstr[i]!='\\0';i++) str.data[i]=cstr[i]; str.length=i; }
void StrCopy(SqString &s,SqString t)//将串t复制到串s {
int i;
for(i=0;i int StrEqual(SqString s,SqString t)//判断两个串s和t是否相同 { int same=1,i; if(s.length!=t.length) //长度不相等时返回 same=0; else { for(i=0;i if(s.data[i]!=t.data[i])//有一个对应字符不相同时返回 same=0; } return same; } int StrLength(SqString s) //求串s的长度 { return s.length; } SqString Concat(SqString s,SqString t)//将串t连接到串s之后产生新串 { SqString str; int i; str.length=s.length+t.length; for(i=0;i for(i=0;i SqString SubStr(SqString s,int i,int j) //由串s的第i个字符开始的的j个字符产生新串 { SqString str; int k; str.length=0; if(i<=0||i>s.length||j<0||i+j-1>s.length) { printf(\参数不正确\\n\); return str; //参数不正确,返回空串 } for(k=i-1;k SqString InsStr(SqString s1,int i,SqString s2) //将串s2插入到串s1的第i个位置处 { int j; SqString str; str.length=0; if(i<=0||i>s1.length+1)//参数不正确时返回空串 { printf(\参数不正确\\n\); return s1; } for(j=0;j for(j=0;j for(j=i-1;j SqString DelStr(SqString s,int i,int j) //删除串s的第i个字符开始的j个字符产生新串 { int k; SqString str; str.length=0; if(i<=0||i>s.length||i+j>s.length+1)//参数不正确时返回空串 { printf(\参数不正确\\n\); return str; } for(k=0;k for(k=i+j-1;k SqString RepStr(SqString s,int i,int j, SqString t) //将串s的第i个字符开始的j个字符替换成串t产生新串 { int k; SqString str; str.length=0; if(i<=0||i>s.length||i+j-1>s.length)//参数不正确时返回空串 { printf(\参数不正确\\n\); return str; } for(k=0;k str.data[i+k-1]=t.data[k]; for(k=i+j-1;k str.data[t.length+k-j]=s.data[k]; str.length=s.length-j+t.length; return str; } void DispStr(SqString s) //输出串s的所有元素 { int i; if(s.length>0) { for(i=0;i printf(\); } } //主程序 void main() { SqString s,s1,s2,s3,s4; printf(\建立串s和串s1\\n\); StrAssign(s,\); StrAssign(s1,\); printf(\输出串s:\); DispStr(s); printf(\串s的长度:%d\\n\,StrLength(s)); printf(\在串的第九个字符位置插入串s1而产生串s2\\n\); s2=InsStr(s,9,s1); printf(\输出串s2:\); DispStr(s2); printf(\删除串s第二个字符开始的个字符而产生串s2\\n\); s2=DelStr(s,2,3); printf(\输出串s2:\);DispStr(s2); printf(\将串s第二个字符开始的个字符替换成串s1而产生串s2\\n\); s2=RepStr(s,2,5,s1); printf(\输出串s2:\); DispStr(s2); printf(\提取串s的第二个字符开始的个字符而产生串s3\\n\); s3=SubStr(s,2,10); printf(\输出串s3:\); DispStr(s3); printf(\将串s1和串s2连接起来而产生串s4\\n\); s4=Concat(s1,s2); printf(\输出串s4:\); DispStr(s4); } ///////////////////////////////////////////////////////////////////// 实验 2 实现链串各种基本运算的算法 #include char data; struct snode *next; }LiString; void StrAssign(LiString *&s,char t[]) {