c语言减法自定义函数,C语言版数据结构链表应用-- 多项式减法函数

#include

#include

typedef struct polynode

{

int coef;

//系数

int expn;

//指数

struct polynode *next;

//指针

}*pnode;

//定义一个结构体

pnode createpoly()

//输入函数

{

int a,n,i=1;

pnode head,s,p;

printf("输入一元多项式(以0,0标志结束):\n");

printf("要求:按幂从大到小的次序输入各个接点\n");

head=(pnode)malloc(sizeof(struct polynode));

//申请一个存储空间给头指针

head->next=NULL;

//头指针的指针域为空

p=head;

//建立表头结点

do

{

printf("第%d次->系数,幂:",i++);

//格式化输出

scanf("%d,%d",&a,&n);

//格式化输入

if(a!=0||n!=0)

{

s=(pnode)malloc(sizeof(struct polynode)); //

给S申请一个存储空间

s->coef=a;s->expn=n;s->next=NULL;

//把输入的数存储到s中

p->next=s;p=s;}

//将表头结点指向s,建立新的结点

}while(a!=0||n!=0);

//判断循环是否结束

printf("\n");

return(head);}  //返回头指针

void printpoly(pnode head)

//输出函数

{

pnode s,p;

int first=1;

p=head->next;

//建立表头结点

while(p!=NULL)

{

if(first)  //先输出一个多项式

{

if(p->expn==1)

printf("%dx",p->coef);

//输出指数为1的系数

else if(p->expn==0)

printf("%d",p->coef);

//输出指数为0的系数

else

printf("%dx^%d",p->coef,p->expn);

//输出指数为多次的系数

first=0;

}

else

//再输出一个多项式

{

if(p->expn==1)

printf("%+dx",p->coef);

else if(p->expn==0)

printf("%+d",p->coef);

else

printf("%+dx^%+d",p->coef,p->expn);

}

p=p->next;

//将头结点指针指向下一个结点

}

printf("\n");

}

pnode addpoly(pnode pa,pnode pb)

//两个多项式相减函数

{

int n;

pnode pc,s,p;

pa=pa->next;  //

指向下一个结点

pb=pb->next;

pc=(pnode)malloc(sizeof(struct polynode));

//申请表头结点空间

pc->next=NULL;p=pc;

//建立表头结点

while(pa!=LNUL&&pb!=NULL)

{

if(pa->expn>pb->expn)

//指数比较,成立时,移动pa表指针,寻找插入位置

{

s=(pnode)malloc(sizeof(struct

polynode));

s->coef=pa->coef;s->expn=pa->expn;

p->next=s;p=s;pa=pa->next;

}

else if(pa->expnexpn)

//指数比较,成立时,移动pb表指针,寻找插入位置

{

s=(pnode)malloc(sizeof(struct

polynode));

s->coef=pb->coef;s->expn=pb->expn;s->next=NULL;

p->next=s;p=s;pb=pb->next;

}

else

{

n=pa->coef-pb->coef;

//系数相减

if(n!=0)

//

{

s=(pnode)malloc(sizeof(struct

polynode));

s->coef=n;s->expn=pa->expn;s->next=NULL;

p->next=s;p=s;

}

pa=pa->next;pb=pb->next;

}

}

while(pa!=NULL)//当输入的第一个多项式不为空时,将其其保存起来,目的是为了释放。

{

s=(pnode)malloc(sizeof(struct

polynode));

s->coef=pa->coef;s->expn=pa->expn;s->next=NULL;

p->next=s;p=s;pa=pa->next;//指向下一个结点

}

while(pb!=NULL)//输入第二个多项式不为空时,将其保存起来,目的是为了释放。

{

s=(pnode)malloc(sizeof(struct

polynode));

s->coef=pb->coef;s->expn=pb->expn;s->next=NULL;

p->next=s;p=s;pb=pb->next;//指向下一个结点

}

return(pc);} //返回表头结点

main()

{

pnode poly1,poly2,poly3;

printf("建立第1个一元多项式=>\n");

poly1=createpoly();//第一个多项式的输入

printf("建立第2个一元多项式=>\n");

poly2=createpoly();//第二个多项式的输入

poly3=addpoly(poly1,poly2);

printf("第1个一元多项式为\n");

printpoly(poly1);

printf("第2个一元多项式为\n");

printpoly(poly2);

printf("相减后的一元多项式为\n");

printpoly(poly3);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值