数据结构-串的存储表示及基本操作-课程设计-实验报告(共16页)

上传人:春*** 文档编号:46028135 上传时间:2021-12-10 格式:DOC 页数:16 大小:182KB
收藏 版权申诉 举报 下载
数据结构-串的存储表示及基本操作-课程设计-实验报告(共16页)_第1页
第1页 / 共16页
数据结构-串的存储表示及基本操作-课程设计-实验报告(共16页)_第2页
第2页 / 共16页
数据结构-串的存储表示及基本操作-课程设计-实验报告(共16页)_第3页
第3页 / 共16页
资源描述:

《数据结构-串的存储表示及基本操作-课程设计-实验报告(共16页)》由会员分享,可在线阅读,更多相关《数据结构-串的存储表示及基本操作-课程设计-实验报告(共16页)(16页珍藏版)》请在装配图网上搜索。

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时,分别表示str1str2,其对应的输出结果分别为-1、0、1。3) 求字符串的串长:在该函数中,要先定义一个整形变量i,strlen(str)表示字符串str的长度,它是一个整形函数。通过函数strlen(str)来算出字符串的长度,然后赋值给整形变量i输出,从而i的值即为所求的字符串的长度。4) .

5、 串的复制:在该函数中,首先分别输入两串字符串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=i;j-),满足循环条件的要进行的操作时把s-chj赋值给s-chj+t-curlen,就是让s-ch中空出等

6、于&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-curlen就是一个新的字符串,然后把s-chs-curlen+t-curlen再赋值给s-curlen即可得到所求的新的字符串6) .求串的删除:该函数有三个形参,一个是字符串s,两个是整形形参i和j,在函数中定义一个整形变量k,输入原字符串和其长度&s-curlen,函数中用for循环,for(k=i+j-1;

7、s-chk!=0;k+),把s-chk赋值给s-chk-j,既用覆盖的方式删除从第i个元素开始连续j个元素,最后把0赋值给s-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的

8、串长比较大,则用一个for循环,for(k=s-curlen;k=i+j-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语句 while(icurlen)&(jcur

9、len)),满足条件后进行的操作是检验对应的s和t的元素是否相等,相等时就i+,j+,用i减去t的串长即为t作为子串在s中的定位位置。不相等时,就用i减去j加上1赋值给i,j=0,往下扫描时,就从t的第一个元素再接着扫描。9) 主函数:在主函数中,因为要最多输入两个字符串,所以要先定义两个字符串s和t。有的主函数需要用到整形的变量,最多是两个,所以也要定义两个整形变量k和m。函数中,有很多的功能不同的函数,这样就要求验证很多次,所以在这里我们考虑用菜单来实现。用一个while循环,循环的条件为永真,这样当做完一个函数的验证时,系统就会自动让你接着选择。在while循环下,输入一个数字。每个数字

10、代表不同的功能。然后用一个switch语句,不同的case对应不同的函数,如:case(0)就可以代表求字符串的串长。2.程序设计代码:#include#include#define maxsize 32 /*假设串可能的最大长度是32*/typedef structchar chmaxsize; /*串的存储空间*/int curlen; /*当前串的长度*/seqstring;seqstring *s;void strcats() /*串的联接*/seqstring str132,str232;printf(请输入两串字符串:); /*输入两串字符串*/ scanf(%s%s,str1,s

11、tr2); /*接受输入的字符串*/strcat(str1,str2); /*联接两个字符串*/puts(str1); /*输出联接后的字符串*/void strcmps() /*比较字符串的大小*/ seqstring str132,str232;printf(请输入两串字符串:); scanf(%s%s,str1,str2);if(strcmp(str1,str2)0)printf(1);if(strcmp(str1,str2)=0)printf(0);if(strcmp(str1,str2)curlen);printf(请输入要插入的字符串及其长度:);scanf(%s%d,t,&t-c

12、urlen);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-curlen;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

13、-j=s-chk;s-chk-j=0;s-curlen=k-j; printf(删除后的字符串为:);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(%s%s,s,t);if(j=t-curlen) for(k=0;t-chk

14、!=0;k+) s-chi-1=t-chk; i+; s-curlen=s-curlen+t-curlen-j; s-chs-curlen=0; printf(置换后的字符串为:); puts(s-ch); elseif(jt-curlen) while(s-chl-1!=0)m=j-t-curlen; s-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(jcurle

15、n) p=n=s-curlen;while(n=i+j) m=t-curlen-j; s-chn+m-1=s-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,&s-curlen,&t-curlen);printf(请输入主串和子

16、串:);scanf(%s%s,s,t);while(icurlen)&(jcurlen)if(s-chi=t-chj)i+;j+; /*继续比较后面的字符*/elsei=i-j+1; j=0; /*从模式的第一个字符进行新的一趟匹配*/ if(j=t-curlen) printf(n匹配成功!);else printf(n匹配失败!);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:s

17、trcats();break;case 1:strcmps();break;case 2:strlens();break;case 3:strcpys();break;case 4:printf(请输入插入的位置:); scanf(%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:inde

18、x(&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 置换子串3.8子串定位的运行结果如图8图8 子串定位第三章 程序设计的优缺点及遇到的问题3.1:课程设计的优缺点:(1)优点:对于串的基本操作都能实现,如串联接、求串长、求子串、比较串的大小、插入、删除、子串定位

19、和置换。而且在最后的主函数中运用了菜单,使得程序的检验变得简单,容易执行。(2)缺点:对于串的具体操作,如串的联接,只能联接两串字符串,比较串的大小时,也只能比较两个,不能比较多个,即只能适用于简单的应用,不能应用于复杂的应用。3.2 遇到的问题:(1)在进行串的联接时,是把后面一串字符串接到前一字符串的后面,在用户输入时,应注意字符串输入的顺序。(2)在比较两个串大小时,比较的开始,比较的两个串元素都不能为空。(3)在进行置换时,重点要考虑用来置换的串与它所要置换的一串字符的长度的关系。(4)在子串的定位时,扫描的串中的某一个元素与子串中的第一个元素相同,接着往下扫描,若都相同时,才可以说明

20、串中出现的子串中的第一个元素的位置是子串位置。但如果后面的元素有不同的,则子串中的扫描必须回到第一个元素的位置开始重新扫描。第四章 总结4.1 思考和小结:本次课程设计是对我们这一学期来数据结构课程学习成果的一次实践检验,是对我们的一种全面综合训练,是与课堂听讲、自学和练习相辅相成的必不可少的一个教学环节,本次课程设计的问题比平时的习题复杂的多也更接近实际。在这次课程设计的实践过程中,刚开始由于对问题的认识还不是很清楚和对C语言知识的遗忘,遇到问题解决不了。通过向老师和同学请教,还有自己重新复习了C语言那本书,然后又重新对问题进行分析、设计和调试,最终顺利的完成了程序设计要求的基本内容和要求,对自己的编程水平有了很大程度的提高。4.2 参考文献 1唐策善、李龙澍、黄刘生等编著. 数据结构用C语言描述. 高等教育出版社2徐德明.最新C语言程序设计.电子工业出版社

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!