线性表实现大整数运算实验报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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={&&,i=1,2,…n}

基本操作:

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//其他位分情况

{

相关文档
最新文档