ImageVerifierCode 换一换
格式:DOCX , 页数:30 ,大小:20.12KB ,
资源ID:17198875      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/17198875.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(第四章 串数据结构基本实验算法.docx)为本站会员(b****2)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

第四章 串数据结构基本实验算法.docx

1、第四章 串数据结构基本实验算法实验 1 实现顺序串各种基本运算的算法#include#define MaxSize 100 /最多的字符个数typedef struct char dataMaxSize;/定义可以容纳MaxSize个字符的空间 int length; /标记当前实际串长SqString;void StrAssign(SqString &str,char cstr)/由串常量cstr创建str int i; for(i=0;cstri!=0;i+) str.datai=cstri; str.length=i;void StrCopy(SqString &s,SqString t

2、)/将串t复制到串s int i; for(i=0;it.length;i+) s.datai=t.datai; s.length=t.length;int StrEqual(SqString s,SqString t)/判断两个串s和t是否相同 int same=1,i; if(s.length!=t.length) /长度不相等时返回 same=0; else for(i=0;is.length;i+) if(s.datai!=t.datai)/有一个对应字符不相同时返回 same=0; return same;int StrLength(SqString s) /求串s的长度 retur

3、n s.length;SqString Concat(SqString s,SqString t)/将串t连接到串s之后产生新串 SqString str; int i; str.length=s.length+t.length; for(i=0;is.length;i+) /将s.data0.s.length-1复制到str str.datai=s.datai; for(i=0;it.length;i+) /将t.data0.t.length-1复制到str str.datas.length+i=t.datai; return str;SqString SubStr(SqString s,i

4、nt i,int j)/由串s的第i个字符开始的的j个字符产生新串 SqString str; int k; str.length=0; if(is.length|js.length) printf(参数不正确n); return str; /参数不正确,返回空串 for(k=i-1;ki+j-1;k+) /将s.datai.i+j复制到str str.datak-i+1=s.datak; str.length=j; return str;SqString InsStr(SqString s1,int i,SqString s2)/将串s2插入到串s1的第i个位置处 int j; SqStri

5、ng str; str.length=0; if(is1.length+1)/参数不正确时返回空串 printf(参数不正确n); return s1; for(j=0;ji-1;j+) /将s1.data0.i-2复制到str str.dataj=s1.dataj; for(j=0;js2.length;j+)/将s2.data0.s2.length-1复制到str str.datai+j-1=s2.dataj; for(j=i-1;js1.length;j+)/将s1.datai-1.s1.length-1复制到str str.datas2.length+j=s1.dataj; str.l

6、ength=s1.length+s2.length; return str;SqString DelStr(SqString s,int i,int j)/删除串s的第i个字符开始的j个字符产生新串 int k; SqString str; str.length=0; if(is.length|i+js.length+1)/参数不正确时返回空串 printf(参数不正确n); return str; for(k=0;ki-1;k+) /将s.data0.i-2复制到str str.datak=s.datak; for(k=i+j-1;ks.length;k+)/将s.datai+j-1.s.l

7、ength-1 str.datak-j=s.datak; str.length=s.length-j; return str;SqString RepStr(SqString s,int i,int j, SqString t)/将串s的第i个字符开始的j个字符替换成串t产生新串 int k; SqString str; str.length=0; if(is.length|i+j-1s.length)/参数不正确时返回空串 printf(参数不正确n); return str; for(k=0;ki-1;k+) /将s.data0.i-2复制到str str.datak=s.datak; f

8、or(k=0;kt.length;k+) str.datai+k-1=t.datak; for(k=i+j-1;k0) for(i=0;is.length;i+) printf(%c,s.datai); printf(n); /主程序void main() SqString s,s1,s2,s3,s4; printf(1)建立串s和串s1n); StrAssign(s,abcdefghijklmn); StrAssign(s1,xyz); printf(2)输出串s:); DispStr(s); printf(3)串s的长度:%dn,StrLength(s); printf(4)在串的第九个字

9、符位置插入串s1而产生串s2n); s2=InsStr(s,9,s1); printf(5)输出串s2:); DispStr(s2); printf(6)删除串s第二个字符开始的个字符而产生串s2n); s2=DelStr(s,2,3); printf(7)输出串s2:);DispStr(s2); printf(8)将串s第二个字符开始的个字符替换成串s1而产生串s2n); s2=RepStr(s,2,5,s1); printf(9)输出串s2:); DispStr(s2); printf(10)提取串s的第二个字符开始的个字符而产生串s3n); s3=SubStr(s,2,10); prin

10、tf(11)输出串s3:); DispStr(s3); printf(12)将串s1和串s2连接起来而产生串s4n); s4=Concat(s1,s2); printf(13)输出串s4:); DispStr(s4);/ 实验 2 实现链串各种基本运算的算法#include#includetypedef struct snode char data; struct snode *next;LiString;void StrAssign(LiString *&s,char t) int i; LiString *r,*p; s=(LiString *)malloc(sizeof(LiString

11、); s-next=NULL; r=s; for(i=0;ti!=0;i+) p=(LiString *)malloc(sizeof(LiString); p-data=ti; p-next=NULL; r-next=p; r=p; void StrCopy(LiString *&s,LiString *t) LiString *p=t-next,*q,*r; s=(LiString *)malloc(sizeof(LiString); s-next=NULL; r=s; while(p!=NULL) /将t的所有节点复制到s q=(LiString *)malloc(sizeof(LiStr

12、ing); q-data=p-data; q-next=NULL; r-next=q; r=q; p=p-next; int StrEqual(LiString *s,LiString *t) LiString *p=s-next,*q=t-next; while(p!=NULL&q!=NULL&p-data=q-data) p=p-next; q=q-next; if(p=NULL&q=NULL) return 1; else return 0;int StrLength(LiString *s) int i=0; LiString *p=s-next; while(p!=NULL) i+;

13、 p=p-next; return i;LiString *Concat(LiString *s,LiString *t) LiString *str,*p=s-next,*q ,*r; str=(LiString *)malloc(sizeof(LiString); str-next=NULL; r=str; while(p!=NULL)/将s的所有节点复制到str q=(LiString *)malloc(sizeof(LiString); q-data=p-data; q-next=NULL; r-next=q; r=q; p=p-next; p=t-next; while(p!=NUL

14、L)/将t的所有节点复制到str q=(LiString *)malloc(sizeof(LiString); q-data=p-data; q-next=NULL; r-next=q; r=q; p=p-next; return str;LiString *SubStr(LiString *s,int i,int j) int k; LiString *str,*p=s-next,*q,*r; str=(LiString *)malloc(sizeof(LiString); str-next=NULL; r=str; if(iStrLength(s)|jStrLength(s) printf

15、(参数不正确n); return str; /参数不正确是返回空串 for(k=0;knext; for(k=1;kdata=p-data; q-next=NULL; r-next=q; r=q; p=p-next; return str;LiString *InsStr(LiString *s,int i,LiString *t) int k; LiString *str,*p=s-next,*p1=t-next,*q,*r; str=(LiString *)malloc(sizeof(LiString); str-next=NULL; r=str; if(iStrLength(s)+1)

16、printf(参数不正确n); return str; for(k=1;kdata=p-data; q-next=NULL; r-next=q; r=q; p=p-next; while(p1!=NULL) /将t的所有节点复制到str q=(LiString *)malloc(sizeof (LiString); q-data=p1-data; q-next=NULL; r-next=q; r=q; p1=p1-next; while(p!=NULL)/将*p及其后的节点复制到str q=(LiString *)malloc(sizeof(LiString); q-data=p-data;

17、q-next=NULL; r-next=q; r=q; p=p-next; return str;LiString *DelStr(LiString *s,int i,int j) int k; LiString *str,*p=s-next,*q,*r; str=(LiString *)malloc(sizeof(LiString); str-next=NULL; r=str; if(iStrLength(s)|jStrLength(s) printf(参数不正确n); return str; for(k=0;kdata=p-data; q-next=NULL; r-next=q; r=q;

18、 p=p-next; for(k=0;knext; while(p!=NULL)/将*p及其后的节点复制到str q=(LiString *)malloc(sizeof(LiString); q-data=p-data; q-next=NULL; r-next=q; r=q; p=p-next; return str;LiString *RepStr(LiString *s,int i,int j,LiString *t) int k; LiString *str,*p=s-next,*p1=t-next,*q,*r; str=(LiString *)malloc(sizeof(LiStrin

19、g); str-next=NULL; r=str; if(iStrLength(s)|jStrLength(s) printf(参数不正确n); return str; for(k=0;kdata=p-data; q-next=NULL; r-next=q; r=q; p=p-next; for(k=0;knext; while(p1!=NULL)/将t的所有节点复制到str q=(LiString *)malloc(sizeof(LiString); q-data=p1-data; q-next=NULL; r-next=q; r=q; p1=p1-next; while(p!=NULL)/

20、将*p及其后的节点复制到str q=(LiString *)malloc(sizeof(LiString); q-data=p-data; q-next=NULL; r-next=q; r=q; p=p-next; return str;void DispStr(LiString *s) LiString *p=s-next; while(p!=NULL) printf(%c,p-data); p=p-next; printf(n);/主程序void main() LiString *s,*s1,*s2,*s3,*s4; printf(1)建立串s和串s1n); StrAssign(s,abc

21、defghijklmn); StrAssign(s1,xyz); printf(2)输出串s:);DispStr(s); printf(3)串s的长度:%dn,StrLength(s); printf(4)在串s的第九个字符位置插入串s1而产生串s2n); s2=InsStr(s,9,s1); printf(5)输出串s2:);DispStr(s2); printf(6)删除串s第二个字符开始的五个字符而产生串s2n); s2=DelStr(s,2,3); printf(7)输出串s2:);DispStr(s2); printf(8)将串s第二个字符开始的五个字符替换成串s1而产生串s2n);

22、 s2=RepStr(s,2,5,s1); printf(9)输出串s2:);DispStr(s2); printf(10)提取串s的第二个字符开始的十个字符而产生串s3n); s3=SubStr(s,2,10); printf(11)输出串s3:);DispStr(s3); printf(12)将串s1和串s2连接起来而产生串s4n); s4=Concat(s1,s2); printf(13)输出串s4:);DispStr(s4);/实验 3 顺序串的各种模式匹配运算编写一个程序,实现顺序串的各种模式匹配运算,并在此基础上完成如下功能:(1) 建立“abcabcdabcdeabcdefabc

23、defg”目标串s和“abcdeabcdefab”模式串t。(2) 采用简单匹配算法求t在s中的位置。(3) 由模式串t求出next值和nextval值。(4) 采用KMP算法求出t在s中的位置。(5) 采用改进的KMP算法求出t在s中的位置。#include#include#define MaxSize 100typedef struct char dataMaxSize;/定义可容纳MaxSize个字符空间 int length; /标记当前实际串长SqString;void StrAssign(SqString &str,char cstr) int i; for(i=0;cstri!=

24、0;i+) str.datai=cstri; str.length=i;void DispStr(SqString s) int i; if(s.length0) for(i=0;is.length;i+) printf(%c,s.datai); printf(n); int Index(SqString s,SqString t)/简单匹配算法 int i=0,j=0,k; while(is.length&j=t.length) k=i-t.length; /返回匹配的第一个字符的下标 else k=-1; /模式匹配不成功 return k;void GetNext(SqString t,int next)/由模式串t求出next值 int j,k; j=0;k=-1;next0=-1; while(jt.length-1) if(k=-1|t.dataj=t.dat

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1