| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 500 人关注过本帖
标题:给力啊!!!多项式合并的问题,请帮忙!!!
只看楼主 加入收藏
lizjohn
Rank: 1
等 级:新手上路
帖 子:54
专家分:0
注 册:2010-10-28
结帖率:70.59%
收藏
已结贴  问题点数:11 回复次数:5 
给力啊!!!多项式合并的问题,请帮忙!!!
#include<stdio.h>
#include<stdlib.h>
struct list
{
    int exp;                //指数
    int ceof;                //系数
    struct list*next;
};
struct list* creat()                   //建立
{
    struct list*p1,*p2,*sq;
    p2=sq=(struct list*)malloc(sizeof(struct list));
    p1=(struct list*)malloc(sizeof(struct list));
    scanf(" %d,%d",&p1->exp,&p1->ceof);
    while(p1->exp!='#')
    {
        p2->next=p1;
        p2=p1;
        p1=(struct list*)malloc(sizeof(struct list));
        scanf(" %d%d",&p1->exp,&p1->ceof);
    }
    p2->next=NULL;
    return sq;
}
int compare(int x,int y)               //比较两多项式的指数
{
    if(x<y)
        return 1;
    if(x>y)
        return -1;
    if(x=y)
        return 0;
}
void main()
{
    struct list*l1,*l2,*pa,*pb,*ha,*hb,*t;
    int a,b,flag,sum;
    printf("多项式1:\n");
    l1=creat();
    printf("多项式2:\n");
    l2=creat();
    pa=l1->next;
    pb=l2->next;
    ha=l1;
    hb=l2;
    while((pa!=NULL)&&(pb!=NULL))
    {
        a=pa->exp;
        b=pb->exp;
        flag=compare(a,b);
        switch(flag)                            //通过比较,将新的多项式接在l1上
        {
        case 1:
            ha=pa;
            pa=pa->next;
            break;
        case -1:
            sum=(pa->ceof+pb->ceof);
            if(sum!=0)
            {pa->ceof=sum;
            ha=pa;
            pa=pa->next;
            }
            else
            {
                ha->next=pa->next;
                free(pa);
                hb->next=pb->next;
                free(pb);
                pb=hb->next;
            }
            break;
        case 0:
            pb->next=ha->next;
            ha->next=pb;
            ha=pb;
            pb=hb->next;
            break;
        }
        
        if(pb!=NULL)
            ha->next=pb;
    }
    t=l1->next;
    while(t!=NULL)
    {
        printf(" %d,%d\n",t->exp,t->ceof);
        t=t->next;
    }
   
}


我想实现两多项式的合并,但从输入就有问题,一直停不下来,好像陷入死循环,死机了,请高手帮我!!!
搜索更多相关主题的帖子: 多项式 
2010-11-10 21:49
遮天云
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:农村一小伙
等 级:贵宾
威 望:12
帖 子:1132
专家分:2671
注 册:2010-6-1
收藏
得分:11 
程序代码:
#include<stdio.h>
#include<malloc.h>
#include<conio.h>
typedef struct node{
int xi;
int zi;
struct node *next;
}Node;

Node *Creat() 
{ //尾插法建立多项式链表
Node *head,*p,*pre;
int fg,tag;
head=(Node *)malloc(sizeof(Node));
head->next=NULL;
pre=head;
printf("请按照指数从小到大输入多项式并以0 0结束:\n");
scanf("%d%d",&fg,&tag);
while(fg)
{
p=(Node *)malloc(sizeof(Node));
p->xi=fg;
p->zi=tag;
p->next=pre->next;
pre->next=p;
pre=p;
scanf("%d%d",&fg,&tag);
}
if(fg==0&&tag==0)
printf("\n输入结束:\n");
return head;
}

void Read(Node *head) //读取链表中的数据
{
Node *p=head->next;
while(p)
{
printf("%dX~%d->",p->xi,p->zi);
p=p->next;
}
printf("NULL\n");
}

Node *Add(Node *head1,Node *head2)
{ //多项式相加的实现
Node *p,*head,*p1,*p2;int sum;
head=(Node *)malloc(sizeof(Node));
p=head;
p1=head1->next;
p2=head2->next;
while(p1&&p2) //当两多项式都存在时
{
if(p1->zi==p2->zi) //指数是否相等 相等怎么处理 
{
sum=p1->xi+p2->xi;
if(sum)
{
p1->xi=sum;
p->next=p1;
p=p1;
}
p1=p1->next;
p2=p2->next;
}
else //不相等分两种情况
{
if(p1->zi<p2->zi) 
{ //分别怎么处理
p->next=p1;
p=p1;
p1=p1->next;
}
else
{
p->next=p2;
p=p2;
p2=p2->next;
}

}
}
if(p1) p->next=p1; //将1中剩余结点接到和链表中 因为最终只剩下一段链表多项式,只需要将
else p->next=p2; //将2中剩余结点接到和链表中 这段链的链头接到目标链表就可以了
return head;
}

void main()
{ //主函数
Node *head,*p1,*p2;
p1=Creat();
Read(p1);
p2=Creat();
Read(p2);
head=Add(p1,p2);
printf("相加后为:\n");
Read(head);
getch();
}

没时间给你改了,看看这段代码吧,拓展下思路
2010-11-11 18:37
wujieru
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:1
帖 子:1108
专家分:1939
注 册:2010-10-9
收藏
得分:0 
楼上你就这么闲吗?
2010-11-11 18:54
遮天云
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:农村一小伙
等 级:贵宾
威 望:12
帖 子:1132
专家分:2671
注 册:2010-6-1
收藏
得分:0 
以下是引用wujieru在2010-11-11 18:54:19的发言:

楼上你就这么闲吗?

我终于知道为什么人家发短消息骂你了,哥表示无语,放心哥是一个不喜欢骂人的粗人

[ 本帖最后由 遮天云 于 2010-11-11 19:01 编辑 ]
2010-11-11 18:57
wujieru
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:1
帖 子:1108
专家分:1939
注 册:2010-10-9
收藏
得分:0 
且 你算什么
2010-11-11 19:43
遮天云
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:农村一小伙
等 级:贵宾
威 望:12
帖 子:1132
专家分:2671
注 册:2010-6-1
收藏
得分:0 
以下是引用wujieru在2010-11-11 19:43:28的发言:

且 你算什么

果然淡定,被别人骂那么难听,居然还跟没事的人一样,淡定妹子啊
2010-11-11 19:53
快速回复:给力啊!!!多项式合并的问题,请帮忙!!!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016525 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved