您的位置:首页 > 其它

链表之一元多项式加法

2016-07-28 19:11 274 查看
A=7+3x+9x^8+5x^17

b=8x+22x^7-9x^8

c=A+b=7+11x+22x^7+5x^17

#include<stdio.h>

#include<malloc.h>

#include<stdlib.h>

#define  LEN  sizeof(LNode)

typedef struct LNode

{

    int coef;

    int exp;

    struct LNode *next;

}* Link;

typedef struct

{

    Link head,tail;

    int len;

} LinkList;

Link InitList(LinkList &L)

{

    int c,e;

    Link r;//r相当于*tail

    L.head=(LNode *)malloc(LEN);

    r=L.head;

//printf("输入系数:");

    scanf("%d",&c);

//printf("输入指数:");

    scanf("%d",&e);

    while(c!=0)

    {

        L.tail=(LNode *)malloc(LEN);//新节点

        L.tail->coef=c;

        L.tail->exp=e;

        r->next=L.tail;

        r=L.tail;

//printf("输入系数:");

        scanf("%d",&c);

//printf("输入指数:");

        scanf("%d",&e);

    }

    r->next=NULL;

    return (L.head);

}

void free(Link t)

{

    t->next=NULL;

}

void Add(Link pa,Link pb)

{

    Link p,q,tail,temp;

    int sum;

    p=pa->next;

    q=pb->next;

    tail=pa;

    while(p!=NULL&&q!=NULL)//有序链表的归并

    {

        if(p->exp<q->exp)

        {

            tail->next=p;

            tail=p;

            p=p->next;

        }

        else if(p->exp==q->exp)

        {

            sum=p->coef+q->coef;

            if(sum!=0)

            {

                p->coef=sum;

                tail->next=p;

                tail=p;

                p=p->next;

                q=q->next;

              

            }

            else

            {

                temp=p->next;

                free(p);

                p=temp;

                temp=q->next;

                free(q);

                q=temp;

            }

        }

        else

        {

            tail->next=q;

            tail=q;

            q=q->next;

        }

    }

    if(p!=NULL)

        tail->next=p;

    else

        tail->next=q;

}

void print(Link p)

{

    while(p->next!=NULL)

    {

        p=p->next;

        if(p->next!=NULL)

            printf("   %d*x^%d+",p->coef,p->exp);

        else

            printf("   %d*x^%d",p->coef,p->exp);

    }

}

void main()

{

    Link pa,pb;

    LinkList ppa,ppb;

    printf("\t一元多项式的相加算法!\n");

    printf("请分别有序地输入第一个一元多项式的系数和指数,输入为0时为结束!\n");

    pa=InitList(ppa);

    printf("你输入的多项式为:\n");

    print(pa);

    printf("\n");

    printf("请分别有序地输入第二个一元多项式的系数和指数,输入为0时为结束!\n");

    pb=InitList(ppb);

    printf("你输入的多项式为:\n");

    print(pb);

    printf("\n");

    printf("两个一元多项式的和为:\n");

    Add(pa,pb);

    print(pa);

    printf("\n");

}

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: