【文件属性】:
文件名称:多项式加减乘除法
文件大小:4KB
文件格式:TXT
更新时间:2015-05-08 06:25:51
链表
#include
#include
#include
#include
using namespace std;
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
typedef int Status;
typedef struct {
float coef;
int expn;
} term,ElemType;
typedef struct polynomail
{
ElemType term;
struct polynomail *next;
}polynomail, *linklist;
Status locatelem(linklist l,ElemType e,linklist &q)
{
linklist p,m;
p=l->next;
if(!p)
{
q=l;
return FALSE;
}
if((p->term).expn>e.expn)
{q=l;return FALSE;}
else if(p->next)
{
while(p->next)
{
m=p->next;
if((p->term).expn>e.expn)
{
q=l;
return FALSE;
}
else if((m->term).expn>e.expn)
{ q=p;return FALSE;}
else p=m;
}
q=p;return FALSE;
}
else{ q=p;return FALSE;}
}
void makenode(linklist &s,ElemType e)
{
s=(linklist)malloc(sizeof(polynomail));
s->term=e;
}
void creatpolyn(linklist &p,int m)
{
linklist h,q,s;
ElemType e;
p=(linklist)malloc(sizeof(polynomail));
p->next=NULL;
for(int i=0;inext=q->next;
q->next=s;
}
}
}
void destroypolyn(linklist &p)
{
linklist q;
while(p)
{
q=p->next;
free(p);
p=q;
}
}
void printpolyn(linklist p)
{
linklist q;
q=p->next;
while(q)
{
printf("+%fX^",((q->term).coef));
printf("%d",((q->term).expn));
q=q->next;
}
printf("\n");
}
int polynlength(linklist p)
{
linklist q;
q=p->next;
int i=0;
while(q)
{
i++;
q=q->next;
}
return i;
}
void add(linklist &pa;,linklist pb)
{
float sum;
linklist qa,qb,qc;
qa=pa->next;
qb=pb->next;
qc=pa;
while(qa&&qb;)
{
if(qa->term.expn>qb->term.expn)
{
qc->next=qb;qc=qb;qb=qb->next;
}
else if(qa->term.expnterm.expn)
{
qc->next=qa;qc=qa;qa=qa->next;
}
else
{
sum=qa->term.coef+qb->term.coef;
if(sum)
{
qa->term.coef=sum;
qc->next=qa;qc=qa;
qa=qa->next;
qb=qb->next;
}
else
{
qa=qa->next;
qb=qb->next;
}
}
}
qc->next=qa?qa:qb;
free(pb);
}
void sub(linklist pa,linklist pb)
{
float sum;
linklist qa,qb,qc;
qa=pa->next;
qb=pb->next;
qc=pa;
while(qa&&qb;)
{
if(qa->term.expn>qb->term.expn)
{
qc->next=qb;qc=qb;qb=qb->next;
}
else if(qa->term.expnterm.expn)
{
qc->next=qa;qc=qa;qa=qa->next;
}
else
{
sum=qa->term.coef-qb->term.coef;
if(sum)
{
qa->term.coef=sum;
qc->next=qa;qc=qa;
qa=qa->next;
qb=qb->next;
}
else
{
qa=qa->next;
qb=qb->next;
}
}
}
qc->next=qa?qa:qb;
free(pb);
}
void mul(linklist pa,linklist pb,linklist &ps;)
{
linklist qa,qb,pc,qc,qd,qf;
qa=pa->next;
qf=qb=pb->next;
ps=(linklist)malloc(sizeof(polynomail));ps->next=NULL;
pc=(linklist)malloc(sizeof(polynomail));pc->next=NULL;qc=pc;
for(qa;qa!=NULL;qa=qa->next)
{
pc=(linklist)malloc(sizeof(polynomail));pc->next=NULL;qc=pc;
qb=qf;
for(qb;qb!=NULL;qb=qb->next)
{
qd=(linklist)malloc(sizeof(polynomail));
qd->next=NULL;
qd->term.coef=qb->term.coef*qa->term.coef;
qd->term.expn=qb->term.expn+qa->term.expn;
qc->next=qd;qc=qc->next;
}
add(ps,pc);
}
}
void main()
{
int n;
linklist a,b,c,d,f,g,h,i,j,k,o,z;
int m,l;
printf("输入多项式的个数 ");
scanf("%d",&m);
creatpolyn( a,m);
d=a;
printf("得到多项式\n");
printpolyn(d);
printf("输入多项式的个数 ");
scanf("%d",&l);
creatpolyn( b,l);
f=b;
printf("得到多项式\n");
printpolyn(d);
printf("两项式的和\n");
g=a;h=b;
add(g,h);
printpolyn(g);
printf("两项式的差\n");
i=a;j=b;
sub(i,j);
printpolyn(i);
printf("两项式的积\n");
k=a;o=b;
mul(k,o,z);
printpolyn(z);
scanf("%d",&n);
}