数据结构课程设计一元多项式加法减法乘法运算的实现Word文档下载推荐.docx
- 文档编号:21907363
- 上传时间:2023-02-01
- 格式:DOCX
- 页数:22
- 大小:108.16KB
数据结构课程设计一元多项式加法减法乘法运算的实现Word文档下载推荐.docx
《数据结构课程设计一元多项式加法减法乘法运算的实现Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计一元多项式加法减法乘法运算的实现Word文档下载推荐.docx(22页珍藏版)》请在冰豆网上搜索。
polynomial*Init_Polynomial();
//初始化空的多项式
intPloynStatus(polynomial*p)
//判断多项式的状态
intLocation_Element(polynomial*p,termx)
在多项式p中查找与x项指数相同的项就是否存在
intInsert_ElementByOrder(polynomial*p,termx)
//在多项式p中插入一个指数项x
intCreatePolyn(polynomial*P,intm)
//输入m项系数与指数,建立表示一元多项式的有序表p
charcompare(termterm1,termterm2)
//比较指数项term1与指数项term2
polynomial*addPloyn(polynomial*p1,polynomial*p2)
//将多项式p1与多项式p2相加,生成一个新的多项式
polynomial*subStractPloyn(polynomial*p1,polynomial*p2)
//多项式p1与多项式p2相减,生成一个新的多项式
polynomial*mulitPloyn(polynomial*p1,polynomial*p2)
//多项式p1与多项式p2相乘,生成一个新的多项式
voidprintPloyn(polynomial*p)
//输出在顺序存储结构的多项式p
1、4程序源代码
#include<
stdlib、h>
stdio、h>
iostream、h>
#defineNULL0
#defineMAXSIZE20
voidprintPloyn(polynomial*p);
if(p==NULL)
{
return-1;
}
elseif(p->
last==-1)
return0;
else
return1;
}
polynomial*Init_Polynomial()
polynomial*P;
P=newpolynomial;
if(P!
=NULL)
P->
last=-1;
returnP;
returnNULL;
voidReset_Polynomial(polynomial*p)
if(PloynStatus(p)==1)
p->
inti=0;
if(PloynStatus(p)==-1)
while(i<
=p->
last&
&
p->
terms[i]、expn!
=x、expn)
i++;
if(i>
p->
last)
intj;
if(p->
last==MAXSIZE-1)
cout<
<
"
Thepolymisfull!
endl;
j=p->
last;
while(p->
terms[j]、expn<
x、expn&
j>
=0)
terms[j+1]=p->
terms[j];
j--;
terms[j+1]=x;
last++;
termx;
if(PloynStatus(P)==-1)
if(m>
MAXSIZE)
printf("
顺序表溢出\n"
);
请依次输入%d对系数与指数、、、\n"
m);
for(inti=0;
i<
m;
i++)
{
scanf("
%f%d"
&
coef,&
expn);
x、coef=coef;
x、expn=expn;
if(!
Location_Element(P,x))
{
Insert_ElementByOrder(P,x);
}
}
return1;
if(term1、expn>
term2、expn)
return'
>
'
;
elseif(term1、expn<
='
inti,j,k;
i=0;
j=0;
k=0;
if((PloynStatus(p1)==-1)||(PloynStatus(p2)==-1))
polynomial*p3=Init_Polynomial();
=p1->
j<
=p2->
switch(compare(p1->
terms[i],p2->
terms[j]))
case'
:
p3->
terms[k++]=p1->
terms[i++];
break;
terms[k++]=p2->
terms[j++];
if(p1->
terms[i]、coef+p2->
terms[j]、coef!
{
terms[k]、coef=p1->
terms[j]、coef;
terms[k]、expn=p1->
terms[i]、expn;
k++;
}
i++;
j++;
p3->
returnp3;
inti;
if((PloynStatus(p1)!
=1)||(PloynStatus(p2)!
=1))
p3->
last=p2->
for(i=0;
terms[i]、coef=-p2->
terms[i]、coef;
terms[i]、expn=p2->
p3=addPloyn(p1,p3);
intk;
polynomial**p=newpolynomial*[p2->
last+1];
for(k=0;
k<
k++)
p[k]=Init_Polynomial();
p[k]->
last=p1->
for(j=0;
j<
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]);
if(p->
terms[i]、coef>
0&
i>
0)
cout<
+"
else
x^"
cout<
voidmenu()
\t\t*******数据结构综合性实验*********"
\t\t***一、多项式的加、减、乘法运算***"
\t\t*******1、多项式创建*********"
\t\t*******2、多项式相加*********"
\t\t*******3、多项式相减*********"
\t\t*******4、多项式相乘*********"
\t\t*******5、清空多项式*********"
\t\t*******0、退出系统*********"
\t\t******请选择(0-5)********"
\t\t***********************************"
voidmain()
intsel;
polynomial*p1=NULL;
polynomial*p2=NULL;
polynomial*p3=NULL;
while
(1)
menu();
\t\t*请选择(0-5):
cin>
sel;
switch(sel)
case1:
p1=Init_Polynomial();
p2=Init_Polynomial();
intm;
请输入第一个多项式的项数:
\n"
scanf("
%d"
m);
CreatePolyn(p1,m);
第一个多项式的表达式为p1="
printPloyn(p1);
请输入第二个多项式的项数:
CreatePolyn(p2,m);
第二个多项式的表达式为p2="
printPloyn(p2);
break;
case2:
printf("
p1+p2="
if((p3=subStractPloyn(p1,p2))!
printPloyn(p3);
break;
case3:
\np1-p2="
case4:
\np1*p2="
if((p3=mulitPloyn(p1,p2))!
case5:
Reset_Polynomial(p1);
Reset_Polynomial(p2);
Reset_Polynomial(p3);
case0:
return;
return;
1、5程序执行结果
2、迷宫问题实现
2、1设计内容及要求
以一个m*n的长方阵表示迷宫,0与1分别表示迷宫中的通路与障碍。
设计一个程序,对任意设定的迷宫,求出一条从入口到出口的道路,或得出没有通路的结论。
(1)用C语言编程实现上述实验内容中的结构定义与算法;
(2)要有main()函数,并且在main()函数中使用检测数据调用上述算法;
2、2数据结构设计
根据以上问题给出存储结构定义:
typedefstruct//定义坐标
intx;
inty;
}item;
//定义坐标与方向
intd;
}dataType;
//定义顺序栈的类型定义
dataTypedata[MAXLEN];
inttop;
}SeqStack;
itemmove[8];
//8邻域试探方向数组
intmaze[M+2][N+2]={
{1,1,1,1,1,1,1,1,1,1},
{1,0,1,1,1,0,1,1,1,1},
{1,1,0,1,0,1,1,1,1,1},
{1,0,1,0,0,0,0,0,1,1},
{1,1,0,0,1,1,0,0,0,1},
{1,0,1,1,0,0,1,1,0,1},
};
//定义迷宫数组,0表示有路径,1表示不存在路径
2、3基本操作函数说明
voidprint_Path(SeqStack*s);
//输出迷宫路线
SeqStack*InitSeqStack()
//该函数初始化一个空栈,并返回指向该栈的存储单元首地址
intPush(SeqStack*s,dataTypex)
//将元素x入栈s,若入栈成功返回结果1;
否则返回0
intStackEmpty(SeqStack*s)
//该函数判断栈就是否为空,若栈空返回结果1;
intPop(SeqStack*s,dataType*x)
//将栈顶元素出栈,放入x所指向的存储单元中,若出栈返回结果1;
voidinit_move(itemmove[8])
//初始化8邻域方向
intfind_Path(intmaze[M+2][N+2],itemmove[8])
//在迷宫maze二维数组中按move的8邻域方向探测迷宫路线,存在返回1,否则返回0
voidprint_Path(SeqStack*s)
//输出栈s中所有迷宫路径
2、4程序源代码
#defineM6
#defineN8
#defineMAXLEN100
SeqStack*s;
s=newSeqStack;
s->
top=-1;
returns;
if(s->
top==MAXLEN-1)
s->
top++;
data[s->
top]=x;
top==-1)
return0;
if(StackEmpty(s))
*x=s->
top];
top--;
move[0]、x=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);
(%d,%d)%d\n"
temp、x,temp、y,temp、d);
SeqStack*s=InitSeqStack();
dataTypetemp;
intx,y,d,i,j;
temp、x=1;
temp、y=1;
temp、d=-1;
Push(s,temp);
while(!
StackEmpty(s))
Pop(s,&
temp);
x=temp、x;
y=temp、y;
d=temp、d+1;
while(d<
8)
i=x+move[d]、x;
j=y+move[d]、y;
if(maze[i][j]==0)
temp、x=x;
temp、y=y;
temp、d=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++;
迷宫路径为:
for(inti=0;
s->
top;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课程设计 一元 多项式 加法 减法 乘法 运算 实现