c语言的链表实现一元多项式,链表基本操作的实现-----一元多项式简单计算器设计...

[问题描述]设计一元多项式简单计算器,用链式存储结构进行存储,完成常规操作。

[基本要求]一元多项式简单计算器的基本功能有:

1、输入并建立多项式的存储结构;

2、输出多项式;

3、两个多项式的加、减、乘运算;

[实现提示]

可选择带头结点的单链表或单向循环链表实现,假设要求用户按幂从大到小的次序输入各个结点,结点的数据域有两项:幂与系数;

[参考程序]

#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);

运行结果分析与讨论

1.[测试数据]给出两个多项式

3x3+2x2-5x+6 和

-2x3-2x2+5x+4

写出程序运行的结果 ,分析结果正确与否,提出改进意见。

注意:数据的输入方法是:

3,3

2,2

-5,1

6,0

0,0

第一个多项式输入结束!

结果是:​​x3+10

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值