2022年长整数数据结构课程设计 .pdf
《2022年长整数数据结构课程设计 .pdf》由会员分享,可在线阅读,更多相关《2022年长整数数据结构课程设计 .pdf(15页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、1 数据结构课程设计报告题 目:长整数四则运算院 (系):计算机工程学院专业:计算机嵌入式班级:嵌入式 1091 学生:李士岩指导教师:寇海洲孙成富邱军林殷 路2010 年 12 月名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 15 页 - - - - - - - - - 2 目 录一、需求分析 . 3二、概要设计 . 3三、程序设计步骤. 6四、运行结果 . 14 五、课程设计小结. 15 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - -
2、- - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 15 页 - - - - - - - - - 3 一、需求分析:计算机中存储的数据是有范围限制的,对于超出存储限制的数据无法直接进行运算,为此需要设计相应的程序来完成这种超出范围限制的长整数间的四则运算。(1)输入 : 两个长整数;(2)输出 : 计算结果;(3)功能 : 双向循环链表实现长整数的存储,每个结点含一个整形变量。(4)测试数据:(1)0;0;应输出“ 0” 。(2)-2345,6789 ;-7654,3211 ;应输出“ -1,0000,0000” 。(3)-9999,9999 ;1,0
3、000,0000,0000;应输出“ 9999,0000,0001 ” 。(4)1,0001,0001 ;-1,0001,0001;应输出“ 0” 。(5)1,0001,0001 ;-1,0001,0000;应输出“ 1” 。(6)-9999,9999,9999;-9999,9999,9999;应输出“ 1,9999,9999,9998” 。(7)1,0000,9999,9999;1;应输出“ 1,0001,0000,0000” 。二、概要设计1、数据结构:节点:head Data4 next 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - -
4、 - - - 名师精心整理 - - - - - - - 第 3 页,共 15 页 - - - - - - - - - 4 双向循环链表:2、程序流程设计:首先是设计双向链表,实现基本功能,然后设计主函数读入表达式,能够正确的分离运算符和数据, 分别存入双向链表中。然后设计一个函数表达式是哪种运算,以及结果的正负。 。具体设计如下:(1) ;用户输入表达式。(2) :将用户输入的字符串转化成双向循环链表。(3) :根据用户的输入形式确定执行调用函数;(4) :最后打印输出;(5) :a+b 算法: 1、从链表的Z 最后位节点向前加。设置up 记录进位情况。没进位为0,进位为1. 2、如果第一个操
5、作数大,则对第一个操作数剩余节点处理。3、如果第二个操作数大,则对第二个操作数剩余节点处理。4、如果最后, up 的值为 1,则创建新的节点储存。(6) :a-b 算法: 1、从链表的最后位节点向前加,设down记录借位情况,没借位为0,借位为 -1 2、如果第一个操作数大,则记录结果为正,对第一个操作数剩余节点处理 3、如果第二个操作数大,则记录结果为正,对第二个操作数剩余节点处理 4、最后,将0000,, ,0000,xxxx 前的 0 滤掉。流程图:Node Node Node 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - -
6、- 名师精心整理 - - - - - - - 第 4 页,共 15 页 - - - - - - - - - 5 开始初始化双向循环链表和一些相关变量读取输入流的一个数据读取一个字符是保存运算符读取数入流的一个整形数据存入第一个数据链表中读取一个字符记录第一个数据的符号放回输入流判 断 是 不是正负号不是判 断 是 不是运算符不是放回输入流读取数入流的一个整形数据存入第二个数据链表中读取一个字符判 断 是不是 = 计算并输出结果结束是不是是判 断 是不 是 正负号名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - -
7、 - - - - - 第 5 页,共 15 页 - - - - - - - - - 6 三、程序设计#include #include #include #include typedef struct LinkNode int data; /记录每个节点的整数(小于10000)LinkNode *next, *pre; /记录下一个节点的地址*pre; /记录前一个节点的地址linklist; linklist *head0; linklist *head1; /head0,head1分别记录两个整数链表的头指针linklist *currptr; linklist *result; /res
8、ult 记录结果链表的头指针/LinkList(); /构造函数,初始化链表/LinkList1(); /析构函数,释放空/void Creat(char a); /引入字符串,创立两个链表,分别表示两个整数/void Add(); /实现两个整数相加/void Display(); /显示结果void addtwo(); int sum(int n); void LinkList() /构造函数,初始化链表 /linklist *head0,*head1; /linklist *currptr; head0=(linklist *)malloc(sizeof(linklist); /申请一个
9、空间记录整数的符号和节点数head1=(linklist *)malloc(sizeof(linklist); result=(linklist *)malloc(sizeof(linklist); head0-next=head0; head0-pre=head0; /初始化链表,建立双向循环链表head1-next=head1; head1-pre=head1; result-next=result; result-pre=result; currptr=NULL; void LinkList1() /析构函数,释放空间 linklist *p1=head0,*p2=head1,*p3=r
10、esult; /三个指针分别指向三条链表的头指针while(p1!=p1-pre) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 15 页 - - - - - - - - - 7 p1-pre-next=p1-next; p1-next-pre=p1-pre; currptr=p1; p1=p1-next; free(currptr); while(p2!=p2-pre) /逐个删除节点,释放空间 p2-pre-next=p2-next; p2-next-pre=p2-
11、pre; currptr=p2; p2=p2-next; free(currptr); while(p3!=p3-pre) p3-pre-next=p3-next; p3-next-pre=p3-pre; currptr=p3; p3=p3-next; free(currptr); / delete p1; / delete p2; / delete p3; void Creat(char a) /引入字符串,创立两个链表,分别表示两个整数 int i=0,j=0,m=0,n=0,k=0,l=0,s=0,w=0; /i 记录字符串,j 记录加数节点数;s 记录被加数节点数/w 标记字符串中的-
12、号/k 记录字符串中的字符转化为整数的值,l 使每个节点记录4 位while(am!=;) m+; /m 记录字符串中被加数的字符数n=m; while(an!=0) n+; /n 记录字符串的总字符数if(a0=-) head0-data=(-1); /记录整数符号w=1; else head0-data=1; for(i=m-1;i=w;i-) if(ai!=,) /把字符转化为整数名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 15 页 - - - - - - -
13、- - 8 k+=(ai-0)*sum(l); l+; if(ai=,|i=w) currptr=(linklist *)malloc(sizeof(linklist); /把整数存到双向循环链表中currptr-data=k; currptr-next=head0; currptr-pre=head0-pre; head0-pre-next=currptr; head0-pre=currptr; head0=currptr; s+; /节点数加 1 k=0; /重新初始化k 和 l l=0; head0-pre-data*=s; /存储整数符号和节点数/与建第一个整数链表一样,建立第二个整数
14、链表head1 k=0;l=0; if(am+1=-) head1-data=(-1); m+; else head1-data=1; for(i=n-1;im;i-) if(ai!=,) k+=(ai-0)*sum(l); l+; if(ai=,|i=m+1) currptr=(linklist *)malloc(sizeof(linklist); currptr-data=k; currptr-next=head1; currptr-pre=head1-pre; head1-pre-next=currptr; head1-pre=currptr; head1=currptr; 名师资料总结
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年长整数数据结构课程设计 2022 年长 整数 数据结构 课程设计
限制150内