ImageVerifierCode 换一换
格式:DOCX , 页数:18 ,大小:41.38KB ,
资源ID:9515260      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/9515260.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(长整数四则运算.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

长整数四则运算.docx

1、长整数四则运算一 试验目的和要求1. 实验目的 了解线性表的逻辑结构特性,熟练掌握线性表的链式存储结构,熟练掌握线性表在链式存储结构上实现基本操作:查找,插入,删除的算法。能在实际应用中选用适合的链表结构。加深对链表的本质了解。2. 实验要求 利用双向链表实现长整数的存储,每个结点含一个整型变量。设计一个实现任意长的整数进行四则运算的演示程序。二 实验环境萨大苏打sdasd 本程序可以在98/2000/XP下运行,可以用VC+6.0执行三 程序的逻辑框图四, 程序源代码/*list.h*/#include#include#include#include#define TRUE 1#define

2、 FALSE 0#define OK 1#define ERROR 0#define INFEASLBLE -1#define OVERFLOW -2typedef int Status;typedef int ElemType;typedef struct DuLNode ElemType data; struct DuLNode *prior,*next;DuLNode,*DuLinkList; /构造一个空的双向循环线性表,L为头结点Status InitList_DuL(DuLinkList &L);/在L中确定第i个元素的位置指针p DuLinkList GetElemP_DuL(D

3、uLinkList L,int i);/在带头结点的双链循环线性表L中第i个位置之前插入元素e , /i的合法值为1=i=ListLength_DuL(L)+1Status ListInsert_DuL(DuLinkList &L,int i,ElemType e);/删除带头结点的双链循环线性表L中第i个元素,i的合法值为1=i=ListLength_DuL(L)Status ListDelete_DuL(DuLinkList &L,int i,ElemType &e);/若L为空表,则返回TRUE,否则返回FALSE bool ListEmpty_DuL(DuLinkList L);/线性

4、表L已存在,返回L中数据元素个数Status ListLength_DuL(DuLinkList L);/若线性表L已存在,将L置为空表Status ClearList_DuL(DuLinkList &L);/销毁线性表LStatus DestroyList_DuL(DuLinkList &L);/用e返回L中第i个数据元素的值void GetElem_DuL(DuLinkList L,int i,ElemType &e);/返回双向循环链表L中e出现的次数int Counter_DuL(DuLinkList L,ElemType e);/返回第n个e的在链表中位置 n的合法值为0=nnext

5、=L; L-prior=L; return OK;/InitList_DuLDuLinkList GetElemP_DuL(DuLinkList L,int i)/在L中确定第i个元素的位置指针p DuLinkList p; p=L; for(int j=0;jnext; return (p);/GetElemP_DuLStatus ListInsert_DuL(DuLinkList &L,int i,ElemType e)/在带头结点的双链循环线性表L中第i个位置之后插入元素e , /i的合法值为0=i DuLinkList s,p; if(idata=e; s-prior=p;s-next

6、=p-next; p-next-prior=s;p-next=s; return OK; /ListInsert_DuLStatus ListDelete_DuL(DuLinkList &L,int i,ElemType &e)/删除带头结点的双链循环线性表L中第i个元素,i的合法值为1=idata; p-prior-next=p-next; p-next-prior=p-prior; free(p); return OK;/ListDelete_DuLbool ListEmpty_DuL(DuLinkList L)/若L为空表,则返回TRUE,否则返回FALSE if(L-prior=L-n

7、ext)return TRUE; else return FALSE;/listElemty_DuLStatus ListLength_DuL(DuLinkList L)/线性表L已存在,返回L中数据元素个数 int i=0; DuLinkList p=NULL; for(p=L;p-next!=L;p=p-next) i+; return (i);/ListLength_DuLStatus ClearList_DuL(DuLinkList &L)/若线性表L已存在,将L置为空表 ElemType e; if(!ListEmpty_DuL(L) for(int i=1;i=ListLength

8、_DuL(L);i+) ListDelete_DuL(L,i,e); return OK; /ClearList_DuLStatus DestroyList_DuL(DuLinkList &L)/销毁线性表L ElemType e; if(!ListEmpty_DuL(L) for(int i=1;i=ListLength_DuL(L);i+) ListDelete_DuL(L,i,e); free(L); return OK;/DestroyList_DuLvoid GetElem_DuL(DuLinkList L,int i,ElemType &e)/用e返回L中第i个数据元素的值 if(

9、iListLength_DuL(L) printf(The Function GetElem_Sq() found Nothing in this positionn); else e=GetElemP_DuL(L,i)-data; /GetElem_DuLint Counter_DuL(DuLinkList L,ElemType e)/返回双向循环链表L中e出现的次数 int i; DuLinkList p=NULL; for(i=0,p=L;p-next!=L;p=p-next) if(p-data=e)i+; return i+1;/Counter_DuLint Position_DuL

10、(DuLinkList L,int n,ElemType e)/返回第n个e的在链表中位置 n的合法值为0n=Counter_DuL( L,n) int i,j; DuLinkList p=NULL; if(nCounter_DuL(L,e)return OVERFLOW; else for(i=0,j=0,p=L-next;p!=L;p=p-next) j+; if(p-data=;)i+; if(i=n)break; return (j); /else/Position_DuL/*decride.cpp*/#includevoid decride_d() printf(*n); print

11、f(*注意! 请严格按照国家对于长整数的表示习惯: n); printf(*即每四位一组;组间用,隔开;每个数以;结束 n); printf(*否则可能导致系统运行出错 ! n); printf(*n); printf(输入N:退出,按任意键继续,回车进行计算!n); printf(*n);/*ExChange.cpp*/#includefunction.h #includevoid exchange(DuLinkList &L,int &j) int i=0,sum=0; DuLinkList t; ElemType e; for(i=j,sum=0;i0;i-) t=GetElemP_Du

12、L(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*/#includefunction.h/*/*操作函数operate(DuLinkList )*/*/void operate(DuLinkList p) DuLinkList q; int k=0,i=0,n=0; k=Counte

13、r_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;inext-data=-)f0=-; /判断正负数 else f0=+; for(i=1;inext-data=-) fi=-; else fi=+; for(q=p,i=0;inext; for(;q!=GetElemP_DuL(p,ji);q=q-next) if(q-data=,)n+; numi=n+1; output(Pa

14、ck_Up(calculate(p,j,f,num,k); free(j);free(f);free(num); DestroyList_DuL(p); /operate/*-*/DuLinkList calculate(DuLinkList p,int*j,char *f,int *num,int k) /计算 DuLinkList r; int sum=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;ik;i+) if(numidata=,)ji-=1;

15、sum+=t*GetElemP_DuL(p,ji-1)-data; numi-; /for for(i=i-1;i=0;i-) ji-=1; if(sum+JW)-10000)ListInsert_DuL(r,0,sum+JW);JW=0; else ListInsert_DuL(r,0,(sum+JW)%10000);JW=(sum+JW)/10000; /for return r;/calculate /*-*/DuLinkList Pack_Up(DuLinkList r) /整理链表r ElemType e; int i=0; for(i=1;idata=0) ListDelete_D

16、uL(r,1,e); else break; /for 清零。 if(GetElemP_DuL(r,1)-datadata=-; for(i=ListLength_DuL(r);i0;i-) GetElemP_DuL(r,i)-data*=(-1); /if for(i=ListLength_DuL(r);i1;i-) if(GetElemP_DuL(r,i)-datadata-; GetElemP_DuL(r,i)-data+=10000; /for for(i=1;idata=0) ListDelete_DuL(r,1,e); else break; /for 清零。 return r;/

17、Pack_Up/*-*/ void output(DuLinkList r) int x=0,i=0; if(GetElemP_DuL(r,0)-data=-)printf(-); for(i=1;idata); for(int j=0;jdata); if(GetElemP_DuL(r,i)-next!=r)printf(,); /for DestroyList_DuL(r);/output/*-*/int max(int *num,int k ) /返回最大值 int i=0,a=0,b=0; a=num0; b=num1; for(i=1;ik;i+) if(a=b) a=b; b=nu

18、mi+1; return a;/max/*-*/int counter(int a) /计算整数位数 if(1000=a&a10000) return 4; else if(100=a&a1000)return 3; else if(10=a&a100)return 2; else if( 0=a&a10)return 1;/counter/*Read.cpp*/#includefunction.h/*/*读入函数read_r()*/*/DuLinkList read_r() DuLinkList L; ElemType e; int i=0,j=0,n=0; InitList_DuL(L);

19、 for(j=0;(e=getchar()!=n;) if(e=,|e=;)exchange(L,j); ListInsert_DuL(L, ListLength_DuL(L),(int)e); if(e!=,&e!=;&e!=-)+j; return(L);/read_r/*main.cpp*/#includefunction.h#includeint main() char ch; decride_d(); do printf(请输入长整数:.n); operate(read_r(); printf(n); system(Pause); decride_d(); fflush( stdin ); while(ch=getch()!=N&ch!=n); return 0;五. 实验数据和结果分析六. 总结通过本实验,对链表的逻辑结构特性有一定的了解,对线性表的链式存储结构有比较深刻的印象

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

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