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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

数据结构实验报告2.docx

1、数据结构实验报告2 数据结构实验报告 实验1.汉诺塔的实现一 需求分析题目:假设有三个命名为X,Y,Z的塔座,在塔座X上插有n个直径大小各不相同、依小到大编号为1,2,,n的圆盘。现按照要求将X轴上的n个圆盘移至塔座Z上,并仍按同样顺序叠排,圆盘移动时必须遵守以下规则:1,每次只能移动一个;2,圆盘可以插在XYZ中的任一塔座上;3,任何时刻都不能将一个较大的圆盘压在较小的圆盘上。需要输入的值:圆盘的个数。输出:从X塔座上移至Z塔座上的顺序。测试数据:3,输出结果预测:xy,xz,yz,xy,zy,zx,yx,yz,xy,xz,yz(箭头符号表示圆盘移动的次序)移动结束。二 概要设计:本实验主要

2、运用递归的思想,先把上面的n-1个拿到Y盘,把最下面的一个Z盘,然后剩下的n-1个也用这样的思路,用递归调用的算法实现圆盘的移动。三 详细设计: 四 调试分析:遇到的问题:移动时,步骤编号不变。解决方法:用static使其成为静态变量。时间复杂度:o(n);经验体会:递归可以把问题简单化,是个很好的方法。五使用说明:输入盘子的数目即可。六测试结果: 七源代码: #include#includevoid move(char a,int i,char b) static int c=0; printf(%i.move disk %i. from %c to %cn,+c,i,a,b);/移动voi

3、d hanoi(int n,char x,char y,char z) if(n=1) move(x,1,z); else hanoi(n-1,x,z,y); move(x,n,z); hanoi(n-1,y,x,z); /递归int main() char x,y,z; int n; scanf(%d,&n); x=x; y=y; z=z; hanoi(n,x,y,z);/调用 return 0; 实验2.字符串匹配。一 需求分析:输入一母串,另输入一字符串,判断该字符串是不是母串的字串,若是字串,则返回母串中字串的起始位置,否则输出不是字串。输入:两串字符;输出:返回值或0。测试数据:ab

4、cdefgijk efg 预测结果:4二 概要设计:用查找的方法,如果遇到第一个相同的字母,则字串母串同时往后移一个。三 详细设计: int substring(string s1,string s2)/s1是字串 int a=0,b,j=1,i; for(b=0;bs2.length();b+) i=b; for(;as1.length();a+) if(s1a!=s2i) j=0;continue;/若s1的字母和s2的字母有一个不同则进行下一个的比较 else i+; j+; if(j=s2.length() return a-s2.length()+1;/如果匹配,则返回母串中与字串开

5、始匹配的位置 return 0;四 调试分析:遇到的问题:跳出循环时没有考虑到如果字串与母串相匹配则字串的字母也要向后移动一个。解决方法:字串同时后移一个如果前一个相匹配。时间复杂度:o(n2);经验体会:设计算法时,即使是很简单的算法,也不能掉以轻心。五 用户使用说明:输入一字符串,换行,再输入一字符串,再换行,在换行,即可。六 运算结果: 七 源代码: #include#includeusing namespace std;int substring(string s1,string s2)/s1是字串 int a=0,b,j=1,i; for(b=0;bs2.length();b+) i

6、=b; for(;as1.length();a+) if(s1a!=s2i) j=0;continue;/若s1的字母和s2的字母有一个不同则进行下一个的比较 else i+; j+; if(j=s2.length() return a-s2.length()+1;/如果匹配,则返回母串中与字串开始匹配的位置 return 0;int main() string s1,s2; getline(cin,s1);/输入母串 getline(cin,s2);/输入字串 coutsubstring(s1,s2)statueinfo=statueinfo; this-carnum=carnum; thi

7、s-time=time; char gets()/取车的状态 return statueinfo; int getcarnum()/车的编号 return carnum; int gettime()/车离开或到达的时间 return time; void settime(int time)/重新设置时间 this-time=time; void setcarnum(int canum)/重新设置车的编号 this-carnum=carnum; void setcarnum(char statueinfo)/重新设计车的状态 this-statueinfo=statueinfo; ;2.设计一个

8、栈,用于停车或者暂时存放车辆。class stack:public car/栈 car *base; car *top; int stacksize;public: stack()/初始化 stacksize=200; base=new carstacksize; top=base; stack(int stacksize)/设计一个新的容量的栈 this-stacksize=stacksize; base=new carstacksize; top=base; stack()/解放栈的空间 car *gettop()/取栈顶 return top-1; car *getbase()/取栈底

9、return base-1; int getsize()/取栈的大小 return stacksize; car *push(car e)/压入栈 /if(top-basestacksize) return 0; *top=e; top+; return top; car *pop()/弹出栈 /if(top=base) return 0; top-; return top; ;3.设计一个队列,用于存放没有停车位置的车。class queue:public car/队列 car *front; car *rear;public: queue()/初始化 front=new car200; r

10、ear=front; queue()/解放队列 car *enqueue(car e)/让车进入队列 *front=e; front+; return front; car *dequeue()/让车出队列 rear+; return rear; car *getfront()/取队头元素 return front; car *getrear()/取队尾元素 return rear; ;四 调试分析:1. 怎样把车的所有信息绑在一起?解决方法:用一个类。2. 怎样把车所有的信息压入栈?解决方法:让栈直接在car的类上进行操作。3. 栈的压入出现问题,让top指针指向压入的元素,导致后来总出现联

11、机错误,不能输入数据。解决方法:修改top指针的指向。4. 一开始没有设队列,把所有的车停在栈里,后来仔细看题目,才觉得有点不对。解决方法:设队列时间复杂度:o(n)经验体会:做题要仔细分析,不要信服气躁。把数据压入栈后,要把指针向上移一个。五 用户使用说明:首先输入有几个停车车位,之后根据提示输入即可。六 实验结果: 七 源代码: #includeusing namespace std;#define STACK_INIT_SIZE 100;#define STACKINCREMMNT 10;class car char statueinfo;/停车状态。 int carnum;/汽车编号

12、int time;/汽车离开或到达的时间public: car() statueinfo=E; carnum=0; time=0; car(char statueinfo,int carnum,int time) this-statueinfo=statueinfo; this-carnum=carnum; this-time=time; char gets()/取车的状态 return statueinfo; int getcarnum()/车的编号 return carnum; int gettime()/车离开或到达的时间 return time; void settime(int ti

13、me)/重新设置时间 this-time=time; void setcarnum(int canum)/重新设置车的编号 this-carnum=carnum; void setcarnum(char statueinfo)/重新设计车的状态 this-statueinfo=statueinfo; ;class stack:public car/栈 car *base; car *top; int stacksize;public: stack()/初始化 stacksize=200; base=new carstacksize; top=base; stack(int stacksize)

14、/设计一个新的容量的栈 this-stacksize=stacksize; base=new carstacksize; top=base; stack()/解放栈的空间 car *gettop()/取栈顶 return top-1; car *getbase()/取栈底 return base-1; int getsize()/取栈的大小 return stacksize; car *push(car e)/压入栈 /if(top-basestacksize) return 0; *top=e; top+; return top; car *pop()/弹出栈 /if(top=base) r

15、eturn 0; top-; return top; ;class queue:public car/队列 car *front; car *rear;public: queue()/初始化 front=new car200; rear=front; queue()/解放队列 car *enqueue(car e)/让车进入队列 *front=e; front+; return front; car *dequeue()/让车出队列 rear+; return rear; car *getfront()/取队头元素 return front; car *getrear()/取队尾元素 retu

16、rn rear; ;int main() int n,carnum,time; int t100; char statueinfo; coutplease input the total parking space:n; stack s; stack s1(n); queue q; couts1.getsize()endl; while(1) coutWELCOME! the charge of parking is 10 yuan per time unit.nplease input your infomation:n1.arrive or departure information:A(

17、arrive),D(depature),E(end);n2.your car number;n3.your arrive or departure time:nstatueinfocarnumtime; car car1(statueinfo,carnum,time); if(car1.gets()=A)/如果车辆到来 if(s1.gettop()-s1.getbase()s1.getsize()/如果停车场还有位置 s1.push(car1);/把车子停进停车场 couts1.getsize()endl; tcar1.getcarnum()=car1.gettime();/把进停车场的时间记

18、录下来 coutthis car now stop in parking lot and the NO.(s1.gettop()-s1.getbase() positionnendl; else/如果停车场没有位置 q.enqueue(car1);/把车停入便道中 coutthis car now stop in makeshift road and the NO.(q.getfront()-q.getrear() positionngetcarnum()!=car1.getcarnum() s.push(*(s1.gettop(); s1.pop(); /当它不是停在栈顶,则把其他的车退出来

19、停入另一个栈中 s1.pop();/弹出要离开的车 while(s.gettop()!=s.getbase() s1.push(*(s.gettop(); s.pop(); /把退出的车停回去 if(q.getfront()!=q.getrear()/如果还有车在等停车 tq.getrear()-getcarnum()=car1.gettime();/把他进入停车场的时间记录下来 coutgetcarnum() : getcarnum()endl; s1.push(*(q.getrear(); q.dequeue(); /把等待进入停车场的车停入停车场 coutyou should pay (

20、car1.gettime()-tcar1.getcarnum()*10 yuan. Thank You for Your Custom !nendl; else if(statueinfo=E) break; else coutthere is something wrong.please input again!nendl;/结束 delete &s1; delete &s; return 0;实验4.程序分析一 需求分析问题:读入一个c程序,统计程序中代码,注释和空行的行数以及行数的个数以及平均行数,并利用统计信息分析评价该代码的风格。输入:一个c程序的文件名。输出:统计信息以及评价。测试

21、的程序:#include#include#includeint strc(char a10,char b15,int n) int i; for(i=0;in;i+) if(ai!=bi) return i; /查找到第一个不同的字母则返回/字符串比较int main() char a10; /char b15; int n; scanf(%s,a); /输入一字符串 n=strc(a,void ,6); printf(%dn,n); /输出结果 return 0;二 概要设计:1. 需要用到文件的输入输出相关的知识,当遇到n表示一行,与这种方法计算行数2. 当遇到表一注释行,当一行中只有n表

22、示空行,还需要设计一个计算函数的函数来计算程序中共有多少个函数三 详细设计:1.字符串比较的函数int strc(char a100,char b8,int n)/字符串的比较。 int i; for(i=0;in;i+) if(ai!=bi) return i; /返回到第一个不相等的字母的位置。 2.函数平均长度的评价表。 char G_Cclass(int s)/平均代码行的等级关系。 if(s=10) return A; else if(s=8)|(s=16&s=5&s=21&s=0.15&s=0.25) return A; else if(s=0.10)|(s=0.26&s=0.05

23、&s=0.31&s=0.35) return C; else if(s=0.05|s=0.35) return D; else return E; /以上条件都不满足,返回E。 4. 判断是不是关键字 int CS(char d)/判断语句的前一个单词是不是关键词。 int a=0,i; if(strc(d,void,5)=4|strc(d,int,5)=3|strc(d,char,5)=4|strc(d,double,8)=6|strc(d,float,6)=5|strc(d,bool,5)=4) a+; for(i=0;istrlen(d)-2;i+) if(di=() a+;break; if(a=2) return 2; else return 0;/a为标志。5. 判断是不是函数: int G_F(FILE *fp,char file)/

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

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