数据结构课程设计报告40887.docx

上传人:b****8 文档编号:9425958 上传时间:2023-05-19 格式:DOCX 页数:26 大小:155KB
下载 相关 举报
数据结构课程设计报告40887.docx_第1页
第1页 / 共26页
数据结构课程设计报告40887.docx_第2页
第2页 / 共26页
数据结构课程设计报告40887.docx_第3页
第3页 / 共26页
数据结构课程设计报告40887.docx_第4页
第4页 / 共26页
数据结构课程设计报告40887.docx_第5页
第5页 / 共26页
数据结构课程设计报告40887.docx_第6页
第6页 / 共26页
数据结构课程设计报告40887.docx_第7页
第7页 / 共26页
数据结构课程设计报告40887.docx_第8页
第8页 / 共26页
数据结构课程设计报告40887.docx_第9页
第9页 / 共26页
数据结构课程设计报告40887.docx_第10页
第10页 / 共26页
数据结构课程设计报告40887.docx_第11页
第11页 / 共26页
数据结构课程设计报告40887.docx_第12页
第12页 / 共26页
数据结构课程设计报告40887.docx_第13页
第13页 / 共26页
数据结构课程设计报告40887.docx_第14页
第14页 / 共26页
数据结构课程设计报告40887.docx_第15页
第15页 / 共26页
数据结构课程设计报告40887.docx_第16页
第16页 / 共26页
数据结构课程设计报告40887.docx_第17页
第17页 / 共26页
数据结构课程设计报告40887.docx_第18页
第18页 / 共26页
数据结构课程设计报告40887.docx_第19页
第19页 / 共26页
数据结构课程设计报告40887.docx_第20页
第20页 / 共26页
亲,该文档总共26页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

数据结构课程设计报告40887.docx

《数据结构课程设计报告40887.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计报告40887.docx(26页珍藏版)》请在冰点文库上搜索。

数据结构课程设计报告40887.docx

数据结构课程设计报告40887

安徽工业大学

数据结构课程设计

指导老师:

陈学进

姓名:

陆俊贤

学号:

139074382

计算机学院

 

课题一:

进制转换

1·数据结构:

栈和队列;

2·算法:

将需要转换的数据分为两部分,整数部分和小数部分,将整数部分利用辗转相除法取得的余数存入栈中,将小数部分乘以进制取整后存入队列中,然后顺序出栈和出队列,输出转换后的数值,

3·程序源代码:

#include

usingnamespacestd;

typedefintdatatype;

classSeqstack

{

private:

datatype*base;

datatype*top;

intsize;

public:

Seqstack(intstacksize=100)

{

base=newdatatype[stacksize];

top=base;

size=stacksize;

};

intEmpty_stack();

intPush_stack(datatypee);

intPop_stack(datatype&e);

};

classSeqQueue

{

private:

datatype*base;

intfront,rear;

intsize;

public:

SeqQueue(intQueuesize=100)

{

base=newdatatype[Queuesize];

front=rear=0;

size=Queuesize;

};

intEmpty_Queue();

intIn_Queue(datatypee);

intOut_Queue(datatype&e);

};

intSeqstack:

:

Empty_stack()

{

returntop<=base;

}

intSeqstack:

:

Push_stack(datatypee)

{

if(top-base

{

*top=e;

top++;

return1;

}

else

return0;

}

intSeqstack:

:

Pop_stack(datatype&e)

{

if(top>base)

{

top--;

e=*top;

return1;

}

else

return0;

}

intSeqQueue:

:

Empty_Queue()

{

returnfront==rear;

}

intSeqQueue:

:

In_Queue(datatypee)

{

if((rear+1)%size!

=front)

{

rear=(rear+1)%size;

base[rear]=e;

return1;

}

else

return0;

}

intSeqQueue:

:

Out_Queue(datatype&e)

{

if(rear!

=front)

{

front=(front+1)%size;

e=base[front];

return1;

}

else

return0;

}

voidCalculate1(intNum,intr);

voidCalculate2(doubleNum,intr);

intmain()

{

intr;

doubleNum;

cout<<"请输入一个任意十进制数(输入0结束):

"<

while

(1)

{

cin>>Num;

if(Num==0)

return0;

cout<<"请输入转换进制:

"<

cin>>r;

cout<<"转换后的数为:

"<

if(Num<0)

{

Num=-Num;

cout<<"-";

}

Calculate1((int)Num,r);

if(Num-(int)Num)

{

Calculate2(Num-(int)Num,r);

}

else

cout<

cout<<"请输入一个任意十进制数(输入0结束):

"<

}

return0;

}

voidCalculate1(intNum,intr)

{

Seqstacks;

inte;

charch;

while(Num)

{

e=Num%r;

Num=Num/r;

s.Push_stack(e);

}

while(!

s.Empty_stack())

{

s.Pop_stack(e);

if(e>=0&&e<10)

cout<

else

{

ch=e+55;

cout<

}

}

}

voidCalculate2(doubleNum,intr)

{

if(Num!

=0)

{

cout<<".";

inte;

charch;

SeqQueueq;

while(Num>0.001)

{

Num=Num*r;

e=(int)Num;

Num-=e;

q.In_Queue(e);

}

while(!

q.Empty_Queue())

{

q.Out_Queue(e);

if(e<10&&e>-1)

cout<

else

{

ch=e+55;

cout<

}

}

cout<

}

}

4·测试数据与调试

请输入一个任意十进制数(输入0结束):

20.3

请输入转换进制:

2

转换后的数为:

1.010*********

请输入一个任意十进制数(输入0结束):

98.5

请输入转换进制:

16

转换后的数为:

62.8

请输入一个任意十进制数(输入0结束):

65.3

请输入转换进制:

16

转换后的数为:

41.4CCCCCCCCCCC

课题二·一元多项式的计算

1·数据结构

顺序表

2·算法

将从设备中接收的字符串按照一元多项式的书写规则写入顺序表中,然后将两个顺序表按照用户要求的运算规则(加、减、乘)将运算结果存入顺序表中并输出。

3·程序源代码

#include

#include

usingnamespacestd;

#definemaxsize100

typedefintdatatype;

classa

{

public:

intxishu;

intcishu;

charch;

charsign;

};

classSeqlist

{

public:

aItem[maxsize];

intlen;

Seqlist()

{len=0;}

voidInitiate();

voidOutput();

voidSort();

friendvoidCalculate1(Seqlist&l1,Seqlist&l2);

friendvoidCalculate2(Seqlist&l1,Seqlist&l2);

friendvoidCalculate3(Seqlist&l1,Seqlist&l2,Seqlist&l3);

};

voidAdd(Seqlist&l3,a&l_flag);

 

intmain()

{

Seqlistl1,l2,l3;

charch;

cout<<"请输入第一个一元多项式:

"<

l1.Initiate();

cout<

"<

cin>>ch;

cout<

"<

l2.Initiate();

cout<

"<

switch(ch)

{

case'+':

Calculate1(l1,l2);

break;

case'-':

Calculate2(l1,l2);

break;

case'*':

Calculate3(l1,l2,l3);

break;

}

cout<

return0;

}

voidSeqlist:

:

Initiate()

{

chara[100];

inti=0,j=0,str_len;

cin>>a;

str_len=strlen(a);

while(i

{

Item[j].xishu=0;

if(i==0)

{

if(a[i]=='-')

{

Item[j].sign='-';

i++;

}

if(a[i]>='a'&&a[i]<='z')

{

Item[j].ch=a[i];

Item[j].xishu=1;

i++;

}

if(a[i]>'0'&&a[i]<='9')

{

while

(1)

{

if(a[i]>'0'&&a[i]<='9')

{

Item[j].xishu=a[i]-'0'+Item[j].xishu*10;

i++;

}

else

break;

}

Item[j].ch=a[i];

i++;

}

if(a[i]!

='^')

{

i--;

Item[j].cishu=1;

}

else

{

i++;

Item[j].cishu=a[i]-'0';

i++;

}

j++;

}

else

{

Item[j].xishu=0;

Item[j].sign=a[i];

i++;

if(a[i]>='a'&&a[i]<='z')

{

Item[j].ch=a[i];

Item[j].xishu=1;

i++;

}

elseif(a[i]>'0'&&a[i]<='9')

{

while

(1)

{

if(a[i]>'0'&&a[i]<='9')

{

Item[j].xishu=a[i]-'0'+Item[j].xishu*10;

i++;

}

else

break;

}

Item[j].ch=a[i];

i++;

}

if(a[i]!

='^')

{

i--;

Item[j].cishu=1;

}

else

{

i++;

Item[j].cishu=a[i]-'0';

i++;

}

j++;

}

}

len=j;

for(i=0;i

{

if(Item[i].sign=='-')

{

Item[i].xishu=-Item[i].xishu;

}

}

}

voidSeqlist:

:

Output()

{

inti=0;

for(i=0;i

{

if(i>0)

{

if(Item[i].xishu<0&&Item[i].xishu!

=-1)

cout<

if(Item[i].xishu>1)

cout<<'+'<

if(Item[i].xishu==-1)

cout<<'-';

if(Item[i].xishu==1)

cout<<'+';

cout<

if(Item[i].cishu!

=1)

cout<<'^'<

}

else

{

if(Item[i].xishu==-1)

cout<<'-';

if(Item[i].xishu!

=1&&Item[i].xishu!

=-1)

cout<

cout<

if(Item[i].cishu>1)

cout<<'^'<

}

}

}

voidCalculate1(Seqlist&l1,Seqlist&l2)

{

cout<<'(';

l1.Output();

cout<<")+";

cout<<'(';

l1.Output();

cout<<")";

cout<<"=";

inti,j,flag=0;

for(j=0;j

{

flag=0;

for(i=0;i

{

if(l2.Item[j].cishu==l1.Item[i].cishu)

{

l1.Item[i].xishu+=l2.Item[j].xishu;

flag=1;

break;

}

}

if(flag==0)

{

l1.Item[l1.len]=l2.Item[j];

l1.len++;

}

}

l1.Sort();

l1.Output();

}

voidCalculate2(Seqlist&l1,Seqlist&l2)

{

cout<<'(';

l1.Output();

cout<<")-";

cout<<'(';

l1.Output();

cout<<")";

cout<<"=";

inti,j,flag=0;

for(j=0;j

{

flag=0;

for(i=0;i

{

if(l2.Item[j].cishu==l1.Item[i].cishu)

{

l1.Item[i].xishu-=l2.Item[j].xishu;

flag=1;

break;

}

}

if(flag==0)

{

l1.Item[l1.len]=l2.Item[j];

l1.len++;

}

}

l1.Sort();

l1.Output();

}

voidSeqlist:

:

Sort()

{

inti,j;

al_e;

for(i=0;i

for(j=0;j

if(Item[j].cishu

{

l_e=Item[j];

Item[j]=Item[j+1];

Item[j+1]=l_e;

}

}

voidCalculate3(Seqlist&l1,Seqlist&l2,Seqlist&l3)

{

cout<<'(';

l1.Output();

cout<<")*";

cout<<'(';

l1.Output();

cout<<")";

cout<<"=";

al_flag;

inti,j;

for(i=0;i

{

for(j=0;j

{

l_flag.xishu=l1.Item[i].xishu*l2.Item[j].xishu;

l_flag.cishu=l1.Item[i].cishu+l2.Item[j].cishu;

l_flag.ch=l1.Item[i].ch;

Add(l3,l_flag);

}

}

l3.Sort();

l3.Output();

}

voidAdd(Seqlist&l3,a&l_flag)

{

inti;

intflag=0;

for(i=0;i

if(l_flag.cishu==l3.Item[i].cishu)

{

l3.Item[i].xishu+=l_flag.xishu;

flag=1;

}

if(flag==0)

{

l3.Item[l3.len]=l_flag;

l3.len++;

}

}

 

4·测试数据与调试

输入:

23x^2+6x^3+x^6

+

-21x^2+6x^3-81x^5

输出:

x^6-81x^5+12x^3+2x^2

输入:

3x^2+x^3

*

x^4+6x^5

输出:

6x^8+19x^7+3x^6

课题三·大数相乘

1·数据结构

线性表

2·算法

将从外接设备中接收的字符串存入整形线性表中,并且倒序存入,每个数组元素存一个,然后错位相乘,对应相加。

3·源程序代码

#include

#include

#include

usingnamespacestd;

typedefintdatatype;

#definemaxsize9999

classSeqlist

{

private:

datatypedata[maxsize];

intlen;

public:

Seqlist()

{

len=0;

for(inti=0;i

data[i]=0;

}

voidInitiate();

voidOutput();

voidReinitiate();

friendvoidCalculate(Seqlist&l1,Seqlist&l2,Seqlist&l3);

};

intmain()

{

Seqlistl1,l2,l3;

l1.Initiate();

l2.Initiate();

Calculate(l1,l2,l3);

l1.Output();

cout<<'*';

l2.Output();

cout<<'=';

l3.Output();

cout<

return0;

}

voidSeqlist:

:

Initiate()

{

chara[maxsize];

intstr_len,i,j;

cin>>a;

str_len=strlen(a);

for(i=str_len-1,j=0;i>=0;i--,j++)

{

data[j]=a[i]-'0';

len++;

}

}

voidSeqlist:

:

Output()

{

inti;

for(i=maxsize-1;i>=0;i--)

{

if(data[i]!

=0)

cout<

}

}

voidCalculate(Seqlist&l1,Seqlist&l2,Seqlist&l3)

{

inti,j,k;

intflag;

for(i=0;i

{

for(j=0;j

{

flag=l1.data[i]*l2.data[j];

l3.data[i+j]+=flag;

}

l3.len=i+j;

}

l3.Reinitiate();

}

voidSeqlist:

:

Reinitiate()

{

for(inti=0;i

{

if(data[i]>10)

{

data[i+1]+=data[i]/10;

data[i]=data[i]%10;

}

}

}

4·测试数据与调试

输入:

3652

3659

输出:

3652*3659=13362688

 

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

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2