数据结构(C语言)课设6——一元稀疏多项式的计算
题目描述:
能够按照指数降序排列建立并输出多项式;能够完成两个多项式的相加、相减,并将结果输出;
#include <iostream>
using namespace std;
typedef struct PNode
{
float coef;
int expn;
struct PNode *next;
}PNode, *Polynomial;
void CreatePolyn(Polynomial &P, int n)
{
P = new PNode;
P->next = NULL;
for(int i = 1; i <= n; ++i)
{
PNode *q, *pre, *s;
s = new PNode;
cout<<"请输入第"<<i<<"项的系数和指数: ";
cin>>s->coef>>s->expn;
pre = P;
q = P->next;
while(q && q->expn < s->expn)
{
pre = q;
q = q->next;
}
s->next = q;
pre->next = s;
}
cout<<"---------------------------------"<<endl;
cout<<"您输入的多项式已经为您创建完毕: "<<endl;
PNode *a = new PNode;
a = P->next;
for(int i = 1; i <= n; i++)
{
cout<<"创建好的第"<<i<<"项的系数和指数分别为: ";
cout<<a->coef<<" "<<a->expn<<endl;
a = a->next;
}
}
void Polyn(Polynomial &Pa, Polynomial &Pb, char op)
{
PNode *p1, *p2, *p3, *r;
int sum;
p1 = Pa->next; p2 = Pb->next;
p3 = Pa;
while(p1 && p2)
{
if(p1->expn == p2->expn)
{
if(op == '+')
{
sum = p1->coef + p2->coef;
}
else if(op == '-')
{
sum = p1->coef - p2->coef;
}
if(sum != 0)
{
p1->coef = sum;
p3->next = p1;
p3 = p1;
p1 = p1->next;
r = p2;
p2 = p2->next;
delete r;
}
else
{
r = p1; p1 = p1->next; delete r;
r = p2; p2 = p2->next; delete r;
}
}
else if(p1->expn < p2->expn)
{
p3->next = p1;
p3 = p1;
p1 = p1->next;
}
else
{
if(op == '-')
{
p2->coef = -(p2->coef);
p3->next = p2;
p3 = p2;
p2 = p2->next;
}
else
{
p3->next = p2;
p3 = p2;
p2 = p2->next;
}
}
}
p3->next = p1?p1:p2;
if(p2 != NULL && op == '-')
{
p2->coef = -(p2->coef);
p3->next = p2;
p3 = p2;
p2 = p2->next;
}
delete Pb;
PNode *a = new PNode;
a = Pa->next;
int i = 0;
while(a)
{
cout<<"经过运算后的第"<<++i<<"项的系数和指数分别为: ";
cout<<a->coef<<" "<<a->expn<<endl;
a = a->next;
}
}
int main()
{
Polynomial Pa, Pb;
int n1, n2;
char op;
cout<<"***************第一个多项式******************"<<endl;
cout<<"请输入第一个多项式 Pa 的项数: ";
cin>>n1;
CreatePolyn(Pa, n1);
cout<<"***************第二个多项式******************"<<endl;
cout<<"请输入第二个多项式 Pb 的项数: ";
cin>>n2;
CreatePolyn(Pb, n2);
cout<<"请输入要进行的运算:(+或-)"<<endl;
cin>>op;
Polyn(Pa, Pb, op);
return 0;
}
此博文只用于博主记录学习过程(有问题可以评论)