数据结构笔记(四)

一元多项式相乘

typedef struct PolyNode *Polynomial;
struct PolyNode{
    int coef;
    int exp;
    Polynomial next;
}
int main()
{
    Polynomial P1,P2,PP,PS;
    
    P1=ReadPoly();
    P2=ReadPoly();
    PP=Mult(P1,P2);
    PrintPoly(PP);
    PS=Add(P1,P2);
    PrintPoly(PS);

    return 0;
}

Polynomial ReadPoly(){

    Polynomial P,Rear,t;
    int c,e,N;
    scanf("%d",&N);    
    P=(Polynomial)malloc(sizeof(struct PolyNode));//链表头空结点
    p->next=NUll;
    Rear=P;
    while(N--){
                scanf("%d %d",&c,&e);
                Attach(c,e,&Rear);               //将当前项插入多项式尾部
               }
    t=P;P=P->next;free(t);                      //删除临时生成的头结点
    return P;
}

void Attach(int c,int e,Polynomial *pRear){//读入多项式
    Polynomial P;
    P=(Polynomial)malloc(sizeof(struct PolyNode));
    P->coef=c;                            //对新结点赋值
    P->exp=e;
    p->next=NULL;
    (*pRear)->next=P;
    *pRear=P;                            //修改*pRear值
}

Polynomial Mult(Polynomial P1,Polynomial P2){
    Polynomial p,Rear,t1,t2,t;
    int c,e;
    
    if(!P1||!P2) return NULL;
    
    t1=P1;t2=P2;
    P=(Polynomial)malloc(sizeof(struct PolyNode)); P->next=NULL;
    Rear=P;
    while(t2){                //先用P1的第一项乘P2,得到P
                Attach(t1->coef*t2->coef,t1->exp+t2->exp,&Rear);
                t2=t2->next;
             }
    t1=t1->next;
    while(t1){
            t2=P2;Rear=P;
            while(t2){
                        e=t1->expon+t2->expon;
                        c=t1->coef*t2->coef;
                        while(Rear->next && Rear->next->exp>e)
                                Rear=Rear->next;
                        if(Rear->next && Rear->next->exp==e)
                                if(Rear->next->coef+c)
                                      Rear->next->coef+=c;
                                else{
                                      t=Rear->next;    
                                      Rear->next=t->next;
                                      free(t);
                                        }
                        else{
                              t=(Polynomial)malloc(sizeof(struct PolyNode));
                              t->coef=c;t->exp=e;t->next=Rear->next;
                               Rear->next=t;Rear=Rear->next;
                            }
                t2=P;P=P->next;free(t2);
                return P;
}

void PrintPoly(Polynomial P){
    int flag=0;
    if(!P)     {printf("0 0\n");return ;}
    while(P){
                if(!flag)
                            flag=1;
                else
                            printf(" ");
                printf("%d %d",P->coef,P->exp);
                P=P->next;
       }
      printf("\n");
}          

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值