数据结构实习报告PPT课件下载推荐.ppt
《数据结构实习报告PPT课件下载推荐.ppt》由会员分享,可在线阅读,更多相关《数据结构实习报告PPT课件下载推荐.ppt(40页珍藏版)》请在冰豆网上搜索。
-1,0001,0001;
|(5)1,0001,0001;
输出“1”;
4一、需求分析|(6)-9999,9999,9999;
-9999,9999,9999;
输出“-1,9999,9999,9998”;
|(7)1,0000,9999,9999;
1;
输出1,0001,0000,0000.5二、概要设计|为实现上述程序功能,应以双向循环链表表示长整数。
为此,需要定义一个抽象数据类型。
|1.抽象数据类型定义为:
ADTOrderedList数据对象:
D=ai|aiint,i=1,2,.n,n06二、概要设计|基本操作:
init(&
a,digit4)|操作结果:
构造一个位数是digit4*4长整数。
pass(&
a,&
b,&
c)|初始条件:
a,b,c都已存在|操作结果:
c等于a和b的和。
nep(&
a)|初始条件:
a已存在。
|操作结果:
a变为输入参数的相反数。
7二、概要设计|printlong(&
按四位一组,分隔符为,的格式,在屏幕上输出a。
ston(&
S,&
把字符串形式的长数字赋给a。
ADTOrderedList8二、概要设计|2.本程序包含两个模块:
|1)主程序模块:
|voidmain()|选择操作:
1:
帮助。
|2:
加法。
|3:
减法。
|4:
乘法。
|5:
除法。
|6:
退出。
打印结果;
9三、详细设计|1.元素类型,结点类型,指针类型#defineNULL0|#include|#include|#include|typedefstructlongnode/*每个节点的结构*/intnum;
/*数字*/structlongnode*low1;
/*指向低一位节点*/structlongnode*high1;
/*指向高一位节点*/10三、详细设计|longnode;
|typedefstructxlong/*每个长整数的结构*/longnode*High;
/*每个长整数的最高节点*/longnode*Low;
/*每个长整数的最低节点*/intdigit4;
/*每个长整数的总位数(不包括高位的0)/4*/*xlong;
|intinit(xlong*a,intdigit4)intI;
/*.init.*/11三、详细设计|longnode|*j;
(*a)=(xlong)malloc(sizeof(structxlong);
/*为a的头结构申请空间,并赋初始值*/|(*a)High=NULL;
(*a)Low=NULL;
|(*a)-High=NULL;
(*a)-Low=NULL;
|(*a)-digit4=0for(i=0;
inum=0;
jhigh1=NULL;
j-low1=(*a)-High;
|if(*a)-High)(*a)Highhigh1=j;
|else|(*a)-Low=j;
(*a)-High=j;
(*a)-digit4+;
|13三、详细设计intpass(xlonga,xlongb,xlongc)intcf=0;
/*两个数字的相加*/longnode*a1=a-Low,*b1=b-Low,*c1=c-Low;
while(a1)c1-num=a1-num+b1-num+cf;
if(c1-num9999)cf=1;
/*如果产生进位(借位)*/c1-num-=10000;
elsecf=0;
a1=a1-high1;
b1=b1-high1;
c1=c1-high1;
returncf;
/*最高位的进位(借位)*/14三、详细设计|intpassa(xlonga,xlongb,xlongc)intcf=0;
/*两个数字的相减*/|longnode*a1=a-Low,*b1=b-Low,*c1=c-Low;
while(a1)c1-num=a1-num-b1-num-cf;
|if(c1-num9999)cf=1;
15三、详细设计|a1=a1high1;
b1=b1high1;
/*最高位的进位(借位)*/|intpassb(xlonga,xlongb,xlongc)intcf=0;
/*两个数字的相乘*/longnode*a1=a-Low,*b1=b-Low,*c1=c-Low;
while(a1)c1-num=a1-num*b1-num*cf;
16三、详细设计|elsecf=0;
/*最高位的进位(借位)*/intpassc(xlonga,xlongb,xlongc)intcf=0;
/*两个数字的相除*/longnode*a1=a-Low,*b1=b-Low,*c1=c-Low;
while(a1)c1-num=a1-num/b1-num/cf;
17三、详细设计|elsecf=0;
|a1=a1-high1;
/*最高位的进位(借位)*/|nep(xlonga)/*求a的相反数*/intcf=1;
/*因为求相反数是取反加一,所以这里cf=1;
*/longnode*a1=a-Low;
while(a1)|a1-num=9999-(a1-num)+cf;
18三、详细设计|if(a1-num9999)a1num=10000;
|elsecf=0;
return;
|printlong(xlonga)longnode*i=a-High;
/*打印长整数a*/if(i-num=5000)printf(-);
/*最高位(bit)=1表示负数,即用补码表示*/nep(a);
/*求反打印其绝对值*/while(i&
i-num=0)i=i-low1;
/*跳过最位的0*/if(i)printf(%d,i-num);
i=i-low1;
19三、详细设计|if(i)printf(“,”);
elseprintf(“0”);
/*a=0打0*/|while(i)printf(%04d,i-num);
if(i-low1)printf(,);
|intston(charin,xlongout)/*把字符串转化为数字赋给a*/intbit,i,jishu=1,num0=0;
longnode*j=out-Low;
20三、详细设计|i=strlen(in)-1;
while(i=0&
j)/*循环每一个字节*/bit=ini-0;
/*把字符形式的值赋给整数形式的bit*/if(bit=0&
bit1&
(jishu=10000|bit9)/*数字以外的字符*/j-num=num0;
j=j-high1;
/*存入一个节点*/num0=0;
jishu=1;
21三、详细设计|i-;
|if(num0)j-num=num0;
/*把最后一个没存入节点的数存入节点*/|for(;
j;
j=j-high1)j-num=0;
/*最位不足补0*/if(out-High-num=5000)return1;
/*如果最高位是1,返回1表示出*/if(in0=-)nep(out);
/*如果最后一个字符是则取反*/return0;
|intadd()char*a1,*b1;
/*加*/intdigit4,cf=0;
22三、详细设计|xlonga,b,c;
doprintf(Howmuchdigitsdoyouneed?
);
/*输入最多位数*/scanf(%d,&
digit4);
|while(digit4=0);
a1=(char*)malloc(digit4+1);
b1=(char*)malloc(digit4+1);
digit4=digit4/4+1;
a,digit4);
b,digit4);
c,digit4);
/*初始化a,b,c*/docf=0;
printf(Enter2number:
n);
23三、详细设计|scanf(%s,a1);
printf(+n);
|scanf(%s,b1);
cf|=ston(a1,a);
cf|=ston(b1,b);
|while(cf);
/*输入被加数和加数,如果转换出错,则重输*/|pass(a,b,c);
/*执行相加运算*/printlong(a);
printf(+);
/*打印结果*/printlong(b);
printf(=);
printlong(c);
printf(n);
bioskey(0);
24三、详细设计|intsubtract()/*减*/char*a1,*b1;
intdigit4,cf=0;
xlonga,b,c;
/*输入最多位*/scanf(%d,&
while(digit4=0);
25三、详细设计|init(&
scanf(%s,a1);
printf(-n);
while(cf);
/*输入被减数和减数,如果转换出错,则重输*/passa(a,b,c);
/*执行相减运算*/printlong(a);
printf(-);
/*打印结果*/26三、详细设计|printlong(b);
|intmultiply()/*乘*/char*a1,*b1;
27三、详细设计|while(digit4=0);
|printf(Enter2number: