- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
课程名称:数据结构教师姓名:刘欢学生姓名: 赵庆然学号: 1514020428实习一线性表及其应用题目:长整数运算需求分析【问题描述】设计一个程序实现两个任意长的整数求和运算。【基本要求】利用双向循环链表实现长整数的存储,每个结点含一个整型变量。任何整型变量的范围是:-(215-1)~(215-1)。输入和输出形式:按中国对于长整数的表示习惯,每四位一组,组间用逗号隔开。【测试数据】(1)0;0;应输出“0”。(2)–2345,6789;-7654,3211;应输出“-1,0000,0000”。(3)–9999,9999;1,0000,0000,0000;应输出“9999,0000,0001”。(4)1,0001,0001;-1,0001,0001;应输出“0”。(5)1,0001,0001;-1,0001,0000;应输出“1”。设计设计思想(1)存储结构:结点以及循环双向链表(2)主要算法基本思想:每个节点中可以存放的最大整数为215-1=32767,才能保证两数相加不会溢出。但若这样存,就要求用32768进制,这样与十进制的转换就会十分麻烦。因此,我们采用在每个节点存十进制的四位数,即不超过9999的非负整数,整个链表视为万进制数。除此以外,我们在读入数据时用0和1来判断记录正负,从表头读入数据,从表尾输出数据。最后是加法运算这部分,其中心思想实:先比较长度,以确定哪个数减去哪个数;组与组之间采用万进制,并且设立进位数,借位数,从而实现题目要求。设计表示(1)函数调用关系图 main→ListInisiate→InputNumber→LongIntAdd(2)函数接口规格说明 void ListInisiate(DSLNode **head); /*循环双向链表的初始化*/ int ListInsert(DSLNode *head,int i,DataType x); /*插入运算*/int ListLength(DSLNode *head); /*求当前循环双向链表的长度*/int InputNumber(DSLNode *head); /*读取输入的数字*/void OutPutNumber(DSLNode *head,int sign); /*从表尾输出数据元素*/int LongIntAdd(DSLNode *head1,DSLNode *head2,DSLNode *head3); /*长整数的加运算*/实现注释(1)成功地利用了双向循环链表实现了任意长度整数的存储。(2)实现了按中国对于长整数的表示习惯,每四位一组,组间用逗号隔开。(3)实现了输入两个任意长度的正整数,可以得到正解。详细设计typedef struct Node /*定义节点*/{ int data; struct Node* prior; struct Node* next;}DSLNode;void ListInisiate(DSLNode **head) /*循环双向链表的初始化*/{ if((*head=(DSLNode *)malloc(sizeof(DSLNode)))==NULL)exit(0); (*head)-prior=*head; (*head)-next=*head; //return 1;}int ListInsert(DSLNode *head,int i,DataType x) /*插入运算*/{ DSLNode *p,*s; int j; p=head-next; j=0; while(p!=headji) { p=p-next; j++; } if(j!=i) { printf(插入位置参数不合法\n); return 0; } if((s=(DSLNode *)malloc(sizeof(DSLNode)))==NULL)exit(0); s-data=x; s-prior=p-prior; p-prior-next=s; s-next=p; p-prior=s; return 1;}int ListLength(DSLNode *head) /*求当前循环双向链表的长度*/{ DSLNode *p=head; int length=0; while(p-next!=head) { length++; p=p-next; } return length;}int InputNumber(DSLNode *head) /*读取输入的数字*/{ int input,i=0; char c;scanf(%d%c,input,c); //读入数据时负数用0表示符号,正数用1表示符号 while(1) {
您可能关注的文档
最近下载
- 水库堤坝工程预算方案(3篇).docx VIP
- 《与同学们谈地理》 课件 2025七年级地理上册人教版.pptx VIP
- 100ASK_IMX6ULL-QEMU使用及开发教程_高级用户使用手册.pdf VIP
- 饮食配餐食物交换份法.ppt VIP
- 设备监理师《设备监理基础知识和相关法规》试题及答案.doc VIP
- 贵州省2025年高职院校分类考试招生中职生文化综合英语试题.docx VIP
- 2025年秋统编版语文三年级上册全册同步课件(课标版).pptx
- 南京大学普通天文学课件01天文学史.pptx VIP
- Roland罗兰乐器INTEGRA-7 拥有真实技术的音源INTEGRA-7 说明书用户手册.pdf
- 助学贷款申请表.doc VIP
文档评论(0)