一元多项式相加

#include <iostream>
#include <stdio.h>
#include <stdlib.h>

using namespace std;
typedef struct Polynode
{
    int coef;
    int exp;
    struct Polynode *next;
}Polynode,*Polylist;
//均使用尾插法
Polylist PolyCreate()
{
    Polynode * head, *rear,*s;
    int c,e;
    head=(Polynode *)malloc(sizeof(Polynode)); //建立多项式的头结点,多个头结点,记录了最原始的头结点位置
    rear=head;  //尾时钟指向单链表的尾,便于尾插法建表
    scanf("%d,%d",&c,&e); //输入多项式的系数和指数项
    while(c!=0)    //若c=0,则代表多项式的输入结束
    {
        s=(Polynode *)malloc(sizeof(Polynode));
        s->coef=c;
        s->exp=e;
        rear->next=s;
        rear=s;
        scanf("%d,%d",&c,&e);
    }
    rear->next=NULL;
    return(head);
}
void PolyAdd(Polylist polya, Polylist polyb) //将两个多项式相加,然后将和多项式存放在polya,并将polyb删除
{
   Polynode *p,*q,*tail,*temp;
   int sum;
   p=polya->next;   //令p和q分别指向polya和polyb多项式链表中的第一个节点
   q=polyb->next;
   tail=polya;      //tail指向和多项式的尾结点
   //引用tail 既可创建新的和多项式链表
   //也可以将单链表polyb 的结点插入到单链表polya中,tail是插入后的a
   //本程序tail是插入后的a
   while(p!=NULL &&q!=NULL)
   {
       if(p->exp < q->exp)
    //规则(1): p指向的多项式指数小于q的指数,将p结点缴入到和多项式中
       {
           tail->next=p;
           tail=p;
           p=p->next;
       }
    //规则(2):若指数相等,将p结点加入到和多项式中
       else if(p->exp == q->exp)
       {
           sum=p->coef+q->coef;
           if(sum!=0)   //系数和非0,则系数和置入结点p,加入到和多项式,释放结点,并将指针后移
           {
               p->coef=sum;
               tail->next=p; tail=p;
               p=p->next;
               temp=q; q=q->next;free(temp);
           }
           else     //系数和为0,则删除结点p与q,并将指针指向下一结点
           {
               temp=p; p=p->next; free(temp);
               temp=q; q=q->next; free(temp);
           }
       }
       else     //规则(3):将q节点加入到“和多项式中”
        {
           tail->next =q;  tail=q;
           q=q->next;
        }
   }
   if(p!=NULL) //多项式A中还有剩余,则将剩余的结点加入到和多项式中
   tail->next=p;
   else       // 否则,将B中的结点加入到和多项式中。
   tail->next =q;
}
int main()
{

    return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值