链表之一元多项式加法

来源:互联网 发布:ubuntu 列出所有用户 编辑:程序博客网 时间:2024/05/21 21:35

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");
}

 

0 0
原创粉丝点击