数据结构课程设计汇总Word文档下载推荐.docx
《数据结构课程设计汇总Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计汇总Word文档下载推荐.docx(13页珍藏版)》请在冰豆网上搜索。
![数据结构课程设计汇总Word文档下载推荐.docx](https://file1.bdocx.com/fileroot1/2022-10/8/597c52d3-e39e-4a6c-a381-562c4a0a7022/597c52d3-e39e-4a6c-a381-562c4a0a70221.gif)
为此,需要定义一个抽象数据类型。
1.抽象数据类型定义为:
16
/1
ADTOrderedList{
数据对象:
D={ai|ai∈int,i=1,2,...n,n≥0}
基本操作:
init(&
a,digit4)
操作结果:
构造一个位数是digit4*4长整数。
pass(&
a,&
b,&
c)
初始条件:
a,b,c都已存在
c等于a和b的和。
nep(&
a)
a已存在。
a变为输入参数的相反数。
printlong(&
初始条件:
按四位一组,分隔符为?
的格式,在屏幕上输出a。
ston(&
S,&
a)初始条件:
把字符串形式的长数字赋给a。
}ADTOrderedList
2.本程序包含两个模块:
1)主程序模块:
Voidmain(){
选择操作:
1:
帮助。
2:
加法。
3:
减法。
/2
4:
乘法。
5:
除法。
6:
退出。
打印结果;
}
三、详细设计
1.元素类型,结点类型,指针类型
#defineNULL0
#include<
stdio.h>
stdlib.h>
conio.h>
typedefstructlongnode{/*每个节点的结构*/
intnum;
/*数字*/
/*指向低一位节点*/
structlongnode*low1;
structlongnode*high1;
/*指向高一位节点*/
}longnode;
typedefstructxlong{/*每个长整数的结构*/
/*每个长整数的最高节点*/longnode*High;
/*每个长整数的最低节点*/
longnode*Low;
intdigit4;
/*每个长整数的总位数(不包括高位的0)/4*/
}*xlong;
intinit(xlong*a,intdigit4){
/3
intI;
/*.init.*/
longnode*j;
(*a)=(xlong)malloc(sizeof(structxlong));
/*为a的头结构申请空间,并赋初始值*/
(*a)>
High=NULL;
(*a)->
Low=NULL;
(*a)->
digit4=0;
for(i=0;
i<
digit4;
i++){/*申请digit4个节点,初始化*/
j=(longnode*)malloc(sizeof(longnode));
j->
num=0;
high1=NULL;
j->
low1=(*a)->
High;
if((*a)->
High)(*a)->
High->
high1=j;
else
Low=j;
High=j;
digit4++;
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->
num>
9999){
/4
cf=1;
/*如果产生进位(借位)*/
c1->
num-=10000;
}else{cf=0;
a1=a1->
high1;
b1=b1->
c1=c1->
returncf;
/*最高位的进位(借位)*/
intpassa(xlonga,xlongb,xlongc){
*//*两个数字的相减intcf=0;
longnode*a1=a->
num-b1->
num-cf;
借位if(c1->
9999){cf=1;
/*如果产生进位()*/
c1->
}
)*/(最高位的进位/*returncf;
借位}
intpassb(xlonga,xlongb,xlongc){
*/两个数字的相乘intcf=0;
/*
longnode
*a1=a->
/5
num*b1->
num*cf;
9999){cf=1;
num=10000;
intpassc(xlonga,xlongb,xlongc){
*/intcf=0;
/*两个数字的相除
while(a1){c1->
num/b1->
num/cf;
}}}else{cf=0;
returncf;
*/
的相反数求/*nep(xlonga){a/*因为求相反数是取反加一,所以这里intcf=1;
cf=1;
*/
/6
while(a1)
{a1->
num=9999-(a1->
num)+cf;
if(a1->
9999){a1->
else{cf=0;
}a1=a1->
return;
printlong(xlonga){
a*/longnode*i=a->
/*打印长整数
if(i->
=5000){
*/表示负数,即用补码表示printf(-);
/*最高位(bit)=1*/
/*求反打印其绝对值nep(a);
}while(i&
&
i->
num==0)i=i->
low1;
/*跳过最位的0*/
if(i){printf(%d,i->
num);
i=i->
);
”“,if(i)printf(
}elseprintf(“0*/打0”);
/*a=0
while(i){printf(d,i->
if(i->
low1)
printf(,);
i=i->
}}
/7
intston(charin[],xlongout){/*把字符串转化为数字赋给a*/
intbit,i,jishu=1,num0=0;
longnode*j=out->
i=strlen(in)-1;
while(i>
=0&
j){
/*循环每一个字节*/
bit=in[i]-‘0'
;
/*把字符形式的值赋给整数形式的bit*/
if(bit>
bit<
=9){num0+=jishu*bit;
/*加进num0*/
jishu*=10;
/*基数自乘10*/
if(jishu>
1&
(jishu>
=10000||bit<
0||bit>
9)){/*数字以外的字符*/
num=num0;
j=j->
/*存入一个节点*/
num0=0;
jishu=1;
i--;
if(num0)
{j->
}/*把最后一个没存入节点的数存入节点
for(;
j;
high1)j->
/*最位不足补0*/
if(out->
=5000)
return1;
/*如果最高位是1,返回1表示出*/
if(in[0]=='
-'
)nep(out);
/*如果最后一个字符是'
-'
则取反*/return0;
/8
intadd(){char*a1,*b1;
/*加*/
intdigit4,cf=0;
xlonga,b,c;
do{printf(Howmuchdigitsdoyouneed?
/*输入最多位数*/
scanf(%d,&
digit4);
}while(digit4<
=0);
a1=(char*)malloc(digit4+1);
b1=(char*)malloc(digit4+1);
digit4=digit4/4+1;
a,digit4);
init(&
b,digit4);
c,digit4);
/*初始化a,b,c*/
do{cf=0;
printf(Enter2number:
\n);
scanf(%s,a1);
printf(+\n);
scanf(%s,b1);
cf|=ston(a1,a);
cf|=ston(b1,b);
*/,如果转换出错,则重输输入被加数和加