| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 879 人关注过本帖
标题:求助!多项式合并问题!
只看楼主 加入收藏
梦想中国
Rank: 2
等 级:新手上路
威 望:5
帖 子:539
专家分:0
注 册:2006-2-26
收藏
 问题点数:0 回复次数:1 
求助!多项式合并问题!

请诸位帮我看看下面的程序为什么不能将两个多项式合并:

#include<stdio.h>
#include<stdlib.h>
typedef struct LNode{
float coef;
int expn;
struct LNode *next;
}Lnode,*LinkList;

LinkList CreatePoly(LinkList L,float ccoef,int eexpn);
LinkList MergePoly(LinkList La,LinkList Lb);
LinkList Insert(LinkList La,LinkList Pb);
void Output(LinkList L);

int main(void)
{
LinkList La=NULL,Lb=NULL;
Lnode P;
int i,n;

printf("Please input La length: ");
scanf("%d",&n); //代表多项式项数
for(i=1;i<=n;i++) //创建多项式La
{
scanf("%f",&P.coef);
scanf("%d",&P.expn);
La=CreatePoly(La,P.coef,P.expn);
Output(La); //输出多项式
}

printf("Please input Lb length: ");
scanf("%d",&n);
for(i=1;i<=n;i++) //创建多项式Lb
{
scanf("%f",&P.coef);
scanf("%d",&P.expn);
Lb=CreatePoly(Lb,P.coef,P.expn);
Output(Lb);
}

La=MergePoly(La,Lb); //合并两个多项式
Output(La);

return 0;
}

LinkList CreatePoly(LinkList L,float ccoef,int eexpn) //创建多项式函数
{
LinkList newPtr,previousPtr,currentPtr;

if((newPtr=(LinkList)malloc(sizeof(Lnode)))==NULL) //动态内存分配
{
exit(1);
}
newPtr->coef=ccoef;
newPtr->expn=eexpn;
newPtr->next=NULL;
previousPtr=NULL;
currentPtr=L;
while(currentPtr && currentPtr->expn > newPtr->expn) //按指数有大到小排序
{
previousPtr=currentPtr;
currentPtr=currentPtr->next;
}
if(!previousPtr) //多项式链表为空时
{
newPtr->next=L;
L=newPtr;
}
else
{
previousPtr->next=newPtr;
newPtr->next=currentPtr;
}

return L;
}

LinkList MergePoly(LinkList La,LinkList Lb) //合并两个多项式
{
LinkList Pb,temp;

if(!La) //多项式La为空时
return Lb;
else if(!Lb) //多项式Lb为空时
return La;
else
{
Pb=Lb; //Pb指向多项式第一项
while(Pb) //依次取Lb中的项插入到La中
{
La=Insert(La,Pb);
Pb=Pb->next;
}
}
while(Lb) //释放多项式Lb的内存
{
temp=Lb;
Lb=Lb->next;
free(temp);
}

return La;
}

LinkList Insert(LinkList La,LinkList Pb)
{
LinkList previousPtr,currentPtr;

previousPtr=NULL;
currentPtr=La;
while(currentPtr && currentPtr->expn > Pb->expn)
{
previousPtr=currentPtr;
currentPtr=currentPtr->next;
}
if(currentPtr->expn==Pb->expn) //指数相同情况下
{
currentPtr->coef+=Pb->coef;
}
else //指数不相同情况下
{
previousPtr->next=Pb;
Pb->next=currentPtr;
}

return La;
}

void Output(LinkList L)
{
while(L)
{
printf("%.0fx(%d)->",L->coef,L->expn);
L=L->next;
}
printf("NULL\n");
}

搜索更多相关主题的帖子: 多项式 LinkList int float void 
2006-03-21 23:38
feng1256
Rank: 4
等 级:贵宾
威 望:14
帖 子:2899
专家分:0
注 册:2005-11-24
收藏
得分:0 

可正常运行
[CODE]
#include<stdio.h>
#include<stdlib.h>
typedef struct LNode{
float coef;
int expn;
struct LNode *next;
}Lnode,*LinkList;

LinkList CreatePoly(LinkList L,float ccoef,int eexpn);
LinkList MergePoly(LinkList La,LinkList Lb);
LinkList Insert(LinkList La,LinkList Pb);
void Output(LinkList L);

int main(void)
{
LinkList La=NULL,Lb=NULL,temp;
Lnode P;
int i,n;

printf("Please input La length: ");
scanf("%d",&n);
for(i=1;i<=n;i++)
{
scanf("%f",&P.coef);
scanf("%d",&P.expn);
La=CreatePoly(La,P.coef,P.expn);

}

printf("Please input Lb length: ");
scanf("%d",&n);
for(i=1;i<=n;i++)
{
scanf("%f",&P.coef);
scanf("%d",&P.expn);
Lb=CreatePoly(Lb,P.coef,P.expn);

}
La=MergePoly(La,Lb);
Output(La);
while(Lb)
{
temp=Lb;
Lb=Lb->next;
free(temp);
}
while(Lb)
{
temp=Lb;
Lb=Lb->next;
free(temp);
}

getch();

return 0;
}

LinkList CreatePoly(LinkList L,float ccoef,int eexpn)
{
LinkList newPtr,previousPtr,currentPtr;

if((newPtr=(LinkList)malloc(sizeof(Lnode)))==NULL)
{
exit(1);
}
newPtr->coef=ccoef;
newPtr->expn=eexpn;
newPtr->next=NULL;
previousPtr=NULL;
currentPtr=L;
while(currentPtr && currentPtr->expn > newPtr->expn)
{
previousPtr=currentPtr;
currentPtr=currentPtr->next;
}
if(!previousPtr)
{
newPtr->next=L;
L=newPtr;
}

else
{
previousPtr->next=newPtr;
newPtr->next=currentPtr;
}

return L;
}

LinkList MergePoly(LinkList La,LinkList Lb)
{


if(!La)
return Lb;
else if(!Lb)
return La;
else
{

while(Lb)
{
La=Insert(La,Lb);
Lb=Lb->next;
}
}


return La;
}
LinkList Insert(LinkList La,LinkList Lb)
{
LinkList previousPtr,currentPtr;

previousPtr=NULL;
currentPtr=La;

while( currentPtr && (currentPtr->expn > Lb->expn ))
{
previousPtr=currentPtr;
currentPtr=currentPtr->next;

}

if(currentPtr->expn==Lb->expn)
currentPtr->coef+=Lb->coef;
else
La=CreatePoly(La,Lb->coef,Lb->expn);
return La;
}


void Output(LinkList L)
{
while(L)
{
printf("%fx(%d)->",L->coef,L->expn);
L=L->next;
}
printf("NULL\n");
}



[/CODE]

[此贴子已经被作者于2006-3-22 15:09:27编辑过]


叁蓙大山:工謪、稅務、嗣發 抱歉:不回答女人的问题
2006-03-22 05:28
快速回复:求助!多项式合并问题!
数据加载中...
 
   



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

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