鱼C论坛

 找回密码
 立即注册
查看: 5977|回复: 3

一元多项式加法

[复制链接]
发表于 2017-10-20 11:02:36 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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

//定义结构体变量  一元多项式 系数 指数 下一个节点
typedef struct PolyNode
{
        float coaf;//系数
        int exp;//指数
        struct PolyNode *link;//指针域

}PolyNode,*PolyLinkList;


//后插法创建两个单链表
struct PolyNode *creatListF(int n)
{
        
        
        struct PolyNode *head,*q,*r;//q 新增加的节点  r 当前节点 
        int coef,exp,i;
        head =(struct PolyNode *)malloc (sizeof(struct PolyNode));
        r=head;
for(i=1;i<n;i++)
{
        scanf("%f%d",&coef,&exp);
        q=(struct PolyNode *)malloc (sizeof(struct PolyNode));
        r->link=q;
        q->coaf=coef;
        q->exp=exp;
        r=q;
        
}
        r->link=NULL;
        return head;
}



//算法 多项式相加
struct PolyNode *add_poly(struct PolyNode *AH,struct PolyNode *BH)
{
        struct PolyNode *p1,*q1,*r,*s;//A、B链表的当前指针 和链表的当前指针 S指向要删除的节点
        p1=AH->link;//第一个节点
        q1=BH->link;
        r=AH->link;
        while(p1!=NULL&&q1!=NULL)
        {
                        //判断 指数是否相等
                        if(p1->exp==q1->exp)
        {
                //判断系数相加是否为零
                int x = q1->exp+q1->exp;
                if(x!=0)
                {
                        //p1系数改变 和链表头结点指向p1 q1对应free q1 指向后移  q1指向后移
                        p1->coaf=x;
                        r->link=p1;
                        r=p1;
                        p1=p1->link;
                        s=q1;
                        free(s);
                        q1=q1->link;
                }
                else
                {//两个链表的当前指针同时后移
                        s=p1;free(s);p1=p1->link;
                        s=q1;free(s);q1=q1->link;

                }
        }
        else if(p1->exp<q1->exp)
        {
                //和链表指向拥有指数小节点的链表
                r->link=p1;r=p1;p1=p1->link;

        }
        else
        {
                r->link=q1;r=q1;q1=q1->link;
        }//剩余节点
        if(p1!=NULL){r->link=p1;};
        if(q1!=NULL){r->link=q1;};
        }
        free(BH);
        return AH;
}

//遍历
void DispList(PolyNode *l)
{
        //输出每一个节点
        //p为当前节点
        PolyNode *p = l->link;
        while(p!=NULL)
        {
                printf("%fx%d",p->coaf,p->exp);
                p=p->link;
        }
        printf("\n");
}
int main ()
{
        PolyNode *A;
        PolyNode *B;
        
        A=creatListF(5);
        DispList(A);
        printf("\n");
        
        B=creatListF(5);
        DispList(B);
        printf("\n");
        
        add_poly(A,B);
        DispList(A);
        
        return 0;

}


不知道为什么输出结果是这样的

数据的格式出了什么问题吗 还是我的程序写得有问题

数据的格式出了什么问题吗  还是我的程序写得有问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-10-22 18:16:32 | 显示全部楼层
21行,
int coef,exp,i;;
改成
float ceof;
display函数改成:
void DispList(PolyNode *l)
{
    //输出每一个节点
    //p为当前节点
    PolyNode *p = l->link;
    while (p->link != NULL)
    {
        printf("%.1fx^%d + ", p->coaf, p->exp);
        p = p->link;
    }
    printf("%.1fx^%d", p->coaf, p->exp);
    printf("\n");
}
QQ截图20171022181617.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-10-24 14:46:02 | 显示全部楼层
Crazy_Snail 发表于 2017-10-22 18:16
21行,改成
display函数改成:

谢谢   不过能不能给我解释一下为什么么
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-5-15 07:34:23 | 显示全部楼层
看来还有很多东西要学习啊!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-7-5 00:09

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表