线性表的应用(计算多项式)C语言实现

本文介绍了如何使用C语言定义一个多项式结构,并提供了两个函数:用于创建多项式和将两个多项式相加。加法函数考虑了指数相等和不等的情况。最后展示了多项式的显示功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

typedef struct PNode{
    float coef;  //系数
    int expn;  //指数
    struct PNode *next;  //指针域
}PNode,*Polynomial;

void creat_polynomial(Polynomial *P,int n){
    (*P)=(Polynomial) malloc(sizeof (PNode));
    (*P)->next=NULL;
    for(int i=0;i<n;i++){
        Polynomial s=(Polynomial) malloc(sizeof (PNode));
        scanf("%f %d",&s->coef,&s->expn);
        Polynomial pre,q;
        pre=(*P);
        q=(*P)->next;
        while(q&&q->expn<s->expn){
            pre=q;
            q=q->next;
        }
        s->next=q;
        pre->next=s;
    }
}

void AddPolyn(Polynomial PA,Polynomial PB){
    Polynomial p1=PA->next;
    Polynomial p2=PB->next;
    Polynomial p3=PA;  //也可以指向PB
    while(p1&&p2){
        if(p1->expn==p2->expn){  //指数相等
            int sum=p1->coef+p2->coef;
            if(sum!=0){  //系数不为0
                p1->coef=sum;
                p3->next=p1;
                p3=p1;
                p1=p1->next;
                Polynomial temp=p2;  //设置临时变量保存p2
                p2=p2->next;
                free((Polynomial)temp);
            }
            else  //系数为0,释放内存空间
            {
                Polynomial p1_=p1;
                Polynomial p2_=p2;
                p1=p1->next;
                p2=p2->next;
                free((Polynomial)p1_);
                free((Polynomial)p2_);
            }
        }
        else if(p1->expn<p2->expn){
             p3->next=p1;
             p3=p1;
             p1=p1->next;
        }
        else{
            p3->next=p2;
            p3=p2;
            p2=p2->next;
        }
    }
    p3->next=p1?p1:p2;
    free((Polynomial)PB);  //释放PB链表的头结点
}
void display(Polynomial P){
    P=P->next;
    while(P){
        printf("%fx%d,",P->coef,P->expn);
        P=P->next;
    }
}
int main(){
    Polynomial Pa,Pb;
    creat_polynomial(&Pa,2);
    creat_polynomial(&Pb,2);
    AddPolyn(Pa,Pb);
    display(Pa);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值