多项式合并同类项c语言链表,链表透过文件读写计算两个多项式之积

当前位置:我的异常网» C语言 » 链表透过文件读写计算两个多项式之积

链表透过文件读写计算两个多项式之积

www.myexceptions.net  网友分享于:2014-03-24  浏览:10次

链表通过文件读写计算两个多项式之积

写了这个程序,输出结果

10061572.jpg

怎样才能改正啊,我是新人不怎么会调试,请大神指导!

// 数据结构02.cpp : 定义控制台应用程序的入口点。

//

#include "stdafx.h"

#include 

#include 

#define NULL 0

#define LEN sizeof(struct polyn)

typedef struct polyn

{

double coef;

double e;

struct polyn *next;

}POLYN;

POLYN *creatpolyn();//创建多项式

void InsertPolyn(POLYN *head, POLYN* s);//排序插入,从小到大,且合并同类项

void polynout(POLYN *head, char *s);//输出多项式

POLYN *polynmulti(POLYN *ha, POLYN *hb);//多项式求积

void Clearlist(POLYN *head);//释放链表

int main()

{

POLYN *ha,*hb,*hc;

ha = creatpolyn();

polynout(ha,"ha;");

hb = creatpolyn();

polynout(hb,"hb;");

Clearlist(ha);

Clearlist(hb);

return 0;

}

POLYN *creatpolyn()

{

POLYN *phead = NULL;

POLYN *pnode = NULL;

phead = (struct polyn*)malloc(LEN);

if (NULL== phead)

return NULL;

phead ->coef = 0;

phead->e = -1;

phead->next = NULL;

POLYN polyn;

FILE *fp1;

fopen_s(&fp1,"F:\\file1.txt","rt");

if(!fp1)

{

printf("Error!Cannot open file.");

return 0;

}

while(fscanf(fp1,"%d %d\n",&polyn.coef,&polyn.e)==2)

{

POLYN *polynmulti = new POLYN;

memcpy(polynmulti,&polyn,LEN);

pnode=(struct polyn*)malloc(LEN);

if (NULL == pnode)

break;

pnode->coef = polyn.coef;

pnode->e = polyn.e;

pnode->next = NULL;

InsertPolyn(phead,pnode);

printf("coef1:%d,e1:%d\n",*phead,*pnode);

fclose(fp1);

}

FILE *fp2;

fopen_s(&fp2,"F:\\file2.txt","rt");

if(!fp2)

{

printf("Error!Cannot open file.");

return 0;

}

while(fscanf(fp2,"%d %d\n",&polyn.coef,&polyn.e)==2)

{

POLYN *polynmulti= new POLYN;

pnode=(struct polyn*)malloc(LEN);

if (NULL == pnode)

break;

pnode->coef = polyn.coef;

pnode->e = polyn.e;

pnode->next = NULL;

InsertPolyn(phead,pnode);

printf("coef2:%d,e2:%d\n",*phead,*pnode);

fclose(fp2);

}

return phead;

}

void InsertPolyn(POLYN *phead, POLYN* s)

{

POLYN *p = NULL;

POLYN *q = NULL;

POLYN *r = NULL;

if(NULL == phead||NULL==s)

return;

if(NULL == phead->next)

{

phead->next = s;

return;

}

p = phead->next;

q = s;

while(p!= NULL)

{

if(p->e == q->e)

{

p->coef += q->coef;

return;

}

p=p->next;

}

p = p->next;

if(p->e > q->e)

{

q->next = p;

phead->next = p;

return;

}

while(p!=NULL){

if(p->e > q->e)

break;

r = p;

p = p->next;

}

q->next = r->next;

r->next = q;

}

void polynout(POLYN *phead,char *s)

{

FILE *fp3;

fopen_s(&fp3,"F:\\output.txt","wt");

if(!fp3)

{

printf("Error!Cannot open file.");

}

POLYN *p = NULL;

if(NULL == phead)

return;

p = phead->next;

if(NULL != p)

{

while(1)

{

if(NULL == p)

{

break;

}

printf("coef:%d,e:%d\n",p->coef,p->e);

fprintf(fp3,"coef: %d, e:%d\n",p->coef,p->e);

p = p->next;

}

}

fclose(fp3);

}

POLYN *polynmulti(POLYN *ha,POLYN *hb)

{

POLYN *pa = NULL;

POLYN *pb = NULL;

POLYN *phead = NULL;

POLYN *pnode = NULL;

if(NULL == ha)

{

if(hb == NULL)

{

return NULL;

}

else{

return hb;

}

}

phead=(struct polyn*)malloc(LEN);

if(NULL == phead)

return NULL;

phead->coef = 0;

phead->e = -1;

phead->next = NULL;

pa = ha->next;

pb = hb->next;

while(NULL != pb)

{

while (NULL != pa)

{

double tempcoef = 0;

double tempe = 0;

tempcoef = pa->coef *pb->coef;

tempe = pa->e + pb->e;

pnode = (struct polyn *)malloc(LEN);

if(NULL == pnode)

break;

pnode->coef = tempcoef;

pnode->e = tempe;

文章评论

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值