![数据结构-串的存储表示及基本操作-课程设计-实验报告(共16页)_第1页](http://file3.renrendoc.com/fileroot_temp3/2022-1/4/ef47603b-4461-478f-b1f6-71b14b3b4560/ef47603b-4461-478f-b1f6-71b14b3b45601.gif)
![数据结构-串的存储表示及基本操作-课程设计-实验报告(共16页)_第2页](http://file3.renrendoc.com/fileroot_temp3/2022-1/4/ef47603b-4461-478f-b1f6-71b14b3b4560/ef47603b-4461-478f-b1f6-71b14b3b45602.gif)
![数据结构-串的存储表示及基本操作-课程设计-实验报告(共16页)_第3页](http://file3.renrendoc.com/fileroot_temp3/2022-1/4/ef47603b-4461-478f-b1f6-71b14b3b4560/ef47603b-4461-478f-b1f6-71b14b3b45603.gif)
![数据结构-串的存储表示及基本操作-课程设计-实验报告(共16页)_第4页](http://file3.renrendoc.com/fileroot_temp3/2022-1/4/ef47603b-4461-478f-b1f6-71b14b3b4560/ef47603b-4461-478f-b1f6-71b14b3b45604.gif)
![数据结构-串的存储表示及基本操作-课程设计-实验报告(共16页)_第5页](http://file3.renrendoc.com/fileroot_temp3/2022-1/4/ef47603b-4461-478f-b1f6-71b14b3b4560/ef47603b-4461-478f-b1f6-71b14b3b45605.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、精选优质文档-倾情为你奉上 数 据 结 构 课 程 设 计设计题目: 串的存储表示及基本操作 学生姓名: 专业班级: 课题名称 串的存储表示及基本操作院 系年级专业学 号姓 名成 绩课题设计目的与设计意义1、 课题设计目的:(1):掌握串的基本存储结构;(2):掌握串的基本运算及其实现;2、课题设计意义:通过此次对于串及其基本操作的课程设计,更深层次的了解串的基本概念、特征,掌握串的基本存储结构、基本运算及其实现。根据课程设计的目的和基本要求,注意一些容易发生错误的问题,从而进一步的认真分析问题、总结结论和经验,理解设计的思想和构思。联系到生活上的实际问题,培养课程设计的能力及思想构思。指导教
2、师:年 月 日专心-专注-专业目 录第一章 数据结构课程设计的目的、基本要求及其解析1.课程设计的目的:(1) :掌握串的基本存储结构。(2) :掌握串的基本运算及其实现。2.课程设计要求:(1) :将上机程序全部调试通过。(2) :结合程序分析运行结果。3.课程设计题目解析: 顾名思义,串及其基本操作,就是要在理解串的基本概念和特征的基础上,了解串的内部表示和处理方法。这样才能有效地实现串的基本操作。串,也还是字符串,是一种特殊的线性表。特殊之处在于表中的每一个元素都是字符,以及由此而要求的一些特殊操作。在串及其基本操作中,要求的操作有联接、求串长、求子串、比较串的大小、串的插入、串的删除、
3、子串的定位和置换。因为所要进行的操作比较零散也比较多,所以就要用到多个函数把这个整体的课程设计划分成多个模块来进行。每个函数对应一个功能。在主函数中,用一个菜单,就可以将原来的已分模块的函数系统地进行检验及操作。在程序设计的过程中,根据课程设计的目的和基本要求,注意一些容易出错的地方及问题。第二章 程序设计内容1程序设计的基本思想:(对于串及其基本操作中,程序被分割为很多的模块。所以以下的程序设计业分成好几个方面来一一阐述)1) . 字符串的联接:在该函数中,strcat(str1,str2)就是将串str2紧接着放在串str1的串值的末尾,组成一个新的串str1。最后所得的新的str1即为所
4、求的原来的两个字符str1和str1的联接后的结果。输出即是。2) .比较两个字符串的大小:在该函数中,strcmp(str1,str2)是一个函数,它的功能是比较两个串str1和str2的大小,通过if语句的判断函数strcmp(str1,str2)的函数值大小,其中函数值小于、等于和大于0时,分别表示str1<str2、str1=str2、str1>str2,其对应的输出结果分别为-1、0、1。3) 求字符串的串长:在该函数中,要先定义一个整形变量i,strlen(str)表示字符串str的长度,它是一个整形函数。通过函数strlen(str)来算出字符串的长度,然后赋值给整形
5、变量i输出,从而i的值即为所求的字符串的长度。4) . 串的复制:在该函数中,首先分别输入两串字符串str1和str2,通过函数strcpy(str1,str2)来实现str2复制给str1的功能,得到复制后的字符串为新的str1,输出即为复制后的结果。 5) .求字符串的插入:该函数中有三个形参,两个是字符串s和t,一个是整形形参i。即把字符串t插入到s的第i个元素之后。在函数中,定义两个个整形变量j、k,其中&s->curlen和&t->curlen分别指原字符串和要插入字符串的长度。用一个for循环,"for(j=s->curlen1;j>
6、;=i;j-)",满足循环条件的要进行的操作时把s->chj赋值给s->chj+t->curlen,就是让s->ch中空出等于&t-.curlen的长度的空间,好让t可以插入。下面再用一个for循环''for(k=0,j=i;t->chk!='0'k+,j+)",再把t->chk赋值给s->chj;这样的把t插入到了s中。最后,给s->chs->curlen+t->curlen赋值一个"0",这时的s->chs->curlen+t->cu
7、rlen就是一个新的字符串,然后把s->chs->curlen+t->curlen再赋值给s->curlen即可得到所求的新的字符串6) .求串的删除:该函数有三个形参,一个是字符串s,两个是整形形参i和j,在函数中定义一个整形变量k,输入原字符串和其长度&s->curlen,函数中用for循环,"for(k=i+j-1;s->chk!='0'k+)",把s->chk赋值给s->chk-j,既用覆盖的方式删除从第i个元素开始连续j个元素,最后把''0''赋值给s->
8、chk-j,再把k-j赋值给s->curlen。s->ch就是所求的删除从第i个元素开始连续j个元素后的新的字符串。 7) . .求字符串的置换:这个函数中有四个形参,两个字符串s和t,两个整形形参i和j,在函数内部还要定义五个整形变量k=0、l、n、m、p。首先把i+j赋值给l;通过输入输入主字符串和要置换的字符串的长度、主字符串和要置换的字符串s和t。先要判断j和将要被置换的字符串的串长关系,如果刚好相等,就让t从第一个元素开始,s从第第i个元素开始,一一赋值。如果t的串长比较大,则用一个for循环,for''(k=s->curlen;k>=i+j-
9、1;k+)'',sk赋值给sk-j+t->scurlen,这样剩余的空间刚好可以用来存放t的,同样的,如果t的串长比较小,同样用以for循环,''for(k=i+j-1,m=i;sk!='0'k+,m+)'',sk赋值给sm+t->curlen-1,s剩余的空间也刚好用来存放t的。然后,把t中的元素对应的赋值给s。最后,在s的最后一个元素后赋值一个'0',这时的s,就是t置换后的新的字符串。8) .子串的定位:这个函数有两个形参,s和t,在函数内部,还要定义两个整形变量i=0和j=0。用while语句&
10、#39;' while(i<s->curlen)&&(j<t->curlen))'',满足条件后进行的操作是检验对应的s和t的元素是否相等,相等时就i+,j+,用i减去t的串长即为t作为子串在s中的定位位置。不相等时,就用i减去j加上1赋值给i,j=0,往下扫描时,就从t的第一个元素再接着扫描。9) 主函数:在主函数中,因为要最多输入两个字符串,所以要先定义两个字符串s和t。有的主函数需要用到整形的变量,最多是两个,所以也要定义两个整形变量k和m。函数中,有很多的功能不同的函数,这样就要求验证很多次,所以在这里我们考虑用菜单来实现
11、。用一个while循环,循环的条件为永真,这样当做完一个函数的验证时,系统就会自动让你接着选择。在while循环下,输入一个数字。每个数字代表不同的功能。然后用一个switch语句,不同的case对应不同的函数,如:case(0)就可以代表求字符串的串长。2.程序设计代码:#include<stdio.h>#include<string.h>#define maxsize 32 /*假设串可能的最大长度是32*/typedef structchar chmaxsize; /*串的存储空间*/int curlen; /*当前串的长度*/seqstring;seqstrin
12、g *s;void strcats() /*串的联接*/seqstring str132,str232;printf("请输入两串字符串:"); /*输入两串字符串*/ scanf("%s%s",str1,str2); /*接受输入的字符串*/strcat(str1,str2); /*联接两个字符串*/puts(str1); /*输出联接后的字符串*/void strcmps() /*比较字符串的大小*/ seqstring str132,str232;printf("请输入两串字符串:"); scanf("%s%s&quo
13、t;,str1,str2);if(strcmp(str1,str2)>0)printf("1");if(strcmp(str1,str2)=0)printf("0");if(strcmp(str1,str2)<0)printf("-1");void strlens() /*求字符串的长度*/ seqstring str32;int i;printf("请输入一串字符串:");scanf("%s",str);i=strlen(str);printf("此字符串的串长为:%d&
14、quot;,i);void strcpys() /*串的复制*/seqstring str132,str232;printf("请输入两串字符串:"); scanf("%s%s",str1,str2);strcpy(str1,str2);printf("复制后的字符串为%s",str1);void insert(seqstring *s,int i,seqstring *t) /*串的插入*/int j,k;printf("请输入原字符串和其长度:");scanf("%s%d",s,&s
15、->curlen);printf("请输入要插入的字符串及其长度:");scanf("%s%d",t,&t->curlen);for(j=s->curlen-1;j>=i;j-)s->chj+t->curlen=s->chj;for(k=0,j=i;t->chk!='0'k+,j+)s->chj=t->chk;s->chs->curlen+t->curlen='0's->curlen=s->curlen+t->curle
16、n;printf("插入后的字符串为:");puts(s->ch);void deletes(seqstring *s,int i,int j) /*串的删除*/ int k;printf("请输入原字符串和其长度:");scanf("%s%d",s,&s->curlen); for(k=i+j-1;s->chk!='0'k+)s->chk-j=s->chk;s->chk-j='0's->curlen=k-j; printf("删除后的字符串为
17、:");puts(s->ch);void replace(seqstring *s,int i,int j,seqstring *t) /*串的置换*/int k=0,l,n,m,p;l=i+j; printf("请输入主字符串的长度:");scanf("%d",&s->curlen); printf("请输入要置换的字符串的长度:");scanf("%d",&t->curlen); printf("请输入主字符串和要置换的字符串:"); scanf(
18、"%s%s",s,t);if(j=t->curlen) for(k=0;t->chk!='0'k+) s->chi-1=t->chk; i+; s->curlen=s->curlen+t->curlen-j; s->chs->curlen='0' printf("置换后的字符串为:"); puts(s->ch); elseif(j>t->curlen) while(s->chl-1!='0')m=j-t->curlen; s
19、->chl-m-1=s->chl-1;l+;for(k=0;t->chk!='0'k+)s->chi-1=t->chk;i+;s->curlen=s->curlen+t->curlen-j; s->chs->curlen='0' printf("置换后的字符串为:"); puts(s->ch);elseif(j<t->curlen) p=n=s->curlen;while(n>=i+j) m=t->curlen-j; s->chn+m-1=s
20、->chn-1; n-; for(k=0;t->chk!='0'k+) s->chi-1=t->chk; i+;s->curlen=p+t->curlen-j; s->chs->curlen='0' printf("置换后的字符串为:"); puts(s->ch); int index(seqstring *s,seqstring *t) /*子串的定位*/int i=0,j=0;printf("请输入主串和子串的串长:");scanf("%d%d"
21、,&s->curlen,&t->curlen);printf("请输入主串和子串:");scanf("%s%s",s,t);while(i<s->curlen)&&(j<t->curlen)if(s->chi=t->chj)i+;j+; /*继续比较后面的字符*/elsei=i-j+1; j=0; /*从模式的第一个字符进行新的一趟匹配*/ if(j=t->curlen) printf("n匹配成功!");else printf("n匹配失
22、败!");void main()int i=1,j;seqstring s,t;while(i) printf("0:串联接n1:串比较n2:求串长n3:串复制n4:插入n5:删除n6:置换子串n7:子串定位n");scanf("%d",&i);switch(i)case 0:strcats();break;case 1:strcmps();break;case 2:strlens();break;case 3:strcpys();break;case 4:printf("请输入插入的位置:"); scanf(&qu
23、ot;%d",&i); insert(&s,i,&t);break;case 5:printf("请输入删除的位置和个数:"); scanf("%d%d",&i,&j); deletes(&s,i,j);break;case 6:printf("请输入置换的位置和个数:"); scanf("%d%d",&i,&j); replace(&s,i,j,&t);break;case 7:index(&s,&t);break;printf("n0:停止n1:继续n");scanf("%d",&i);3程序运行结果:3.1串的联接运行结果如图1图1 串联接3.2串比较的运行结果如图2图2 串比较3.3求串长的运行结果如图3图3 求串长3.4串复制的运行结果如图4图4 串复制3.5串插入的运行结果如图5图5 串插入3.6串删除的运行结果如图6图6 串删除3.7置换子串的运行结果如图7图7 置
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 电子文档格式转换标准流程
- 加强需求预测提升响应速度
- 关于开展新员工培训的策划书
- 自然资源保护与合理利用合作协议
- 移动应用开发及维护服务合同
- 草房子小学生故事解读
- 2025年稀土-铁超磁致伸缩单晶材料合作协议书
- 惠州学校道路标线施工方案
- IT服务行业云服务解决方案探讨
- 美发行业发型设计版权协议
- YY/T 0216-1995制药机械产品型号编制方法
- YS/T 649-2007铜及铜合金挤制棒
- JJG 1044-2008卡尔·费休库仑法微量水分测定仪
- JJF 1211-2008激光粒度分析仪校准规范
- GB/T 34022-2017小型游乐设施立体攀网
- GB/T 29480-2013接近电气设备的安全导则
- GB/T 17432-1998变形铝及铝合金化学成分分析取样方法
- GB/T 13663.2-2018给水用聚乙烯(PE)管道系统第2部分:管材
- 学校小学劳动课程体系
- 正弦函数和余弦函数的图像与性质
- 大宗饲料原料品质-镜检
评论
0/150
提交评论