我正在编写代码以使用链表执行多项式加法和乘法。

时间:2018-10-08 15:34:43

标签: c

在我的代码中,附加部分正在工作。但是乘法部分无法正常工作。问题出在create_node()函数中……以及将2个多项式相乘的循环。 代码是:

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

struct node
{
    int cof;
    int exp;
    struct node* next; 
}*phead ,*rt, *qhead , *rhead,*newh,*ph,*qh,*rh;

void create_node(struct node* header)
{
    int degree,c,i;
    header->next=NULL;
    struct node* ptr = (struct node*)malloc(sizeof(struct node*));
    printf("Enter the degree of the polynomial:");
    scanf("%d",&degree);
    for(i=degree; i>=0; i--)
    {
        printf("Enter the coficient of x^%d:",i);
        scanf("%d",&c);
        if(c!=0)
        {
            struct node* newnode = (struct node*)malloc(sizeof(struct node*));
            newnode->cof = c;
            newnode->exp = i;
            if(header->next==NULL)
            {
                header->next = newnode;
                ptr=newnode;
            }
            else
            {
                ptr->next=newnode;
                ptr=ptr->next;
            }
        }
    }
    ptr->next=NULL;

}

void display()
{
    struct node *pptr,*qptr,*rptr;
    pptr=phead->next;
    qptr=qhead->next;
    rptr=rhead->next;

    printf("\nThe entered polynomials are:");
    printf("\npolynomial 1:");
    while(pptr!=NULL)
    {
        printf("%dx^%d + ",pptr->cof,pptr->exp);
        pptr = pptr->next;
    }
    printf("\npolynomial 2:");
    while(qptr!=NULL)
    {
        printf("%dx^%d + ",qptr->cof,qptr->exp);
        qptr = qptr->next;
    }

    printf("\nThe resultant  polynomial is:");
    while(rptr!=NULL)
    {
        printf("%dx^%d + ",rptr->cof,rptr->exp);
        rptr = rptr->next;
    }
}

void displayp()
{
    struct node *p1,*q1,*r1;
    p1=ph->next;
    q1=qh->next;
    r1=rh;

    printf("\nThe entered polynomials are:");
    printf("\npolynomial 1:");
    while(p1!=NULL)
    {
        printf("%dx^%d + ",p1->cof,p1->exp);
        p1 = p1->next;
    }
    printf("\npolynomial 2:");
    while(q1!=NULL)
    {
        printf("%dx^%d + ",q1->cof,q1->exp);
        q1 = q1->next;
    }

    printf("\nThe resultant  polynomial is:");
    while(r1!=NULL)
    {
        printf("%dx^%d + ",r1->cof,r1->exp);
        r1 = r1->next;
    }
}
void main()
{
    struct node *pptr , *qptr , *rptr,*pn,*pn1,*x,*pt,* qt,*rt;
    phead = (struct node *)malloc(sizeof(struct node));
    qhead = (struct node *)malloc(sizeof(struct node));
    rhead = (struct node *)malloc(sizeof(struct node));
    pn = (struct node *)malloc(sizeof(struct node));
    pn1 = (struct node *)malloc(sizeof(struct node));

    create_node(phead);
    create_node(qhead);



    pptr = phead;
    qptr = qhead;
    rptr = rhead;
    x = rhead;
    while (pptr!=NULL && qptr!=NULL)
    {
        newh = (struct node *)malloc(sizeof(struct node));
        if (pptr->exp == qptr->exp)
        {
            newh->cof = pptr->cof + qptr->cof;
            newh->exp = pptr->exp; 
            pptr = pptr->next;
            qptr = qptr->next;
        }

        else if (pptr->exp>qptr->exp)
        {

            newh->cof = pptr->cof;
            newh->exp = pptr->exp;
            pptr = pptr->next;
        }

        else if (pptr->exp<qptr->exp)
        {
            newh->cof = qptr->cof;
            newh->exp = qptr->exp;
            qptr = qptr->next;
        }
        if (rhead == NULL)
        {
            rhead = newh;
            rptr = newh;
        }
        else
        {
            rptr->next = newh;
            rptr = newh;
        }
    }
    while (pptr!=NULL)
    {
        newh = (struct node *)malloc(sizeof(struct node));
        newh->cof = pptr->cof;
        newh->exp = pptr->exp;
        newh->next = NULL;
        rptr->next = newh;
        rptr = newh;
        pptr = pptr->next;
    }
    while (qptr!=NULL)
    {
        newh = (struct node *)malloc(sizeof(struct node));
        newh->cof = qptr->cof;
        newh->exp = qptr->exp;
        newh->next = NULL;
        rptr->next = newh;
        rptr = newh;
        qptr = qptr->next;
    }
    display();
               printf("---------------------------------------\n");
         printf("POLYNOMIAL MULTIPLICATION\n");
         ph = (struct node *)malloc(sizeof(struct node));
         qh = (struct node *)malloc(sizeof(struct node));
         rt = (struct node *)malloc(sizeof(struct node));
         create_node(ph);
         create_node(qh);
 //      displayp();
         printf("\n");
         pt = ph->next;
         qt = qh->next;
         rh = NULL;
         //rt = rh;
         while (pt!=NULL)
         {
                 while (qt!=NULL)
                 {
                         if (rh == NULL)
                         {
                                 rt->cof = pt->cof * qt->cof;
                                 rt->exp = pt->exp + qt->exp;
                                 rh = rt;
                                //pt = pt->next;
                                              //rt->next = NULL;
                                 qt = qt->next;
                         }
                         else
                         {
                                 struct node *nw = (struct node *)malloc(sizeof(struct node));
                                 nw->cof = pt->cof * qt->cof;
                                 nw->exp = pt->exp + qt->exp;
                                 //nw->next = NULL;
                                 rt->next = nw;
                                 rt = rt->next;
                                 qt = qt->next;
                         }
                 }
         //       displayp();
                 pt = pt->next;

         }

         displayp();
 }

病得很严重。在乘法循环中,第一个节点与第二个多项式中的所有其他节点相乘。然后执行停止。 pt = pt->下一步未执行。

请帮助

0 个答案:

没有答案