📄 多项式my.cpp
字号:
#include <iostream.h>
#include <malloc.h>
struct pnode
{
float coef; //系数
int exp; //指数
struct pnode *next;
};
struct pnode *poly() //创建多项式
{
struct pnode *head,*r,*s;
float n;int m,i=0;
cout<<"建立一个多项式的单链表,请按降幂输入"<<endl;
head=(struct pnode *)malloc(sizeof(struct pnode));
r=head;
while(1)
{
cout<<"输入第"<<++i<<"个项式"<<endl;
cout<<"系数和指数分别为n,m:";
cin>>n>>m;
if(n==0) break;
s=(struct pnode *)malloc(sizeof(struct pnode));
s->coef=n;s->exp=m;
r->next=s;
r=s;
}
r->next=NULL;
r=head;head=head->next;free(r);
return (head);
}
void sort(pnode * &head) //按exp域的值递减排序
{
pnode *l=head->next,*s,*t;
if(l!=NULL) //当原单链表不为空时
{
t=l->next; //r保存*p结点后继结点的指针
l->next=NULL; //构造只含一个数据结点的有序表
l=t;
while(l!=NULL)
{
t=l->next; //r保存*p结点后继结点的指针
s=head;
while(s->next!=NULL && s->next->exp>l->exp)
s=s->next; //在有序表中找插入*p的前驱结点*q
l->next=s->next; //将*p插入到*q之后
s->next=l;
l=t;
}
}
}
void disp(pnode *h)
{
pnode *p=h;
cout<<"多项式:"<<endl;
if(p==NULL)
cout<<"您输入的多项式的和为0"<<endl;
while(p!=NULL)
{
cout<<p->coef<<"x^"<<p->exp<<endl;
p=p->next;
}
}
struct pnode *psub(struct pnode *heada,struct pnode *headb) //多项式的相加
{
struct pnode *headc,*p,*q,*r,*s;
float x;
p=heada;q=headb;
headc=(struct pnode *)malloc(sizeof(struct pnode));
r=headc;
while(p!=NULL && q!=NULL)
{
if(p->exp==q->exp)
{
x=p->coef-q->coef;
if(x!=0)
{
s=(struct pnode *)malloc(sizeof(struct pnode));
s->coef=x;s->exp=p->exp;
r->next=s;r=s;
}
p=p->next;q=q->next;
}
else
if(p->exp<q->exp)
{
s=(struct pnode *)malloc(sizeof(struct pnode));
s->coef=q->coef;s->exp=q->exp;
r->next=s;r=s;
q=q->next;
}
else
{
s=(struct pnode *)malloc(sizeof(struct pnode));
s->coef=p->coef;s->exp=p->exp;
r->next=s;r=s;
p=p->next;
}
}
if(p!=NULL)
q=p;
while(q!=NULL)
{
s=(struct pnode *)malloc(sizeof(struct pnode));
s->coef=q->coef;s->exp=q->exp;
r->next=s;
r=s;q=q->next;
}
r->next=NULL;
s=headc;
headc=headc->next;
free(s);
return (headc);
}
struct pnode *padd(struct pnode *heada,struct pnode *headb) //多项式的相加
{
struct pnode *headd,*p,*q,*r,*s;
float x;
p=heada;q=headb;
headd=(struct pnode *)malloc(sizeof(struct pnode));
r=headd;
while(p!=NULL && q!=NULL)
{
if(p->exp==q->exp)
{
x=p->coef+q->coef;
if(x!=0)
{
s=(struct pnode *)malloc(sizeof(struct pnode));
s->coef=x;s->exp=p->exp;
r->next=s;r=s;
}
p=p->next;q=q->next;
}
else
if(p->exp<q->exp)
{
s=(struct pnode *)malloc(sizeof(struct pnode));
s->coef=q->coef;s->exp=q->exp;
r->next=s;r=s;
q=q->next;
}
else
{
s=(struct pnode *)malloc(sizeof(struct pnode));
s->coef=p->coef;s->exp=p->exp;
r->next=s;r=s;
p=p->next;
}
}
if(p!=NULL)
q=p;
while(q!=NULL)
{
s=(struct pnode *)malloc(sizeof(struct pnode));
s->coef=q->coef;s->exp=q->exp;
r->next=s;
r=s;q=q->next;
}
r->next=NULL;
s=headd;
headd=headd->next;
free(s);
return (headd);
}
void main()
{
pnode *head1,*head2,*head3,*head4;
head1=poly();
disp(head1);
head2=poly();
disp(head2);
cout<<"两个多项式的差为:"<<endl;
head3=psub(head1,head2);
sort(head3);
disp(head3);
cout<<"两个多项式的和为:"<<endl;
head4=padd(head1,head2);
sort(head4);
disp(head4);
cout<<endl;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -