网络工程专业毕业论文—数据结构课程设计报告串基本操作的演示数据结构课程设计报告(伪码)01036.doc_第1页
网络工程专业毕业论文—数据结构课程设计报告串基本操作的演示数据结构课程设计报告(伪码)01036.doc_第2页
网络工程专业毕业论文—数据结构课程设计报告串基本操作的演示数据结构课程设计报告(伪码)01036.doc_第3页
网络工程专业毕业论文—数据结构课程设计报告串基本操作的演示数据结构课程设计报告(伪码)01036.doc_第4页
网络工程专业毕业论文—数据结构课程设计报告串基本操作的演示数据结构课程设计报告(伪码)01036.doc_第5页
免费预览已结束,剩余19页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

数据结构课程设计报告 题目:串基本操作的演示 学 院 计算机学院 专 业 网络工程 年级班别 11级1班 学 号 3111006293 学生姓名 指导教师 成 绩 _2012年6月题目:串基本操作的演示一 需求分析1. 定义自定义的串类型,并使用此类型实现串的基本操作演示。2. 利用堆分配存储表示实现hstring串类型的最小操作子集的基础,实现串抽象数据类型的其余基本操作。3. 严格检查参数的合法性4. 构造命令解释程序,循环往复处理用户输入的每一条命令,有程序终止命令5. 需要实现的基本操作:(1)赋值 (2)判相等 (3)联接 (4)求长度 (5)求子串(6)子串定位 (7)串替换 (8)显示 (9)删除 (10)退出 测试数据:必要数据(1)e “ ”,应显示”equal”. (2)e abcabcd,应显示unequal. (3)c “ “,应显示”. (4) i a”,应报告:参数非法. (5)r aaaaab,应显示ba. (6)r aaabc aaab,应显示aabaabaabbc. (7)r aaaaaaaaaaaaab,应显示abab. 自定义数据: (8)astring,应显示:“语法格式错误!请重新输入!” (9)a string,应显示:内部名string. (10)a ,应显示:内部名 . (10)lstring,应显示:”命令语法格式错误!请重新输入!” (11)l string,应显示: 6. (12)l ,应显示: 0. (13)d123,应显示:“命令语法错误!内部名不能小于0和大于100和只能为数字!” (14)ds,应显示:“内部名只能输入数字!请重新输入!” (15)d99,应显示:“此内部名为空!请重新输入!” (16)d2,应显示:“命令语法格式错误!请重新输入!” (17)d 2,应显示:删除成功. (18)sstring,应显示:“命令语法格式错误!请重新输入!” (19)s string2 3,应显示:tr. (20)s string5 7应显示:start不能小于0或大于字符串的长度。end不能小于start且不能大于字符串的长度。 (21)cstring,应显示:“命令语法格式错误!请重新输入!” (22)c string,应显示:string. (23)c str应显示:str。 (24)istring,应显示:“命令语法格式错误!请重新输入!” (25)i stringing,应显示: 4.二 概要设计1. 定义hstring串抽象数据类型adt strheadlist 数据对象: d ai | aielemset, i=1,2,.,n, n0 数据关系:r1 |ai-1, aid, i=2,.,n 基本操作:void getcommand(char c,strheadlist &headlist,resulttype &resultype)初始条件:c不为空,headlist存在,resultype存在操作结果: 得到命令的对应整数值。void assignment(strheadlist headlist,resulttype resultype,int &pointcheck)初始条件:headlist存在,resultype存在。操作结果:存储输入的字符串,并显示其内部名和串值。void equal(strheadlist headlist,resulttype resultype,int &pointcheck) 初始条件 : headlist存在,resultype存在。 操作结果:报告输入的两字符串是否相等。void connect(strheadlist headlist,resulttype resultype,int &pointcheck) 初始条件 : headlist存在,resultype存在。 操作结果 :联接输入的两字符串,并显示联接后的字符串。void length(strheadlist headlist,resulttype resultype,int &pointcheck) 初始条件 : headlist存在,resultype存在。 操作结果:显示输入的字符串的长度。void substring(strheadlist headlist,resulttype resultype,int start,int end) 初始条件 : headlist存在,resultype存在。 操作结果:显示主串中长度为end-start的子串。void sbslocation(strheadlist headlist,resulttype resultype,int &pointcheck) 初始条件 : headlist存在,resultype存在。 操作结果:显示子串在主串第一次出现的位置。void replace(strheadlist headlist,resulttype resultype,int &pointcheck) 初始条件 : headlist存在,resultype存在。 操作结果:用第二子串替换主串中出现的第一子串,并显示替换后的主串 void show(strheadlist headlist,resulttype resultype,int &pointcheck,int k) 初始条件 : headlist存在,resultype存在。 操作结果:显示表内所有的字符串的内部名和串值。void delete(strheadlist headlist,resulttype resultype,int &pointcheck) 初始条件 : headlist存在,resultype存在。 操作结果:删除指定内部名的字符串。void end(strheadlist headlist,resulttype resultype,int &pointcheck,int k) 初始条件 : headlist存在,resultype存在 操作结果:结束程序。2. 命令分析抽象数据类型adt resulttype数据对象: d ai | aielemset, i=1,2,.,n, n0 数据关系:r1 |ai-1, aid, i=2,.,n 变量:int cmdno 操作结果:存储命令对应的整数值。 int s3操作结果:存储输入的子串的内部名。 3基本类型抽象数据类型adt hstring 数据对象: d ai | aielemset, i=1,2,.,n, n0 数据关系:r1 |ai-1, aid, i=2,.,n 变量:char *ch操作结果:字符串基址。 int length 操作结果 :存储字符串的长度.4.主程序void main() 初始化; 命令格式和使用格式说明列表; 命令分析函数调用 ab(headlist,resultype); 5.本程序模块的调用关系本程序只有两个模块 主程序模块 包涵各函数的模块三 详细设计1. 主程序需要的全程量#define size 30 /字符串的分配空间#define true 1 /常量typedef struct /串表头定义hstring strhead100; /字符串指针数组strheadlist; /串表头类型2.字符串类型typedef struct /字符串类型定义char *ch; /字符串存储基址int length; /字符串的长度hstring; typedef struct/命令存储类型定义int cmdno; /存储命令的变量int s3; /存储输入的字符串的下标的数组resulttype;void getcommand(char c,strheadlist &headlist,resulttype &resultype)/判断由c存储的字符,把与之对应的命令的值赋予resultype的cmdno中void assignment(strheadlist headlist,resulttype resultype,int &pointcheck)/从headlist中strhead100查找还没开辟空间的串头指针,然后开辟空间存储/用户输入的字符串。void equal(strheadlist headlist,resulttype resultype,int &pointcheck)/在headlist中存储用户输入的两个字符串,再进行比较,如果相等显示equal,/如果不相等显示unequal。void connect(strheadlist headlist,resulttype resultype,int &pointcheck)/存储用户输入的两个字符串,然后将第二个字符串联接到第一个字符后面并存储/在headlist中,显示联接后的字符串的串值。void length(strheadlist headlist,resulttype resultype,int &pointcheck)/在headlist中存储用户输入的一个字符串,然后显示字符串的长度。void substring(strheadlist headlist,resulttype resultype,int start,int end)/在headlist中存储用户输入的一个字符串,并用start、end接受用户需要获得的/子串的开始位置和结束位置。void sbslocation(strheadlist headlist,resulttype resultype,int &pointcheck)/在headlist中存储用户输入的两个字符串,显示第二个字符串在第一个字符串的/第一次出现的位置。void replace(strheadlist headlist,resulttype resultype,int &pointcheck)/存储用户输入的三个字符串,在第一个字符串中查找与第二个字符串相等的子串/并用第三个字符串替换之,显示替换后的字符串。void show(strheadlist headlist,resulttype resultype,int &pointcheck,int k)/resultype接受命令cmdno,显示headlist所有存储的字符串。void delete(strheadlist headlist,resulttype resultype,int &pointcheck)/在headlist存储用户输入的内部名,将字符串内部名转换为整数类型,/删除对应内部名的字符串,若此内部名字符串不存在,则显示不存在,否则/显示删除成功。void end(strheadlist headlist,resulttype resultype,int &pointcheck,int k)/分析命令,结束程序的运行。void ab(strheadlist &headlist,resulttype &resultype)/分析用户输入的命令,存储用户输入的字符串,并调用相应的命令函数。其中操作的算法如下:1.void ab(strheadlist &headlist,resulttype &resultype)/主函数定义for(;c!=n;) c=getchar();/从屏幕读取一个字符if(check=0) getcommand(c,headlist,resultype);/调用命令匹配函数check=1;/check赋值为1,限制只调用一次命令匹配函数 if(c=&start=1)/如果字符串输入结束 start=0;headlist.strheadi.length=length; /获得字符串长度headlist.strheadi.chlength=0;/字符串结束符length=0; /变量length置为0 resultype.sj=i;/记录输入的字符串的内部名j+; pointcheck+=1; /用于命令语法判断continue; /结束循环 if(c=)&start=0)/如果字符串读取开始 pointcheck+=1;start=1; while(headlist.strheadi.ch)/寻找还没分配的串指针的下标 i+; if(start=1) if(!headlist.strheadi.ch)/如果未分配存储空间headlist.strheadi.ch=(char *)malloc(size*sizeof(char);if(c!=)/如果读取的字符串不为headlist.strheadi.chlength=c;/存储字符headlist.strheadi.length+; /字符长度自增length+;k+;/用于命令语法判断switch(resultype.cmdno)/选择对应命令的对应函数 case 1:assignment(headlist,resultype,pointcheck);break; case 2:equal(headlist,resultype,pointcheck);break; case 3:connect(headlist,resultype,pointcheck);break; case 4:length(headlist,resultype,pointcheck); case 5:substring(headlist,resultype,pointcheck);break; case 6:sbslocation(headlist,resultype,pointcheck);break; case 7:replace(headlist,resultype,pointcheck);break; case 8:show(headlist,resultype,pointcheck,k); case 9:delete(headlist,resultype,pointcheck);break; case 10:end(headlist,resultype,pointcheck,k);break; case 11:printf(t不存在此命令,请重新输入!n);ab(headlist,resultype);break; default: break; 2.void getcommand(char c,strheadlist &headlist,resulttype &resultype) /得到对应输入的命令switch(c) case a: resultype.cmdno=1;break;case e: resultype.cmdno=2;break; case c: resultype.cmdno=3;break; case l: resultype.cmdno=4;break; case s: resultype.cmdno=5;break; case i: resultype.cmdno=6;break; case r: resultype.cmdno=7;break; case p: resultype.cmdno=8;break; case d: resultype.cmdno=9;break; case q: resultype.cmdno=10;break; default:resultype.cmdno=11;break;3.void assignment(strheadlist headlist,resulttype &resultype,int &pointcheck) /赋值函数调用if(pointcheck=2)/ 语法判断 printf(nt命令输出的结果为:);printf(nt新赋值的字符串的内部名为:%d,串值为:,resultype.s0);puts(headlist.strheadresultype.s0.ch);printf(n); ab(headlist,resultype);/程序循环执行else printf(nt命令语法错误!请重新输入!n); ab(headlist,resultype);/程序循环执行 4.void equal(strheadlist headlist,resulttype resultype,int &pointcheck) /判相等函数调用 if(pointcheck=4)/语法判断 printf(t命令输出结果为:);if(headlist.strheadresultype.s0.length!=headlist.strheadresultype.s1.length)/如果两字符串长度不相等 printf(unequaln); ab(headlist,resultype); else for(i=0;iheadlist.strhead1.length;i+)/各字符判断 if(headlist.strheadresultype.s0.chi!=headlist.strheadresultype.s1.chi)/如果有一个字符不相等 printf(unequal); printf(n); ab(headlist,resultype); printf(equal); printf(n); ab(headlist,resultype);/程序循环执行 else printf(nt命令语法错误!请重新输入!n); ab(headlist,resultype);/程序循环执行 5.void connect(strheadlist headlist,resulttype resultype,int &pointcheck) /字符串联接 if(pointcheck=4)/语法判断printf(t命令输出结果为:); while(headlist.strheadi.ch)/寻找还没分配的串指针的下标 i+;headlist.strheadi.ch=(char*)malloc(headlist.strheadresultype.s0.length+headlist.strheadresultype.s1.length)*sizeof(char);/分配长度为两个字 符串总长度的空间for(;j(headlist.strheadresultype.s0.length);j+)/存储第一个字符串headlist.strheadi.chj=headlist.strheadresultype.s0.chj; for(;k0&start=headlist.strheadresultype.s0.length&end=start)/如果输入数据不正确 break;/退出循环 else /如果语法不正确 printf(tstart不能小于0或大于字符串的长度n); printf(tend不能小于start且不能大于字符串的长度n); printf(t请重新输入子串长度n); start=0; end=0; else printf(nt命令语法错误!请重新输入!n); ab(headlist,resultype); if(start=-1) printf(t命令输出结果为:);for( i=start;i=end;i+)/显示从start到end长度的子字符串printf(%c,headlist.strheadresultype.s0.chi);printf(n);ab(headlist,resultype);/程序循环elseab(headlist,resultype);/程序循环7.void sbslocation(strheadlist headlist,resulttype resultype,int &pointcheck) /子串在主串的第一次出现的位置if(pointcheck=4&headlist.strheadresultype.s1.length!=0)/语法判断 printf(t命令输出结果为:);for(;i=(headlist.strheadresultype.s0.length-headlist.strheadresultype.s1.length);i+)/寻找子串 if(headlist.strheadresultype.s0.chi=headlist.strheadresultype.s1.ch0)/如果主串某个字符与子串第一个字符相等 for(j=0;j(headlist.strheadresultype.s0.length-headlist.strheadresultype.s1.length)/如果不存在子串 printf(nt第一字符串不存在第二字符串); printf(n); ab(headlist,resultype);/程序循环else printf(nt命令语法错误!请重新输入!n); ab(headlist,resultype);/程序循环 8.void replace(strheadlist headlist,resulttype resultype,int &pointcheck)/子串替换函数while(headlist.strheadcurrent.ch)/寻找还没分配的串指针的下标 current+;headlist.strheadcurrent.ch=(char *)malloc(size*sizeof(char); if(pointcheck=6)/语法判断 printf(t命令输出结果为:); headlist.strheadcurrent.length=0;/替换后的子串存储在headlist.strhead0.ch中for(i=0;i=headlist.strheadresultype.s0.length-headlist.strheadresultype.s1.length;i+,n+)/寻找相同子串并替换 if(headlist.strheadresultype.s0.chi=headlist.strheadresultype.s1.ch0)/寻找主串相同的子串 for(j=i,k=0;ji+headlist.strheadresultype.s1.length;j+,k+) if(headlist.strheadresultype.s0.chj=headlist.strheadresultype.s1.chk) m+; else headlist.strheadcurrent.chn=headlist.strheadresultype.s0.chi;/不然将不相等字符存在headlist.strhead0.ch中 if(m=headlist.strheadresultype.s1.length)/如果找到相同的子串 if(headlist.strheadresultype.s2.length!=0) /如果替换串不是空串for(j=i,k=0;ji+headlist.strheadresultype.s2.length;j+,k+)/将 替换串存储在headlist.strhead0.ch headlist.strheadcurrent.chn=headlist.strheadresultype.s2.chk; n+;/替换后子串的长度自增 i=i+headlist.strheadresultype.s1.length-1; n=n-1; m=0; for(;iheadlist.strheadresultype.s0.length;i+) headlist.strheadcurrent.chn=headlist.strheadresultype.s0.chi; n+; headlist.strheadcurrent.length=n-1;/得到替换后字符串的长度 headlist.strheadcurrent.chn=0;/字符串结束符 puts(headlist.strheadcurrent.ch); printf(n); ab(headlist,resultype);/程序循环 else printf(nt命令语法错误!请重新输入!n); ab(headlist,resultype);/程序循环 9.void show(strheadlist headlist,resulttype resultype,int &pointcheck,int k) /显示字符串函数if(pointcheck=0&k=2)/语法判断printf(t命令输出结果为:);while(headlist.strheadi.ch)/输出不是空串的字符串 printf(nt内部名:%dt串值:,i);puts(headlist.strheadi.ch);i+;printf(n); ab(headlist,resultype);/程序循环 else printf(nt命令语法错误!请重新输入!n); ab(headlist,resultype);/程序循环10.void delete(strheadlist headlist,resulttype resultype,int &pointcheck) /删除指定内部名的字符串 if(headlist.strheadresultype.s0.length0)/如果输入的内部名大于100或小于0 if(headlist.strheadresultype.s0.length=1)/如果输入内部名只是一位数 if(headlist.strheadresultype.s0.ch057)/内部名只能输入数字 printf(nt内部名只能输入数字!请重新输入!n); ab(headlist,resultype); shu=headlist.strheadresultype.s0.ch0-48; else if(headlist.strheadresultype.s0.ch057)|(headlist.strheadresultype.s0.ch157)/内部名只能输入数字 printf(nt内部名只能输入数字!请重新输入!); ab(headlist,resultype); shu=(headlist.strheadresultype.s0.ch0-48)*10+(headlist.strheadresultype.s0.ch1-48);/计算两位的数字 if(pointcheck=2)/语法判断 printf(t命令输出结果为:);char *p;if(headlist.strheadshu.ch=null)/如果指定的字符串为空 printf(nt此内部名为空!请重新输入!n); ab(headlist,resultype);/程序循环 elsep=headlist.strheadshu.ch; free(p); /释放指定的空间headlist.strheadshu.ch=null;if(!headlist.strheadshu.ch) printf(nt删除成功!n); ab(headlist,resultype); /程序循环else printf(nt命令语法错误!请重新输入!n); ab(headlist,resultype);/程序循环 else printf(nt命令语法错误!内部名不能小于0和大于100和只能为数字!n); ab(headlist,resultype); /程序循环11.void end(strheadlist headlist,resulttype resultype,int &pointcheck,int k) /退出函数 if(pointcheck=0&k=2)/语法判断if(resultype.cmdno=10)while(true) /结束程序return;else printf(nt命令语法错误!请重新输入!n); ab(headlist,resultype);/程序循环3.主函数 void main()strheadlist headlist;/创建串表头 resulttype resultype;/创建命令存储类型for( j=0;j100;j+)/将各串的的头指针置换为空指针headlist.strheadj.ch=null;for( i=0;i3;i+)resultype.si=0; /第一个串头指针开辟大小为size的字符存储空间 printf(t学院:计算机学院 专业:网络工程 学号:3111006293 姓名:汤瑞华 班级:1班n);printf(tttt命令列表n);/显示命令列表printf(t1.赋值命令 a 例: a stringn);printf(t2.判相等命令 e 例: e string stringn); printf(t3.联接命令 c 例: c string stringn); printf(t4.求长度命令 l 例: l stringn); printf(t5.求子串命令 s 例: s stringn);printf(t6.子串定位命令 i 例: i string ing n);printf(t7.串替换命令 r 例: r string ing abcn);printf(t8.显示命令 p 例: p n); printf(t9.删除命令 d 例: d 3n);printf(t10.退出命令 q 例: q n);printf(ttt请输入指令和字符串n); ab(headlist,resultype);/命令分析函数调用4.函数的调用关系图 main ab getcommandassignment equal connect length substring sbslocation replace show delete end 四 调试分析1. 在编程中,对设计做了如下修改:(1) 由于涉及到程序的循环运行的问题,原来设计是用while语句实现循环读取用户输入的命令,但发现无法实现。所以把读取用户输入命令的语句块和相应的函数调用语句块整合成函数ab();并在每一个函数的最后添加了函数ab()以实现循环。(2) 在调试的过程中,由于没有命令语法的严格检查,在输入一些错

温馨提示

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

评论

0/150

提交评论