⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 多项式my.cpp

📁 共有10个文件代码
💻 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 + -