数据结构 一元多项式四则运算 源代码

  • 格式:doc
  • 大小:51.50 KB
  • 文档页数:11

下载文档原格式

  / 11
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
cout<<" 2将两个一元多项式相加"<<endl;
cout<<" 3将两个一元多项式相减"<<endl;
cout<<" 4将两个一元多项式相乘"<<endl;
i--;
continue;
}
newp->next=NULL;
p=L;
if(newp->data.coef==0)//判断系数是否为0
{
cout<<"系数为零,重新输入!"<<endl;
delete newp;
i--;
continue;
}
while((p->next!=NULL)&&((p->next->data).exp<(newp->data).exp)) //利用while循环使p指向指数最小的项
if((p->data).coef<0)
{
if((p->data).exp==0)
cout<<(p->data).coef;
else if(p->data.coef==-1&&p->data.exp==1)
cout<<"-x";
else if(p->data.coef==-1&&p->data.exp!=1)
{
Link p,q,r;
pc=new LNode;
pc->next=NULL;
r=pc;
p=pa;
while(p->next!=NULL)
{
q=new LNode;
q->data.coef=p->next->data.coef;
q->data.exp=p->next->data.exp;
r->next=q;
{
p->next=p2;
p=p->next;
p2=p2->next;
}
else //当指数相同时两系数相加
{
p1->data.coef=p1->data.coef; p2->data.coef;
if(p1->data.coef!=0)//找出系数为零的项并删除
{
p->next=p1;
p=p->next;
void Add(Link &pc,Link pa,Link pb); //多项式相加函数
void Substract(Link &pc,Link pa,Link pb);//多项式相减函数
void Copy(Link &pc,Link pa);//把一个链表的内容复制给另一个链表创建表函数
int Judge(Link pa,Link e);//判断指数是否与多项式中已存在的某项相同函数
{
Link p,pt;
Copy(pt,pb);//把pb复制在pt
p=pt;
while(p!=NULL)
{
(p->data).coef=(-(p->data).coef);//将系数取反
p=p->next;
}
Add(pc,pa,pt);//调用加法函数进行减法
Destroy(pt);
}
void Multiply(Link &pc,Link pa,Link pb)//将两个一元多项式相乘函数
{
newp=new LNode;
newp->next=NULL;
newp->data.coef=p1->data.coef*p2->data.coef;
newp->data.exp=p1->data.exp; p2->data.exp;
t->next=newp;
t=t->next;
p2=p2->next;
//程序源代码
#include<iostream>
#include<conio.h>
#include<stdlib.h> //标准库头文件包含函数exit()
using namespace std;
struct Node //建立结构体
{
float coef; //项式系数
int exp; //项式指数
cout<<"x^"<<(p->data).exp;
else if((p->data).exp==1&&(p->data).coef!=1)
cout<<(p->data).coef<<"x";
else cout<<(p->data).coef<<"x^"<<(p->data).exp;
}
//项的系数小于的种情况
cout<<" "<<"x";
else if((p->data).coef==1&&(p->data).exp!=1)
cout<<" "<<"x^"<<(p->data).exp;
else cout<<" "<<(p->data).coef<<"x^"<<(p->data).exp;
}
if((p->data).coef<0)
p2=pb->next;
Destroy(p);
Destroy(pd);
}
}
void Menu()//菜单函数
{
cout<<""<<endl;
cout<<endl;
cout<<" *一元多项式的加减乘除运算*"<<endl;
cout<<" "<<endl;
cout<<" 1创建两个一元多项式"<<endl;
if((p->data).coef>0) //项的系数大于的种情况
{
if((p->data).exp==0) //输出指数为0项的系数
cout<<(p->data).coef;
else if((p->data).coef==1&&(p->data).exp==1)
cout<<"x";
else if((p->data).coef==1&&(p->data).exp!=1)
p=p->next;
if(p==NULL)return 0;
else return 1;
}
void Print(Link L)//输出链表
{
Link p;
if(L==NULL||L->next==NULL) //判断多项式是否为空
cout<<"该一元多项式为空!"<<endl;
else
{
p=L->next;
{
p=p->next;
}
if(!Judge( L, newp))//判断指数是否与多项式中已存在的某项相同
{
newp->next=p->next;
p->next=newp;
}
else
{
cout<<"输入的该项指数与多项式中已存在的某项相同,请重新创建一个正确的多项式"<<endl;
delete newp;
q->next=NULL;
r=q;
p=p->next;
}
}
void Add(Link &pc,Link pa,Link pb)//两个一元多项式相加
{
Link p1,p2,p,pd;
Copy(p1,pa);
Copy(p2,pb);
pc=new LNode;
pc->next=NULL;
p=pc;
p1=p1->next;
{
Link p1,p2,p,pd,newp,t;
pc=new LNode;
pc->next=NULL;
p1=pa->next;
p2=pb->next;
while(p1!=NULL)
{
pd=new LNode;
pd->next=NULL;
p=new LNode;
p->next=NULL;
t=p;
while(p2)
void Destroy(Link &L)//销毁链表函数
{
Link p;
p=L->next;
while(p)
{
L->next=p->next;
delete p;
p=L->next;
}
delete L;
L=NULL;
}
void Create(Link &L,int n)//创建含有n个链表类型结点的项,即创建一个n项多项式
p1=p1->next;
p2=p2->next;
}
else
{
pd=p1;
p1=p1->next;
p2=p2->next;
delete pd;
}
}
}
if(p1!=NULL)
{
p->next=p1;
}
if(p2!=NULL)
{
p->next=p2;
}
}
void Substract(Link &pc,Link pa,Link pb)//两个多项式相减
{
if((p->data).exp==0)
cout<<(p->data).coef;
else if(p->data.coef==-1&&p->data.exp==1)
cout<<"-x";
else if(p->data.coef==-1&&p->data.exp!=1)
cout<<"-x^"<<p->data.exp;
cout<<"系数:";
cin>>(newp->data).coef;
cout<<"指数:";
cin>>(newp->data).exp;
if(newp->data.exp<0) //判断指数是否为0,如果为0,销毁链表,从新输入
{
cout<<"您输入有误,指数不允许为负值!"<<endl;
delete newp;
{
if(L!=NULL)
{
Destroy(L);
}
Link p,newp;//定义两个链表
L=new LNode;
L->next=NULL;
(L->data).exp=-1;//创建头结点
p=L;
for(int i=1;i<=n;i++)
{
newp=new LNode;//申请新节点
cout<<"请输入第"<<i<<"项的系数和指数:"<<endl;
p2=p2->next;
while(p1!=NULL&&p2!=NULL)
{
if(p1->data.exp<p2->data.exp)//比较指数大小,把两个一元多项式的项按指数递增序列排列
{
p->next=p1;
p=p->next;
p1=p1->next;
}
else if(p1->data.exp>p2->data.exp)
};
typedef Node polynomial;//重命名
struct LNode
{
polynomial data;//链表类型
LNode *next;
};
typedef LNode* Link;
void Create(Link &L,int n); //创建一个n项多项式函数
void Print(Link L); //输出链表函数
Destroy(L);
Create(L,n); //创建多项式没有成功,递归调用重新创建
break;
}
}
}
int Judge(Link L,Link e)//判断指数是否与多项式中已存在的某项相同
{
Link p;
p=L->next;
while(p!=NULL&&(e->data.exp!=p->data.exp))
{
if((p->data).exp==0)
cout<<" "<<(p->data).coef;
else if((p->data).exp==1&&(p->data).coef!=1)
cout<<" "<<(p->data).coef<<"x";
else if((p->data).exp==1&&(p->data).coef==1)
cout<<"-x^"<<p->data.exp;
else if(p->data.exp==1)
cout<<p->data.coef<<"x";
else cout<<(p->data).coef<<"x^"<<(p->data).exp;
}
p=p->next;
while(p!=NULL)
{
if((p->data).coef>0)
pc=new LNode;
pc->next=NULL;
p1=pa->next;
p2=pb->next;
while(p1!=NULL)
{
pd=new LNode;
pd->next=NULL;
p=new LNode;
p->next=NULL;
t=p;
whileห้องสมุดไป่ตู้p2)
{
newp=new LNode;
newp->next=NULL;
newp->data.coef=p1->data.coef/p2->data.coef;
newp->data.exp=p1->data.exp-p2->data.exp;
t->next=newp;
t=t->next;
p2=p2->next;
}
Add(pd,pc,p);
Copy(pc,pd);
p1=p1->next;
}
Add(pd,pc,p);
Copy(pc,pd);
p1=p1->next;
p2=pb->next;
Destroy(p);
Destroy(pd);
}
}
void division(Link &pc,Link pa,Link pb)//将两个一元多项式相除函数
{
Link p1,p2,p,pd,newp,t;
else if(p->data.exp==1)
cout<<p->data.coef<<"x";
else cout<<(p->data).coef<<"x^"<<(p->data).exp;
}
p=p->next;
}
}
cout<<endl;
}
void Copy(Link &pc,Link pa)//把一个链表的内容复制给另一个链表