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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

数据结构综合设计实验报告.docx

1、数据结构综合设计实验报告实验报告格式1、 题目:线性表长整数的加减乘除实现2、 完成时间起止2010-12-3-2010-12-43、 实验要求实现线性表长整数的加减乘除(要求最少一千位以上)4、 实验目的通过对长整数加减乘除的实现,深入了解线性表的优势与劣势,同时增强对数据结构实践能力的培养,加强计算机动手能力。5、 实验过程5.1 系统的主控模块流程图#includeFile1.cppint main()list a,b,c;init(c);init(a);cout两个数a,b:;create(a);init(b);create(b);couta.a+b.a=;add(a,b,c);dis

2、play(c);couta.a-b.a=;init(c);thus(a,b,c);display(c);couta.a*b.a=;init(c);multipy(a,b,c);display(c);init(c);couta.a/b.a=;division(a,b,c);display(c);system(pause); 5.2 主要模块流程图首先线性表基本函数#includeusing namespace std;const int maxsize=1000;typedef char elemtype;struct listelemtype* a;int size;void init(lis

3、t& m)m.a=new elemtypemaxsize;m.size=0;void create(list& m)coutm.a;m.size=strlen(m.a);int getsize(list m)return m.size;bool empty(list m)return m.size=0;void display(list m)for(int i=0;im.size;i+)coutm.ai;coutendl;用于下面计算的基础函数void reverse(list& m)for(int i=0;i=b.size)return true;return false;void copy

4、(list& a,list b)a.size=b.size;for(int i=0;ib.size;i+)a.ai=b.ai;a.aa.size=0;void clearfirst(list& a) /用来清除数组前面的0int i=0,k=0;bool t=false;if(a.a0!=-&a.a0!=0)return;else if(a.a0=-) i=1;t=true;for(;ia.size;i+)if(a.ai=0)k+;else break;list b;init(b);copy(b,a);init(a);b.ab.size=0;a.size=b.size-k;if(t=false

5、) /t为false时 ,说明a为正for(int tz=0;tzb.size;tz+)a.atz=b.atz+k;elsea.a0=-;for(int tz=0;tza.size;tz+)a.atz+1=b.ak+tz+1;a.aa.size=0;void ch(list& a,int x) /乘以10 相当于移位for(int i=0;ix;i+)a.aa.size+i=0;a.size=a.size+x;a.aa.size=0;void reverse(list& m)/倒置for(int i=0;im.size/2;i+)elemtype t=m.ai;m.ai=m.am.size-i

6、-1;m.am.size-i-1=t;1大整数加法 void add(list a,list b,list& c) /加法/if(!empty(c)reverse(c);reverse(a);reverse(b);int i,k,flag=0,sun;if(compare(a,b)c.size=a.size;for(i=0;i=10)flag=sun/10;sun%=10;else flag=0;c.ai=sun+0; for(i=b.size;i=10)flag=sun/10;sun%=10;else flag=0;c.ai=sun+0; if(flag!=0)c.ac.size+=0+fl

7、ag;flag=0; elsec.size=b.size;for(i=0;i=10)flag=sun/10;sun%=10;else flag=0;c.ai=sun+0; for(i=a.size;i=10)flag=sun/10;sun%=10;else flag=0;c.ai=sun+0; if(flag!=0)c.ac.size+=0+flag;flag=0; c.ac.size=0;reverse(a);reverse(b);reverse(c);减法 void thus(list wg,list tg,list& c) /减法bool zf=true;list a,b; /创建临时a

8、,b用于操作init(a);init(b);copy(a,wg);copy(b,tg);int i,k,flag=0,sun; if(strlen(a.a)strlen(b.a) /大数减小数 reverse(a);reverse(b);for(i=0;istrlen(b.a);i+) a.ai-=flag/10; if(a.aib.ai)flag=10; else flag=0; sun=a.ai-b.ai+flag+0; c.ai=sun; for(i=strlen(b.a);istrlen(a.a);i+) a.ai-=flag/10; flag=0; c.ai=a.ai; c.size

9、=i; c.ai=0;else if(strlen(a.a)=strlen(b.a) /位数相等int w; bool tf=false;for(w=0;wa.size;w+) if(a.awb.aw)tf=false; break; else if(a.aw=b.aw)continue;else tf=true;break; reverse(a);reverse(b);if(tf=true& w=a.size&d!=a.size) /位数相等,大数减小数 for(i=0;istrlen(b.a);i+) a.ai-=flag/10; if(a.aib.ai)flag=10; else fla

10、g=0; sun=a.ai-b.ai+flag+0; c.ai=sun; for(i=strlen(b.a);i=a.size) init(c); c.size=1; c.a0=0; c.ac.size=0;return; else /位数相等,小数减大数 for(i=0;ib.ai)flag=10; else flag=0; sun=b.ai-a.ai+flag+0; c.ai=sun; for(i=strlen(a.a);istrlen(b.a);i+) b.ai-=flag/10; flag=0; c.ai=b.ai; zf=false; c.size=i; c.ai=0; else i

11、f(strlen(a.a)strlen(b.a) reverse(a);reverse(b); for(i=0;ib.ai)flag=10; else flag=0; sun=b.ai-a.ai+flag+0; c.ai=sun; for(i=strlen(a.a);istrlen(b.a);i+) b.ai-=flag/10; c.ai=b.ai; zf=false; c.size=i; c.ai=0; reverse(c);if(zf=false) /符号判断list m;init(m);copy(m,c);init(c); c.size=m.size+1;c.a0=-;for(i=0;i

12、m.size;i+)c.ai+1=m.ai;c.ai+1=0;clearfirst(c);void multipy(list wg,list tg,list& c ) /乘法list a,b; /创建临时a,b用于操作init(a);init(b);copy(a,wg);copy(b,tg);reverse(a);reverse(b);for(int m=0;mstrlen(a.a)+strlen(b.a);m+)c.am=0;c.size=strlen(a.a)+strlen(b.a);int i,k,sum,flag=0;for(i=0;istrlen(b.a);+i)if(b.ai=0)

13、continue;sum=0;for(k=0;kstrlen(a.a);+k)sum+=(a.ak-0)*(b.ai-0)+(c.ak+i-0);c.ak+i=sum%10+0; /进位计算sum/=10;flag=sum;c.astrlen(a.a)+i+=sum;c.ac.size=0;reverse(a);reverse(b);reverse(c);clearfirst(c);除法void division(list wg,list tg,list& c) /除法list a,b; /创建临时a,b用于操作init(a);init(b);copy(a,wg);copy(b,tg);int

14、 i,j; list t,v,k,m;if(empty(b)|empty(a)return;if(strlen(a.a)=strlen(b.a) /如果a和b长度相等for(i=0;i9;i+) init(k); /thus(a,b,k);if(k.a0!=-) init(a); copy(a,k); continue; else break;init(c);c.size=1;c.a0=i+0;c.ac.size=0;else if(strlen(a.a)strlen(b.a) /如果a比b大int qwt=strlen(a.a)-strlen(b.a);for(j=0;j=qwt;j+)in

15、it(m);int grf=0;thus(a,b,m);if(m.a0=-)grf+;init(v);copy(v,b);ch(v,qwt-j-grf); for(i=0;i9;i+) init(k); / thus(a,v,k); if(k.a0!=-) init(a); copy(a,k); continue; else break; c.aj=i+0;c.size+;if(strlen(a.a)=strlen(b.a)for(i=0;i9;i+) init(k); /thus(a,b,k);if(k.a0!=-) init(a); copy(a,k); continue; else br

16、eak;if(jqwt)c.ac.size=i+0; c.size+; c.ac.size=0; clearfirst(c);5.3 测试例子测试实例普通加法加法进位等位加法等位减法大数减小数小数减大数小数乘大数大数乘小数大数除小数等位数相同除法高位计算千位级别计算(时间大约1s不到)算法性能优良接上面5.4 设计中碰到的问题,如何解决实验过程中多次碰到数组空间内存溢出的问题,除法运算效率问题,还有计算过程中算法重利用不高的问题,我多次实验,并通过完善,通过分模块执行代码进行整合,最终解决了一些已知的问题。6、 实验结果和心得体会通过这次综合设计,我对数组了解更深刻了,同时对内存空间的结构也更加深刻了,在实践能力上得到很大的提高,同时也了解了线性表的结构与功能!在千位级别的计算过程中由于受到数组输入的限制,无法测试由于无法和string比较,所以string性能未知!千位级别计算(时间大约1s不到)算法性能优良,在1024位乘以1024位,计算过程中,由于受到程序的限制,内存最多能够读入大小限制,不能实现1000-2000位的计算

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

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