长整数四则运算Word格式文档下载.docx

上传人:b****7 文档编号:22651302 上传时间:2023-02-05 格式:DOCX 页数:18 大小:41.38KB
下载 相关 举报
长整数四则运算Word格式文档下载.docx_第1页
第1页 / 共18页
长整数四则运算Word格式文档下载.docx_第2页
第2页 / 共18页
长整数四则运算Word格式文档下载.docx_第3页
第3页 / 共18页
长整数四则运算Word格式文档下载.docx_第4页
第4页 / 共18页
长整数四则运算Word格式文档下载.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

长整数四则运算Word格式文档下载.docx

《长整数四则运算Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《长整数四则运算Word格式文档下载.docx(18页珍藏版)》请在冰豆网上搜索。

长整数四则运算Word格式文档下载.docx

StatusListInsert_DuL(DuLinkList&

L,inti,ElemTypee);

//删除带头结点的双链循环线性表L中第i个元素,i的合法值为1<

=ListLength_DuL(L)

StatusListDelete_DuL(DuLinkList&

L,inti,ElemType&

e);

//若L为空表,则返回TRUE,否则返回FALSE

boolListEmpty_DuL(DuLinkListL);

//线性表L已存在,返回L中数据元素个数

StatusListLength_DuL(DuLinkListL);

//若线性表L已存在,将L置为空表

StatusClearList_DuL(DuLinkList&

//销毁线性表L

StatusDestroyList_DuL(DuLinkList&

//用e返回L中第i个数据元素的值

voidGetElem_DuL(DuLinkListL,inti,ElemType&

//返回双向循环链表L中e出现的次数

intCounter_DuL(DuLinkListL,ElemTypee);

//返回第n个e的在链表中位置n的合法值为0<

=n<

=Counter_DuL(L,n)

intPosition_DuL(DuLinkListL,intn,ElemTypee);

/*function.cpp*/

#include"

list.h"

/**************************************************************************************************/

/****************************函数声明**************************************************************/

DuLinkListcalculate(DuLinkListp,int*j,char*f,int*num,intk);

voidoutput(DuLinkListr);

DuLinkListPack_Up(DuLinkListr);

//整理链表r

voidexchange(DuLinkList&

L,int&

j);

DuLinkListread_r();

voidoperate(DuLinkListp);

voiddecride_d();

intcounter(inta);

//计算整数位数

intmax(int*num,intk);

//返回最大值

/*list.cpp*/

L)

{//构造一个空的双向循环线性表,L为头结点

L=(DuLinkList)malloc(sizeof(DuLNode));

if(!

L)exit(OVERFLOW);

L->

next=L;

prior=L;

returnOK;

}//InitList_DuL

DuLinkListGetElemP_DuL(DuLinkListL,inti)

{//在L中确定第i个元素的位置指针p

DuLinkListp;

p=L;

for(intj=0;

j<

i;

j++)

p=p->

next;

return(p);

}//GetElemP_DuL

L,inti,ElemTypee)

{//在带头结点的双链循环线性表L中第i个位置之后插入元素e,

//i的合法值为0<

=i

DuLinkLists,p;

if(i<

0)returnOVERFLOW;

else

{

p=GetElemP_DuL(L,i);

if(!

(p))

returnERROR;

s=(DuLinkList)malloc(sizeof(DuLNode));

s)returnERROR;

s->

data=e;

prior=p;

s->

next=p->

p->

next->

prior=s;

p->

next=s;

returnOK;

}

}//ListInsert_DuL

e)

{//删除带头结点的双链循环线性表L中第i个元素,i的合法值为1<

(p=GetElemP_DuL(L,i))||p==L)

returnERROR;

e=p->

data;

p->

prior->

prior=p->

prior;

free(p);

}//ListDelete_DuL

boolListEmpty_DuL(DuLinkListL)

{//若L为空表,则返回TRUE,否则返回FALSE

if(L->

prior==L->

next)returnTRUE;

elsereturnFALSE;

}//listElemty_DuL

StatusListLength_DuL(DuLinkListL)

{//线性表L已存在,返回L中数据元素个数

inti=0;

DuLinkListp=NULL;

for(p=L;

next!

=L;

p=p->

next)

i++;

return(i);

}//ListLength_DuL

{//若线性表L已存在,将L置为空表

ElemTypee;

ListEmpty_DuL(L))

for(inti=1;

i<

=ListLength_DuL(L);

i++)

ListDelete_DuL(L,i,e);

}//ClearList_DuL

{//销毁线性表L

free(L);

}//DestroyList_DuL

{//用e返回L中第i个数据元素的值

0||i>

ListLength_DuL(L))

printf("

TheFunctionGetElem_Sq()foundNothinginthisposition\n"

);

e=GetElemP_DuL(L,i)->

}//GetElem_DuL

intCounter_DuL(DuLinkListL,ElemTypee)

{//返回双向循环链表L中e出现的次数

inti;

for(i=0,p=L;

if(p->

data==e)i++;

returni+1;

}//Counter_DuL

intPosition_DuL(DuLinkListL,intn,ElemTypee)

{//返回第n个e的在链表中位置n的合法值为0<

n<

inti,j;

if(n<

1||n>

Counter_DuL(L,e))returnOVERFLOW;

else

for(i=0,j=0,p=L->

p!

{

j++;

if(p->

data=='

;

'

)i++;

if(i==n)break;

}

return(j);

}//else

}//Position_DuL

/*decride.cpp*/

voiddecride_d()

printf("

*************************************************************\n"

*注意!

!

请严格按照国家对于长整数的表示习惯:

\n"

*即每四位一组;

组间用\'

\'

隔开\'

\'

每个数以\"

\"

结束\n"

*否则可能导致系统运行出错!

**************************************************************\n"

输入N:

退出,按任意键继续,回车进行计算!

\n"

}

/*ExChange.cpp*/

function.h"

math.h>

j)

inti=0,sum=0;

DuLinkListt;

for(i=j,sum=0;

i>

0;

i--)

t=GetElemP_DuL(L,ListLength_DuL(L));

sum+=((int)t->

data-48)*(int)pow(10.0,(double)(j-i));

ListDelete_DuL(L,ListLength_DuL(L),e);

ListInsert_DuL(L,ListLength_DuL(L),sum);

j=0;

}//exchange

/*Operration.cpp*/

/****************************操作函数operate(DuLinkList)******************************************/

voidoperate(DuLinkListp)

DuLinkListq;

intk=0,i=0,n=0;

k=Counter_DuL(p,'

int*j=(int*)malloc(k*sizeof(int));

char*f=(char*)malloc(k*sizeof(char));

int*num=(int*)malloc(k*sizeof(int));

for(i=0;

k;

)//分号的位置

j[i-1]=Position_DuL(p,++i,'

if(p->

-'

)f[0]='

//判断正负数

elsef[0]='

+'

for(i=1;

if(GetElemP_DuL(p,j[i-1])->

f[i]='

elsef[i]='

for(q=p,i=0;

n=0;

q=q->

for(;

q!

=GetElemP_DuL(p,j[i]);

q=q->

if(q->

'

)n++;

num[i]=n+1;

output(Pack_Up(calculate(p,j,f,num,k)));

free(j);

free(f);

free(num);

DestroyList_DuL(p);

}//operate

/*------------------------------------------------------------------------------------------------------*/

DuLinkListcalculate(DuLinkListp,int*j,char*f,int*num,intk)//计算

DuLinkListr;

intsum=0,i=0,t=0,m=0,ma=0,JW=0;

InitList_DuL(r);

for(JW=0,m=0,ma=max(num,k);

m<

=ma;

m++)

for(i=0,sum=0;

if(num[i]<

=0);

else

{

t=(f[i]=='

?

-1:

1);

if(GetElemP_DuL(p,j[i]-1)->

)j[i]-=1;

sum+=t*GetElemP_DuL(p,j[i]-1)->

num[i]--;

}

}//for

for(i=i-1;

=0;

j[i]-=1;

if((sum+JW)<

10000&

&

(sum+JW)>

-10000){ListInsert_DuL(r,0,sum+JW);

JW=0;

else{ListInsert_DuL(r,0,(sum+JW)%10000);

JW=(sum+JW)/10000;

}//for

returnr;

}//calculate

DuLinkListPack_Up(DuLinkListr)//整理链表r

ListLength_DuL(r);

if(GetElemP_DuL(r,1)->

data==0)

ListDelete_DuL(r,1,e);

elsebreak;

}//for清零。

if(GetElemP_DuL(r,1)->

data<

0)

GetElemP_DuL(r,0)->

data='

for(i=ListLength_DuL(r);

GetElemP_DuL(r,i)->

data*=(-1);

}//if

for(i=ListLength_DuL(r);

1;

if(GetElemP_DuL(r,i)->

GetElemP_DuL(r,i-1)->

data--;

data+=10000;

}//Pack_Up

/*------------------------------------------------------------------------------------------------------*/

voidoutput(DuLinkListr)

intx=0,i=0;

if(GetElemP_DuL(r,0)->

)printf("

-"

=ListLength_DuL(r);

if(i!

=1)

x=counter(GetElemP_DuL(r,i)->

data);

for(intj=0;

4-x;

printf("

0"

%d"

GetElemP_DuL(r,i)->

=r)printf("

"

DestroyList_DuL(r);

}//output

intmax(int*num,intk)//返回最大值

inti=0,a=0,b=0;

a=num[0];

b=num[1];

if(a<

=b)

a=b;

b=num[i+1];

returna;

}//max

intcounter(inta)//计算整数位数

{

if(1000<

=a&

a<

10000)return4;

elseif(100<

1000)return3;

elseif(10<

100)return2;

elseif(0<

10)return1;

}//counter

/*Read.cpp*/

/****************************读入函数read_r()******************************************************/

DuLinkListread_r()

DuLinkListL;

inti=0,j=0,n=0;

InitList_DuL(L);

for(j=0;

(e=getchar())!

='

\n'

if(e=='

||e=='

)exchange(L,j);

ListInsert_DuL(L,ListLength_DuL(L),(int)e);

if(e!

e!

)++j;

return(L);

}//read_r

/*main.cpp*/

conio.h>

intmain()

charch;

decride_d();

do

请输入长整数:

....\n"

operate(read_r());

system("

Pause"

fflush(stdin);

}while((ch=getch())!

N'

ch!

n'

return0;

五.实验数据和结果分析

六.总结

通过本实验,对链表的逻辑结构特性有一定的了解,对线性表的链式存储结构有比较深刻的印象

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 法学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1