版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、石家庄经济学院实 验 报 告网址:实验名称:线性表实现大整数运算学号:413109030111实验日期:2015.03姓名:孙晓颖设备编号:实验室:152一、 实验内容1. 实现线性表链式结构的插入、删除、查找以及合并等操作的算法、编程实现;2. 使用双向链表结构,设计并实现长整数数据类型的表示及相关运算二、 概要设计ADT Longint 数据对象:D=ai,bj|ai,bj0,1,2,3,4,5,6,7,8,9,i=1,2,n,n>=0,j=0,1,2,m,m>=0数据关系:R=<ai,ai+1>&&<ai+1,ai>,i=1,2,n基本
2、操作: shuru(DuLinkList &L) 操作结果:构造一个双向循环链表。 shuchu(DuLinkList L) 初始条件:双向链表s已存在。 操作结果:将输入双向循环链表输出。 shu(DuLinkList L) 操作结果:将操作结果双向循环链表输出。 add(DuLinkList LA, DuLinkList LB,DuLinkList &LC)初始条件:两双向循环链表p,q已存在。 操作结果:将存放长整型数据的两双向链表进行加法运算, 得到新的链表。 minus(DuLinkList LA, DuLinkList LB,DuLinkList &LC)初
3、始条件:两双向循环链表p,q已存在 操作结果:两双向循环链表进行减法运算,得到新的链表。mul(DuLinkList LA, DuLinkList LB,DuLinkList &LC)初始条件:两双向循环链表已存在。 操作结果:将存放长整型数据的两双向链表进行乘法运算,得到新链表。 ADT Longint三、 详细设计/-存储结构表示-typedef struct DuLNode ElemType data; struct DuLNode *prior; struct DuLNode *next;DuLNode,*DuLinkList; /*定义链表结构*/ /-基本操作的实现-voi
4、d shuru(DuLinkList &L)/输入 建立LA LB 链表无空头节点char ch;int opra,i;DuLinkList p,q; printf("请输入长整数 每3位加',' 输入以#结束 n"); L=(DuLinkList)malloc(sizeof(DuLNode);/新建空链表 L->prior=NULL; p=L; scanf("%d",&opra);/输入数据 p->data=opra;ch=getchar();while(ch!='#')/读取未结束q=(Du
5、LinkList)malloc(sizeof(DuLNode);q->data =0;for (i=0;i<3;i+)ch=getchar();q->data =q->data * 10 +(ch-'0');p->next =q;/连入链表q->prior =p;p=q;/后移ch=getchar();p->next =NULL; printf("提示:输入成功 ! n"); void shuchu(DuLinkList L)/输出 (无空头节点) DuLinkList p; int number,i; ElemTy
6、pe e; printf(" 输出结果n"); number=0;/计算元素个数 p=L; while(p!=NULL) number+; p=p->next; p=L; for(i=1;i<=number;i+) e=p->data;/对当前结点输出结果进行分情况讨论 p=p->next; if (i=1) /对最高位为0 if(e!=0) printf("%d",e); else/其他位分情况 if(e=0) /数值为0 printf("000");else if(e<10) /如果数值为1位 pri
7、ntf("00%d",e); else if(e<100)/如果数值为2位 printf("0%d",e); else printf("%d",e); /逗号 if(i!=number) if (i!=1) printf(","); else if (e!=0) printf(","); printf(" n 输出成功 !n ");void shu(DuLinkList L)/输出运算结果 DuLinkList p; int number,i; ElemType e;
8、printf(" 输出结果n"); number=0;/计算元素个数 p=L; while(p->next !=NULL) number+; p=p->next; p=L->next ; for(i=1;i<=number;i+) e=p->data;/对当前结点输出结果进行分情况讨论 p=p->next; if (i=1) /对最高位为0 if(e!=0) printf("%d",e); else/其他位分情况 if(e=0) /数值为0 printf("000");else if(e<10
9、) /如果数值为1位 printf("00%d",e); else if(e<100)/如果数值为2位 printf("0%d",e); else printf("%d",e); /逗号 if(i!=number) if (i!=1) printf(","); else if (e!=0) printf(","); printf(" n 输出成功 !n ");/加法void add(DuLinkList LA, DuLinkList LB,DuLinkList &
10、;LC) DuLinkList p,q,m,n,tail; ElemType tempa,tempb,tempc,temp;printf("提示: 加法运算 n"); p=LA; while (p->next !=NULL)/指向LA尾p=p->next ;q=LB; while (q->next!=NULL)/指向LB尾q=q->next ; /新建链表LC LC=(DuLinkList)malloc(sizeof(DuLinkList); LC->prior=NULL;m=(DuLinkList)malloc(sizeof(DuLinkLi
11、st);tail=m;temp=0;/进位 while( (p!=NULL)|(q!=NULL) )/当短链结束后,继续计算,视为当前结点运算数为0if(p!=NULL) tempa=p->data;else tempa=0; if(q!=NULL) tempb=q->data;else tempb=0;tempc=tempa+tempb+temp;if (tempc /1000 =0)/若不需要进位 temp=0; if (tempc/1000 >0 )/若需要进位 temp=1; tempc=tempc % 1000; n=(DuLinkList)malloc(sizeo
12、f(DuLinkList);/新建节点 m->data =tempc; n->next=m;m->prior=n;m=n; p=p->prior;/向前移一位q=q->prior;/向前移一位 tail->next=NULL; LC->next=m->next; m->next->prior =LC; free(m); shu(LC);/减法void minus(DuLinkList LA, DuLinkList LB,DuLinkList &LC) DuLinkList p,q,m,n,tail; ElemType temp
13、a,tempb,tempc,temp;printf("提示: 减法运算 n"); p=LA;/指向LA头结点 while (p->next !=NULL) p=p->next ;q=LB;/指向LB头结点 while (q->next !=NULL)q=q->next ;/新建链表LC LC=(DuLinkList)malloc(sizeof(DuLinkList); LC->prior=NULL; m=(DuLinkList)malloc(sizeof(DuLinkList);tail=m;temp=0;/借位 while( (p!=NULL
14、)|(q!=NULL) )/当短链结束后,继续计算,视为当前结点运算数为0if(p!=NULL) tempa=p->data;else tempa=0; if(q!=NULL) tempb=q->data;else tempb=0;tempc=tempa-tempb+temp; if (tempc >=0 )/若不需要借位 temp=0; if (tempc<0 )/若需要借位 temp=-1; tempc=tempc+1000; n=(DuLinkList)malloc(sizeof(DuLinkList);/新建节点 m->data =tempc;n->
15、next =m;m->prior=n;m=n;p=p->prior;/向前移一位q=q->prior;/向前移一位 tail->next=NULL; LC->next=m->next ; m->next->prior =LC;free(m); shu(LC);/乘法void mul(DuLinkList LA,DuLinkList LB,DuLinkList &LC) DuLinkList p,q,m,n,tail; int temp,s; p=LA; q=LB;LC=(DuLinkList)malloc(sizeof(DuLNode);
16、/新建LC->prior=NULL;LC->next=NULL;m=(DuLinkList)malloc(sizeof(DuLNode);m->next=NULL; tail=m; /末尾的值m->prior=NULL;m->data=0;n=m;while (q->next!=NULL) /乘数移至最后一个节点q=q->next ;temp=0; /进位while (q!=NULL) /乘数未结束m=tail;/LC尾部p=LA;while (p->next!=NULL)/被乘数移至最后一个节点p=p->next ;while (p!=N
17、ULL) /被乘数未结束if(m=NULL) m=(DuLinkList)malloc(sizeof(DuLNode);m->prior=NULL; m->data=(p->data*q->data+temp)%1000; temp=(p->data*q->data+temp)/1000; /进位n->prior=m;/相连m->next=n; n=m;m=m->prior ;/向前挪else s=m->data+p->data*q->data+temp; /存放相乘的数与需要进位的和m->data=s%1000;
18、if (m->next!=NULL) temp=s/1000; /判断是否是第一次运算 else temp=(p->data*q->data)/1000+temp; n=m;m=m->prior; p=p->prior ; /被乘数向前挪一位if (temp!=0) /判断进位m=(DuLinkList)malloc(sizeof(DuLNode);m->data=temp;m->prior=NULL;n->prior =m;m->next=n;n=m;m=m->prior;temp=temp/1000; /判断进位值是否大于1000
19、q=q->prior ; /乘数向前挪tail=tail->prior ; /错位相加LC->next=n; /与头节点相连n->prior=LC; shu(LC);四、 程序的调试与测试图1 双向链表1的建立图2 双向链表2的建立图3 加法运算图4 减法运算图5 乘法运算 图一表示输入数213100234链表的建立。以字符串形式输入转化为相应数值,保存至节点中。图二表示输入数100234456链表的建立,过程同链表一。图三表示213100234、100234456两数的加法运算结果,在进行加法运算的过程中,要从两链表从后往前对应节点数值相加,每个结点中只存放三位数字,
20、当相加的结果大于或者等于1000时,要进位,对该结果进行取余,结果即为该结点数值,整除后的结果即为当前进位数值。注意输出的过程中,零输出与逗号输出。图四表示213100234、100234456两数的减法运算结果,在进行减法运算的过程中,同样是要从两链表的尾部向前进行,在减法的过程中,若被减数大于减数,要向前一节点数值借位,同时前一结点数值减一,当减法结束后,输出时要从第一个非零数开始输出,注意零输出。图五表示213100234、100234456两数的乘法运算结果,在进行乘法运算的过程中,同样是要从两链表的尾部向前进行,乘数的最后一结点与被乘数的每一结点数值进行乘法运算,之后被乘数结点向前移位,再次与被乘数的每一节点进行乘法运算,乘数继续前移,直到移至第一个结点为止,同时将相乘结果进行错位相加,在乘法运算的过程中,当相乘所得大于等于1000时,要进位,对该结果取余,取余后的结果即为该结点保存数值,整除后的结果即为要进位的数,若输出的过程中注意零输出。五
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年度足浴中心员工劳动合同与顾客服务标准
- 2025年度洗浴场所员工薪酬福利保障合同
- 2025年度车库购买及车位租赁与转让合同
- 材料采购包安装合同
- 施工现场易燃材料使用与控制策略
- 施工日志填写样本建筑物绿化工程施工
- 科技报告中的创新点突出方法
- 专业分包合同书范本
- 交通银行资金借款合同样本
- 个人向企业贷款规范合同
- 律师办理刑事案件基本流程及风险防范课件
- TQGCML 2624-2023 母婴级空气净化器 洁净空气和净化等级技术要求
- 潮汕民俗文化科普知识讲座
- 睡眠障碍护理查房课件
- 金融工程.郑振龙(全套课件560P)
- 英语演讲技巧和欣赏课件
- 【员工关系管理研究国内外文献综述2800字】
- 六年级语文下册阅读及参考答案(12篇)
- 苏教版(苏少版)九年级美术下册全册课件
- 2022年江苏省盐城市中考英语试题及参考答案
- 中国文化简介英文版(ChineseCultureintroduction)课件
评论
0/150
提交评论