线性表实现大整数运算实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
石家庄经济学院
实验报告
网址:
实验名称:线性表实现大整数运算
学号:413109030111 实验日期:2015.03 姓名:孙晓颖设备编号:
实验室:152
一、实验内容
1.实现线性表链式结构的插入、删除、查找以及合并等操作的算法、编程实现;
2.使用双向链表结构,设计并实现长整数数据类型的表示及相关运算
二、概要设计
ADT Longint {
数据对象:D={ai,bj|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={
基本操作:
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)
初始条件:两双向循环链表p,q已存在
操作结果:两双向循环链表进行减法运算,得到新的链表。
mul(DuLinkList LA, DuLinkList LB,DuLinkList &LC)
初始条件:两双向循环链表已存在。
操作结果:将存放长整型数据的两双向链表进行乘法运算,得到新链表。
} ADT Longint
三、详细设计
//----------------存储结构表示-------------
typedef struct DuLNode
{
ElemType data;
struct DuLNode *prior;
struct DuLNode *next;
}DuLNode,*DuLinkList; /*定义链表结构*/
//----------------基本操作的实现-----------
void 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=(DuLinkList)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;
ElemType 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位
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 shu(DuLinkList L){
//输出运算结果
DuLinkList p;
int number,i;
ElemType e;
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//其他位分情况
{