C语言(用链表实现多项式加法)

具体注释以及输入规则请点击该链接:https://blog.csdn.net/goodboydan/article/details/78409281
————————————————
node.h文件代码

#ifndef NODE_H_INCLUDED
#define NODE_H_INCLUDED

#include <stdio.h>

typedef struct Node
{
    float coef;
    int expo;
    struct Node* Next;
}Node;

typedef struct Node* PNode;


void PolySort(PNode head,PNode qNode);
void printfPoly(PNode head);
PNode AddPoly(PNode pa,PNode pb);
PNode checkPoly(PNode p);



#endif // NODE_H_INCLUDED

node.c文件代码

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

// 本函数引用原创作者代码(略有修改)
void PolySort(PNode head,PNode qNode)
{
    PNode p=head;
    while(p->Next)
    {
        if(p->Next->expo < qNode->expo)
        {
            qNode->Next=p->Next;
            p->Next=qNode;
            break;
        }
        else if(p->Next->expo == qNode->expo)
        {
            float sum=p->Next->coef+qNode->coef;
            p->Next->coef=sum;
            break;
        }
        p=p->Next;
    }

    if(p->Next==NULL)
    {
        p->Next=qNode;
    }
}

// 本函数引用原创作者代码(略有修改)
void printfPoly(PNode head)
{
    PNode tmp=head->Next;
    if(tmp->coef==0) printf("%.3f",tmp->coef);
    else printf("%.3fX^%d",tmp->coef,tmp->expo);
    tmp=tmp->Next;
    while(tmp)
    {
        if(tmp->coef>0)
        {
            printf("+%.3fX^%d",tmp->coef,tmp->expo);
        }
        else if(tmp->coef<0)
        {
            printf("%.3fX^%d",tmp->coef,tmp->expo);
        }
        tmp=tmp->Next;
    }
}

// 多项式相加
PNode AddPoly(PNode pa,PNode pb)
{
    Node *p=pa->Next;
    Node *q=pb->Next;
    Node *Head=(PNode)malloc(sizeof(struct Node));
    Head->Next=NULL;
    Node *current=Head;
    while(p&&q)
    {
        Node *snode=(PNode)malloc(sizeof(struct Node));
        snode->Next=NULL;
        if(p->expo > q->expo)
        {
            snode->coef=p->coef;
            snode->expo=p->expo;
            p=p->Next;
        }
        else if(p->expo==q->expo)
        {
            float x=p->coef+q->coef;
            snode->coef=x;
            snode->expo=p->expo;
            p=p->Next;
            q=q->Next;
        }
        else
        {
            snode->coef=q->coef;
            snode->expo=q->expo;
            q=q->Next;
        }
        current->Next=snode;
        current=snode;
    }
    while(p)
    {
        Node* snode=(PNode)malloc(sizeof(struct Node));
        snode->Next=NULL;
        snode->coef=p->coef;
        snode->expo=p->expo;
        current->Next=snode;
        current=snode;
        p=p->Next;
    }
    while(q)
    {
        Node* snode=(PNode)malloc(sizeof(struct Node));
        snode->Next=NULL;
        snode->coef=q->coef;
        snode->expo=q->expo;
        current->Next=snode;
        current=snode;
        q=q->Next;
    }

    return Head;
}

// 用于除去多项式中的零
PNode checkPoly(Node* p)
{
    Node* saveHead=p;
    Node* current=p->Next;
    Node* tmp;
    while(current)
    {
        if(current->coef==0 && current->Next==NULL && p==saveHead)
        {
            return saveHead;
        }
        else if(current->coef==0)
        {
            tmp=current;
            p->Next=current=current->Next;
            free(tmp);
            if(!current) break;
        }
        else
        {
            p=current;
            current=current->Next;
        }
    }
    return saveHead;
}

main.c文件代码

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


int main()
{
    float coef;
    int expo,n;
    PNode polysum;
    PNode head1=(PNode)malloc(sizeof(struct Node));
    PNode head2=(PNode)malloc(sizeof(struct Node));
    PNode tem=NULL;
    head1->Next=NULL;
    head2->Next=NULL;

    printf("n:\n");
    scanf("%d",&n);
    printf("input(Poly1):\n");

    while(n--)
    {
        scanf("%f,%d",&coef,&expo);
        tem=(PNode)malloc(sizeof(struct Node));
        tem->coef=coef;
        tem->expo=expo;
        tem->Next=NULL;
        PolySort(head1,tem);
    }
    printf("Poly:\n");
    head1=checkPoly(head1);
    printfPoly(head1);
    printf("\n");


    printf("n:\n");
    scanf("%d",&n);
    printf("input(Poly2:)\n");

    while(n--)
    {

        scanf("%f,%d",&coef,&expo);
        tem=(PNode)malloc(sizeof(struct Node));
        tem->coef=coef;
        tem->expo=expo;
        tem->Next=NULL;
        PolySort(head2,tem);
    }
    printf("Poly2:\n");
    head2=checkPoly(head2);
    printfPoly(head2);
    printf("\n Sum:\n");
    polysum=AddPoly(head1,head2);
    printfPoly(polysum);


    return 0;
}

本代码使用Code::Blocks 20.03软件测试通过,如有错误,恳请各位批评指正!

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
下面是 C 语言中用链表实现多项式加法的代码: ```c #include <stdio.h> #include <stdlib.h> // 定义多项式结点 typedef struct PolyNode { int coef; // 系数 int expon; // 指数 struct PolyNode* next; } PolyNode, *PolyList; // 多项式加法 PolyList PolyAdd(PolyList P1, PolyList P2) { PolyList front, rear, temp; int sum; // 初始化空结点 rear = (PolyList)malloc(sizeof(PolyNode)); front = rear; while (P1 && P2) { if (P1->expon == P2->expon) { sum = P1->coef + P2->coef; if (sum) { temp = (PolyList)malloc(sizeof(PolyNode)); temp->coef = sum; temp->expon = P1->expon; rear->next = temp; rear = temp; } P1 = P1->next; P2 = P2->next; } else if (P1->expon > P2->expon) { temp = (PolyList)malloc(sizeof(PolyNode)); temp->coef = P1->coef; temp->expon = P1->expon; rear->next = temp; rear = temp; P1 = P1->next; } else { temp = (PolyList)malloc(sizeof(PolyNode)); temp->coef = P2->coef; temp->expon = P2->expon; rear->next = temp; rear = temp; P2 = P2->next; } } // 将未处理完的结点添加到结果链表中 for (; P1; P1 = P1->next) { temp = (PolyList)malloc(sizeof(PolyNode)); temp->coef = P1->coef; temp->expon = P1->expon; rear->next = temp; rear = temp; } for (; P2; P2 = P2->next) { temp = (PolyList)malloc(sizeof(PolyNode)); temp->coef = P2->coef; temp->expon = P2->expon; rear->next = temp; rear = temp; } // 结束链表 rear->next = NULL; // 删除空结点 temp = front; front = front->next; free(temp); return front; } // 创建多项式 PolyList CreatePoly() { PolyList P, rear, temp; int coef, expon; // 初始化空结点 rear = (PolyList)malloc(sizeof(PolyNode)); P = rear; // 输入多项式系数和指数 while (scanf("%d %d", &coef, &expon) == 2) { if (!coef || !expon) { break; } temp = (PolyList)malloc(sizeof(PolyNode)); temp->coef = coef; temp->expon = expon; rear->next = temp; rear = temp; } // 结束链表 rear->next = NULL; // 删除空结点 temp = P; P = P->next; free(temp); return P; } // 打印多项式 void PrintPoly(PolyList P) { if (!P) { printf("0 0\n"); return; } for (; P; P = P->next) { printf("%d %d", P->coef, P->expon); if (P->next) { printf(" "); } } printf("\n"); } int main() { PolyList P1, P2, PP; // 创建多项式 P1 和 P2 printf("请输入多项式 P1:\n"); P1 = CreatePoly(); printf("请输入多项式 P2:\n"); P2 = CreatePoly(); // 求多项式 P1 和 P2 的和 PP = PolyAdd(P1, P2); // 打印结果 printf("P1 + P2 = "); PrintPoly(PP); return 0; } ``` 以上代码中,首先定义了多项式结点 `PolyNode`,然后定义了多项式链表 `PolyList`,其中每个结点包含系数 `coef` 和指数 `expon` 两个成员,以及一个指向下一个结点的指针 `next`。 接着,定义了函数 `PolyAdd` 实现多项式加法,它通过遍历两个多项式链表,将指数相同的项相加,并添加到结果链表中,最后返回结果链表。 函数 `CreatePoly` 用于创建多项式,它通过输入系数和指数,创建多项式链表并返回。 函数 `PrintPoly` 用于打印多项式,它遍历多项式链表并按格式输出。 在 `main` 函数中,先分别创建多项式 `P1` 和 `P2`,然后求它们的和 `PP`,最后输出结果。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

带带萌新JAMMY BEAR

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值