冯数据结构实验Word格式.docx
《冯数据结构实验Word格式.docx》由会员分享,可在线阅读,更多相关《冯数据结构实验Word格式.docx(15页珍藏版)》请在冰豆网上搜索。
对于两个一元多项式中所有指数不相同的项,则分别复抄到“和”多项式中去。
实验步骤:
1、
2、
3、
六、调试过程及实验结果
七、总结
多项式系数小的
八、附录
#pragmaonce
#include<
iostream>
structnode
{
intexp;
//指数
doublecoef;
//系数
node*next;
//指针域
};
classpoly
private:
node*head;
public:
poly();
voidin1poly();
voidin2poly(int,int[],double[]);
voiddelpoly();
voidprtpoly();
polyoperator+(poly&
);
/*~poly(void);
*/
#include"
StdAfx.h"
poly.h"
iostream"
usingnamespacestd;
poly:
:
poly()
head=NULL;
return;
}
voidpoly:
in1poly()
node*p,*k;
inte;
doublec;
k=NULL;
cout<
<
"
输入:
系数指数。
输入-1结束"
endl;
cin>
>
c>
e;
while(e>
=0)
{
p=newnode;
p->
exp=e;
coef=c;
next=NULL;
if(k==NULL)
head=p;
else
k->
next=p;
k=p;
}
in2poly(intn,inte[],doublec[])
intk;
node*p;
for(k=n-1;
k>
=0;
k--)
coef=c[k];
p->
exp=e[k];
next=head;
head=p;
return;
delpoly()
node*p,*q;
q=head;
while(q!
=NULL)
p=q->
next;
deleteq;
q=p;
prtpoly()
node*k;
if(head==NULL)
cout<
空表"
k=head;
while(k!
("
k->
coef<
"
exp<
)"
k=k->
polypoly:
operator+(poly&
p2)
polyp;
node*k,*q,*m,*n;
m=head;
n=p2.head;
while((m!
=NULL)&
&
(n!
=NULL))
if(m->
exp==n->
exp)
c=m->
coef+n->
coef;
e=m->
exp;
m=m->
n=n->
elseif(m->
exp>
n->
c=n->
e=n->
c=m->
if(c!
q=newnode;
q->
if(k==NULL)
p.head=q;
else
k->
next=q;
k=q;
while(m!
e=m->
m=m->
q->
p.head=q;
next=q;
k=q;
while(n!
c=n->
e=n->
else
return(p);
//poly:
~poly(void)
//{
//delete[]
//}
stdafx.h"
cmath"
int_tmain(intargc,_TCHAR*argv[])
polyp1,p2,add_p;
intpe1[4]={0,1,8,17};
doublepc1[3]={7,3,9};
intpe2[3]={1,7,8};
doublepc2[3]={8,22,-9};
p1.in2poly(3,pe1,pc1);
p2.in2poly(3,pe2,pc2);
add_p=p1+p2;
欢迎使用多项式相加程序!
"
多项式1为:
p1.prtpoly();
多项式2为:
p2.prtpoly();
两多项式相加和为:
add_p.prtpoly();
return0;
邢台学院数学与信息技术学院
二
栈及其应用
1、熟悉栈的原理和实现方式;
2、理解使用栈消除函数递归调用的原理;
3、掌握后缀表达式计算的方法。
1、栈实现阶乘函数;
2、栈实现后缀表达式的计算。
函数调用栈的结构如下:
第n层调用
(当前函数局部变量空间)
第n-1层调用
(当前函数的主调函数变量空间)
…
第1层调用
主函数局部变量空间
函数调用的栈空间
使用栈消去递归的算法框架如下:
初始化栈;
将完整问题参数压栈;
while(栈非空)
取出栈顶元素所描述的问题
如果可以直接解决,则直接解决
否则分解为子问题压栈
后缀表达式是运算符在运算数之后的一种表达式存储的数据结构,不需要比较运算符优先级别,只需要每次读到运算数时压栈,读到运算符时将运算数出栈,将结果压栈即可。
最后的运算结果存放在栈底。
实验步骤
#defineSElemTypeint
classstack
SElemType*base;
SElemType*top;
stack()
base=newSElemType[100];
top=base;
voidPush(SElemTypen)
*top=n;
top++;
SElemTypePop()
SElemTypee;
e=*(--top);
returne;
//实现阶乘运算
intJC(intn)
stacks;
intsum=1;
//将?
数簓据Y循-环·
压1入?
栈?
中D
while(n)
s.Push(n);
n--;
while(s.top!
=s.base)
intb=s.Pop();
sum*=b;
returnsum;
//用栈实现后缀表达式
intCount(charb[])
stacks1;
intsum=0;
inti=0;
while(b[i]!
='
\0'
)
if(b[i]!
='
+'
b[i]!
*'
-'
/'
s1.Push(b[i]-'
0'
{
if(b[i]=='
{
inta=s1.Pop();
intb=s1.Pop();
sum=a+b;
}
elseif(b[i]=='
)
sum=a*b;
sum=b-a;
sum=b/a;
s1.Push(sum);
}
i++;
intmain(intargc,char*argv[])
intm=6;
inta=JC(m);
printf("
%d的阶乘计算结果为a:
阰"
m);
%d\n"
a);
\n\n"
后缀表达式计算:
charc[10]={'
5'
'
intb=Count(c);
%d"
b);