加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

一元多项式的乘法与加法运算- c语言

(2015-09-08 11:53:16)
标签:

多项式

c语言

陈越

datastructures

浙江大学 MOOC 数据结构 作业练习
#include
#include
typedef struct PolyNode * Polynomial;
     struct PolyNode {
      int coef;
      int expon;
      Polynomial link;
     };
 
int Compare( int e1, int e2 ); 
void Attach( int coef, int expon, Polynomial * PtrRear) ; 
Polynomial ReadPoly(int number); 
Polynomial PolyAdd(Polynomial P1,Polynomial P2); 
Polynomial MultOneTerm(Polynomial h1,Polynomial h2); 
Polynomial PolyMultiply(Polynomial P1,Polynomial P2);
void PrintP( Polynomial  P);
 
   
  int main()
{
int n1;int n2;
scanf("%d",&n1);
Polynomial p1= ReadPoly(n1);
scanf("%d",&n2);
Polynomial p2= ReadPoly(n2);

    Polynomial pp2=PolyMultiply(p1,p2);
    PrintP(pp2);
Polynomial pp = PolyAdd(p1,p2);
PrintP(pp);
    return 0;
}  
     
  void Attach( int coef, int expon, Polynomial * PtrRear)  
{
if(coef !=0){
 Polynomial P;
  P = (Polynomial)malloc(sizeof(struct PolyNode));
  P->coef = coef;
  P->expon = expon;
  P->link = NULL;
 
  (*PtrRear)->link = P;
  *PtrRear = P;
}
}   
    Polynomial ReadPoly(int number)
{
Polynomial P,Rear,t;    int c,e;
if(number==0) P = NULL;
else {
P = (Polynomial)malloc(sizeof(struct PolyNode));
Rear = P;P->link=NULL;
for(int i=0;i
scanf("%d %d",&c,&e);
Attach(c,e,&Rear);
}
t = P; P = P->link;free(t);
}
     return P;
  void PrintP( Polynomial  P)
{
   if(P == NULL || P->coef==0) printf("%d %d",0,0);
 else {
  int flag = 0;
while(P){
if(! flag) flag = 1;
 else printf(" ");
printf("%d %d",P->coef,P->expon);
       P = P->link;
}
 }
 printf("\n");
  }   
 
  int Compare( int e1, int e2 )   {
if( e1>e2) return 1;
else if( e1
     else return 0;
}
 
   Polynomial PolyAdd(Polynomial P1,Polynomial P2)
{   
Polynomial front, rear, temp;
int sum;
rear =  (Polynomial)malloc(sizeof(struct PolyNode));
front = rear;
while(P1 && P2)
    
 switch ( Compare(P1->expon,P2->expon)) {
 
  case 1:
   Attach(P1->coef,P1->expon,&rear);
   P1 = P1->link;
   break;
  case -1:
   Attach(P2->coef,P2->expon,&rear);
   P2 = P2->link;
   break;
  case 0:
  sum = P1->coef + P2->coef;
  if(sum) Attach(sum,P1->expon,&rear);
   P2 = P2->link;
   P1 = P1->link;
   break;
 }
   
 for ( ; P1;P1 = P1->link) Attach(P1->coef,P1->expon,&rear); 
 for ( ; P2;P2 = P2->link) Attach(P2->coef,P2->expon,&rear);
 
 rear->link = NULL;
 temp = front;
 front = front->link;
 free(temp);
 return front;
  
}
   
 Polynomial MultOneTerm(Polynomial h1,Polynomial h2)  
 {  if(h1==NULL || h1->coef==0||h2==NULL || h2->coef==0) return NULL;
    Polynomial h, p, p1, p2, q;
       p1=h1;
       h=p=(Polynomial)malloc(sizeof(struct PolyNode));
       p->link=NULL;
       p2=h2;
              while(p2)
              {
                     q=(Polynomial)malloc(sizeof(struct PolyNode));

                     q->coef=p1->coef*p2->coef;
                     q->expon=p1->expon+p2->expon;

                     p->link=q; p=q;
                     p2=p2->link;
              }
       p->link=NULL;
       h = h->link;
       return h;
 }
  
   Polynomial PolyMultiply(Polynomial P1,Polynomial P2) 
 {
    if(P1 == NULL || P2 ==NULL||P1->coef ==0 ||P2->coef == 0)  return NULL;
Polynomial r,Pc,h;
Pc = (Polynomial)malloc(sizeof(struct PolyNode));
Pc->link = NULL;
  r = P1;
for (; r; r=r->link){
h = MultOneTerm(r,P2);
Pc = PolyAdd(Pc,h);
}
return Pc;
 }

感谢 陈越 指导


0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有