资源描述:
《线性表实现大整数运算实验报告》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、石家庄经济学院实验报告网址:www.jsjer.com实验名称:线性表实现大整数运算学号:413109030111实验日期:2015.03姓名:孙晓颖设备编号:实验室:152一、实验内容1.实现线性表链式结构的插入、删除、查找以及合并等操作的算法、编程实现;2.使用双向链表结构,设计并实现长整数数据类型的表示及相关运算二、概要设计ADTLongint{数据对象:D={ai,bj
2、ai,bj∈[0,1,2,3,4,5,6,7,8,9],i=1,2,…n,n>=0,j=0,1,2,…m,m>=0}数据关系:R={&&,i=1,2,…n}基本操作:shuru(D
3、uLinkList&L)操作结果:构造一个双向循环链表。shuchu(DuLinkListL)初始条件:双向链表s已存在。操作结果:将输入双向循环链表输出。shu(DuLinkListL)操作结果:将操作结果双向循环链表输出。add(DuLinkListLA,DuLinkListLB,DuLinkList&LC)初始条件:两双向循环链表p,q已存在。操作结果:将存放长整型数据的两双向链表进行加法运算,得到新的链表。minus(DuLinkListLA,DuLinkListLB,DuLinkList&LC)初始条件:两双向循环链表p,q已存在操作结果:两双向循环链表进行减法运算,得到新的链表。
4、mul(DuLinkListLA,DuLinkListLB,DuLinkList&LC)初始条件:两双向循环链表已存在。操作结果:将存放长整型数据的两双向链表进行乘法运算,得到新链表。}ADTLongint一、详细设计//----------------存储结构表示-------------typedefstructDuLNode{ElemTypedata;structDuLNode*prior;structDuLNode*next;}DuLNode,*DuLinkList;/*定义链表结构*///----------------基本操作的实现-----------voidshuru(DuL
5、inkList&L){//输入建立LALB链表无空头节点charch;intopra,i;DuLinkListp,q;printf("请输入长整数每3位加','输入以#结束");L=(DuLinkList)malloc(sizeof(DuLNode));//新建空链表L->prior=NULL;p=L;scanf("%d",&opra);//输入数据p->data=opra;ch=getchar();while(ch!='#')//读取未结束{q=(DuLinkList)malloc(sizeof(DuLNode));q->data=0;for(i=0;i<3;i++){ch=getch
6、ar();q->data=q->data*10+(ch-'0');}p->next=q;//连入链表q->prior=p;p=q;//后移ch=getchar();}p->next=NULL;printf("提示:输入成功!");}voidshuchu(DuLinkListL){//输出(无空头节点)DuLinkListp;intnumber,i;ElemTypee;printf("输出结果");number=0;//计算元素个数p=L;while(p!=NULL){number++;p=p->next;}p=L;for(i=1;i<=number;i++){e=p->data;//
7、对当前结点输出结果进行分情况讨论p=p->next;if(i==1)//对最高位为0{if(e!=0)printf("%d",e);}else//其他位分情况{if(e==0)//数值为0printf("000");else{if(e<10)//如果数值为1位printf("00%d",e);else{if(e<100)//如果数值为2位printf("0%d",e);elseprintf("%d",e);}}}//逗号if(i!=number){if(i!=1)printf(",");elseif(e!=0)printf(",");}}printf("输出成功!");}voidsh
8、u(DuLinkListL){//输出运算结果DuLinkListp;intnumber,i;ElemTypee;printf("输出结果");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