C语言:用链表表示多项式并完成输入、运算和输出。

可利用链表表示一个多项式,如3x^5-2x+1可用(3,5)、(-2,1)、(1,0)序列的链表表示。请设计能进行两个多项式加、减、乘运算的函数,并设计相应程序能根据要求... 可利用链表表示一个多项式,如3x^5-2x+1可用 (3,5)、(-2,1)、(1,0)序列的链表表示。请设计能进行两个多项式加、减、乘运算的函数,并设计相应程序能根据要求进行多项式输入、运算和输出。 展开
 我来答
匿名用户
2015-04-11
展开全部
#include<stdio.h>  
#include<stdlib.h>  
#include<malloc.h>  
typedef int ElemType;  
   
/*单项链表声明*/  
typedef struct PolynNode{  
    int coef; // 系数  
    int expn; // 指数  
    struct PolynNode *next;  
}PolynNode,*PolynList;  
   
/*位序(插表尾)输入n元素值建立带表结构单链线性表*/  
/*指数系数输入*/  
void CreatePolyn(PolynList &L,int n)  
{  
    int i;  
    PolynList p,q;  
    L=(PolynList)malloc(sizeof(PolynNode)); // 结点  
    L->next=NULL;  
    q=L;  
    printf("输入%d数据\n",n);  
    for(i=1;i<=n;i++)  
    {  
        p=(PolynList)malloc(sizeof(PolynNode));  
        scanf("%d%d",&p->coef,&p->expn);    //指数系数输入  
        q->next=p;  
        q=q->next;  
    }  
    p->next=NULL;  
}  
   
// 初始条件:单链表L已存  
// 操作结: 依L每数据元素调用函数vi()旦vi()失败,则操作失败  
void PolynTraverse(PolynList L,void(*vi)(ElemType, ElemType))  
{  
    PolynList p=L->next;  
    while(p)  
    {  
        vi(p->coef, p->expn);  
        if(p->next)  
        {  
            printf(" + ");   //+号输项面没+  
        }  
        p=p->next;  
    }  
    printf("\n");  
}  
   
/*ListTraverse()调用函数(类型要致)*/  
void visit(ElemType c, ElemType e)   
{  
    if(c != 0)  
    {  
        printf("%dX^%d",c,e);   //格式化输项式每项  
    }  
}  
   
/*    项式相加原理:归并        */  
/* 参数:两已经存项式       */  
/* 返值:归并新项式结点 */  
PolynList MergeList(PolynList La, PolynList Lb)  
{  
    PolynList pa, pb, pc, Lc;  
    pa = La->next;  
    pb = Lb->next;  
    Lc = pc = La;   // 用La结点作Lc结点  
    while(pa&&pb)  
    {  
        if(pa->expn < pb->expn)          
        {                                
            pc->next = pa;             //指数相等pc指针连指数结点  
            pc = pa;  
            pa = pa->next;             //指向该结点指针移  
        }  
        else if (pa ->expn > pb->expn )      
        {  
            pc->next = pb;               //pc指针连指数结点  
            pc = pb;  
            pb = pb->next;               //指向该结点指针移  
        }  
        else   //(pa ->expn = pb->expn )  
        {  
            pa->coef = pa->coef + pb->coef;     //指数相等系数相加  
            pc->next = pa;  
            pc = pa;  
            pa = pa->next;             //两指针都往移  
            pb = pb->next;  
        }  
    }  
   
    pc->next = pa ? pa:pb;  // 插入剩余段  
   
    return Lc;  
}  
   
void main()  
{  
    PolynList ha,hb,hc;  
    printf("非递减输入项式ha ");  
    CreatePolyn(ha,5);   // 位序输入n元素值  
   
    printf("非递减输入项式hb ");  
    CreatePolyn(hb,5);   // 位序输入n元素值  
   
    printf("项式ha :");  
    PolynTraverse(ha, visit);  
    printf("\n");  
    printf("项式hb :");  
    PolynTraverse(hb, visit);  
    printf("\n");  
   
    hc = MergeList(ha,hb);  
    PolynTraverse(hc, visit);  
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式