数据结构课程设计一元多项式加法减法乘法运算的实现.docx

上传人:b****5 文档编号:29038106 上传时间:2023-07-20 格式:DOCX 页数:16 大小:30.14KB
下载 相关 举报
数据结构课程设计一元多项式加法减法乘法运算的实现.docx_第1页
第1页 / 共16页
数据结构课程设计一元多项式加法减法乘法运算的实现.docx_第2页
第2页 / 共16页
数据结构课程设计一元多项式加法减法乘法运算的实现.docx_第3页
第3页 / 共16页
数据结构课程设计一元多项式加法减法乘法运算的实现.docx_第4页
第4页 / 共16页
数据结构课程设计一元多项式加法减法乘法运算的实现.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

数据结构课程设计一元多项式加法减法乘法运算的实现.docx

《数据结构课程设计一元多项式加法减法乘法运算的实现.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计一元多项式加法减法乘法运算的实现.docx(16页珍藏版)》请在冰豆网上搜索。

数据结构课程设计一元多项式加法减法乘法运算的实现.docx

数据结构课程设计一元多项式加法减法乘法运算的实现

1.一元多项式加法、减法、乘法运算的实现

设计内容及要求

1)设计内容

(1)使用顺序存储结构实现多项式加、减、乘运算。

例如:

求和结果:

(2)使用链式存储结构实现多项式加、减、乘运算,

求和结果:

2)设计要求

(1)用C语言编程实现上述实验内容中的结构定义和算法。

(2)要有main()函数,并且在main()函数中使用检测数据调用上述算法。

(3)用switch语句设计如下选择式菜单。

***************数据结构综合性实验****************

*******一、多项式的加法、减法、乘法运算**********

*******1.多项式创建**********

*******2.多项式相加**********

*******3.多项式相减**********

*******4.多项式相乘**********

*******5.清空多项式**********

*******0.退出系统**********

*******请选择(0—5)**********

*************************************************

*请选择(0-5):

数据结构设计

根据下面给出的存储结构定义:

#defineMAXSIZE20xpn!

=

{

i++;

}

if(i>p->last)

{

return0;

}

else

{

return1;

}

}

intInsert_ElementByOrder(polynomial*p,termx)

{

intj;

if(PloynStatus(p)==-1)

return0;

if(p->last==MAXSIZE-1)

{

cout<<"Thepolymisfull!

"<

return0;

}

j=p->last;

while(p->terms[j].expn<&&j>=0)

{

p->terms[j+1]=p->terms[j];

j--;

}

p->terms[j+1]=x;

p->last++;

return1;

}

intCreatePolyn(polynomial*P,intm)

{

floatcoef;

intexpn;

termx;

if(PloynStatus(P)==-1)

return0;

if(m>MAXSIZE)

{

printf("顺序表溢出\n");

return0;

}

else

{

printf("请依次输入%d对系数和指数...\n",m);

for(inti=0;i

{

scanf("%f%d",&coef,&expn);

=coef;

=expn;

if(!

Location_Element(P,x))

{

Insert_ElementByOrder(P,x);

}

}

}

return1;

}

charcompare(termterm1,termterm2)

{

if>

{

return'>';

}

elseif<

{

return'<';

}

else

{

return'=';

}

}

polynomial*addPloyn(polynomial*p1,polynomial*p2)

{

inti,j,k;

i=0;

j=0;

k=0;

if((PloynStatus(p1)==-1)||(PloynStatus(p2)==-1))

{

returnNULL;

}

polynomial*p3=Init_Polynomial();

while(i<=p1->last&&j<=p2->last)

{

switch(compare(p1->terms[i],p2->terms[j]))

{

case'>':

p3->terms[k++]=p1->terms[i++];

p3->last++;

break;

case'<':

p3->terms[k++]=p2->terms[j++];

p3->last++;

break;

case'=':

if(p1->terms[i].coef+p2->terms[j].coef!

=0)

{

p3->terms[k].coef=p1->terms[i].coef+p2->terms[j].coef;

p3->terms[k].expn=p1->terms[i].expn;

k++;

p3->last++;

}

i++;

j++;

}

}

while(i<=p1->last)

{

p3->terms[k++]=p1->terms[i++];

p3->last++;

}

returnp3;

}

polynomial*subStractPloyn(polynomial*p1,polynomial*p2)

{

inti;

i=0;

if((PloynStatus(p1)!

=1)||(PloynStatus(p2)!

=1))

{

returnNULL;

}

polynomial*p3=Init_Polynomial();

p3->last=p2->last;

for(i=0;i<=p2->last;i++)

{

p3->terms[i].coef=-p2->terms[i].coef;

p3->terms[i].expn=p2->terms[i].expn;

}

p3=addPloyn(p1,p3);

returnp3;

}

polynomial*mulitPloyn(polynomial*p1,polynomial*p2)

{

inti;

intj;

intk;

i=0;

if((PloynStatus(p1)!

=1)||(PloynStatus(p2)!

=1))

{

returnNULL;

}

polynomial*p3=Init_Polynomial();

polynomial**p=newpolynomial*[p2->last+1];

for(i=0;i<=p2->last;i++)

{

for(k=0;k<=p2->last;k++)

{

p[k]=Init_Polynomial();

p[k]->last=p1->last;

for(j=0;j<=p1->last;j++)

{

p[k]->terms[j].coef=p1->terms[j].coef*p2->terms[k].coef;

p[k]->terms[j].expn=p1->terms[j].expn+p2->terms[k].expn;

}

p3=addPloyn(p3,p[k]);

}

}

returnp3;

}

voidprintPloyn(polynomial*p)

{

inti;

for(i=0;i<=p->last;i++)

{

if(p->terms[i].coef>0&&i>0)

cout<<"+"<terms[i].coef;

else

cout<terms[i].coef;

cout<<"x^"<terms[i].expn;

}

cout<

}

voidmenu()

{

cout<<"\t\t*******数据结构综合性实验*********"<

cout<<"\t\t***一、多项式的加、减、乘法运算***"<

cout<<"\t\t*******1.多项式创建*********"<

cout<<"\t\t*******2.多项式相加*********"<

cout<<"\t\t*******3.多项式相减*********"<

cout<<"\t\t*******4.多项式相乘*********"<

cout<<"\t\t*******5.清空多项式*********"<

cout<<"\t\t*******0.退出系统*********"<

cout<<"\t\t******请选择(0-5)********"<

cout<<"\t\t***********************************"<

}

voidmain()

{

intsel;

polynomial*p1=NULL;

polynomial*p2=NULL;

polynomial*p3=NULL;

while

(1)

{

menu();

cout<<"\t\t*请选择(0-5):

";

cin>>sel;

switch(sel)

{

case1:

p1=Init_Polynomial();

p2=Init_Polynomial();

intm;

printf("请输入第一个多项式的项数:

\n");

scanf("%d",&m);

CreatePolyn(p1,m);

printf("第一个多项式的表达式为p1=");

printPloyn(p1);

printf("请输入第二个多项式的项数:

\n");

scanf("%d",&m);

CreatePolyn(p2,m);

printf("第二个多项式的表达式为p2=");

printPloyn(p2);

break;

case2:

printf("p1+p2=");

if((p3=subStractPloyn(p1,p2))!

=NULL)

printPloyn(p3);

break;

case3:

printf("\np1-p2=");

if((p3=subStractPloyn(p1,p2))!

=NULL)

printPloyn(p3);

break;

case4:

printf("\np1*p2=");

if((p3=mulitPloyn(p1,p2))!

=NULL)

printPloyn(p3);

case5:

Reset_Polynomial(p1);

Reset_Polynomial(p2);

Reset_Polynomial(p3);

break;

case0:

return;

}

}

return;

}

程序执行结果

 

2.迷宫问题实现

设计内容及要求

1)设计内容

以一个m*n的长方阵表示迷宫,0和1分别表示迷宫中的通路和障碍。

设计一个程序,对任意设定的迷宫,求出一条从入口到出口的道路,或得出没有通路的结论。

2)设计要求

(1)用C语言编程实现上述实验内容中的结构定义和算法;

(2)要有main()函数,并且在main()函数中使用检测数据调用上述算法;

数据结构设计

根据以上问题给出存储结构定义:

typedefstruct=0;

move[0].y=1;

move[1].x=1;

move[1].y=1;

move[2].x=1;

move[2].y=0;

move[3].x=1;

move[3].y=-1;

move[4].x=0;

move[4].y=-1;

move[5].x=-1;

move[5].y=-1;

move[6].x=-1;

move[6].y=0;

move[7].x=-1;

move[7].y=1;

}

voidprintS(dataTypetemp)

{

intstatici=0;

printf("第%d次入栈元素为:

",++i);

printf("(%d,%d)%d\n",,,;

}

intfind_Path(intmaze[M+2][N+2],itemmove[8])

{

SeqStack*s=InitSeqStack();

dataTypetemp;

intx,y,d,i,j;

=1;

=1;

=-1;

Push(s,temp);

while(!

StackEmpty(s))

{

Pop(s,&temp);

x=;

y=;

d=+1;

while(d<8)

{

i=x+move[d].x;

j=y+move[d].y;

if(maze[i][j]==0)

{

=x;

=y;

=d;

Push(s,temp);

printS(temp);

x=i;

y=j;

maze[x][y]=-1;

if(x==M&&y==N)

{

print_Path(s);

return1;

}

else

d=0;

}

else

d++;

}

}

return0;

}

voidprint_Path(SeqStack*s)

{

printf("迷宫路径为:

\n");

for(inti=0;itop;i++)

{

printf("(%d,%d)%d->",s->data[i].x,s->data[i].y,s->data[i].d);

}

printf("(%d,%d)%d\n",s->data[i].x,s->data[i].y,s->data[i].d);

}

voidmain()

{

init_move(move);

if(!

find_Path(maze,move))

printf("迷宫路径不存在");

}

程序执行结果

 

总结

通过这本次课程设计,加深了我对《数据结构》这门课程知识的理解,使我更熟练掌握实践技巧。

我通过这一周的时间在选题,编译调试,查阅相关文献资料,认真思考,敢于实践操作,攻克了一个个错误,完成了此次课程设计。

在“一元多项式的加、减、乘法运算实现”中主要使用了线性表的基本操作,使我更进一步理解线性表的顺序存储和链式存储结构,熟练线性表的插入、删除等基本功能;“迷宫问题的实现”又是栈的典型实际应用,在编译调试此程序更突出了栈的特性。

通过实际应用的程序编译来巩固自己数据结构的相关知识,更能加深记忆。

这次课程设计,对我的程序设计和调试能力有很大的提升。

这次课程设计使我深刻认识到自己专业知识的匮乏,程序设计的能力的不足。

通过这次的课程设计也提高了我的独立思考、敢于实践操作能力,弥补了我的部分专业知识的不足之处。

我的程序设计思想和代码的编写和调试能力在此次课设期间有所提高。

这样一种更贴切实际的课程设计,更能提高我的学习效率,让我真正理解这门课程的知识要点。

最后,非常感谢雷老师在平时以及在本次课设中给予我们的耐心的教导与帮助。

 

参考文献

【1】数据结构(C语言版)主编:

严蔚敏吴伟民

【2】C程序设计主编:

谭浩强

【3】数据结构(C语言版)例题详解与课程设计指导主编:

秦锋袁志祥

【4】二级C语言程序设计主编:

刘文辉

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

当前位置:首页 > 初中教育 > 英语

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

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