一元多项式加法
来源:互联网 发布:农村是一种负担知乎 编辑:程序博客网 时间:2024/06/05 09:15
/*用链表是实现一元多项式的加法,新生成的链表存储在原有链表之一中*/
#include <stdio.h>
#include <stdlib.h>
//定义多项式的存储结构
typedef struct ploy
{
float coef; //系数
int exp; //指数
struct ploy *next; //指向下一个结点的指针
};
//创建具有指定节点个数的带头结点链表(表达式有n项)
ploy *crePoly()
{
ploy *q, *p, *head;
int n;
printf("\n请输入多项式的项数:");
scanf("%d",&n);
head = (ploy *)malloc(sizeof(ploy));
if(!head)
{
printf("申请内存失败!");
exit(0);
}
head->next = NULL;
//q指向当前节点,p指向新生成的节点
q = head;
for(int i = 1; i <= n; i ++)
{
p = (ploy *)malloc(sizeof(ploy));
printf("系数:");
scanf("%f",&p->coef);
printf("指数:");
scanf("%d",&p->exp);
q->next = p;
q = p;
q->next = NULL;
}
return(head);
}
//系数比较函数
int cmp(ploy *ployna, ploy *ploynb)
{
if(ployna->exp > ploynb->exp)
return 1;
else if(ployna->exp < ploynb->exp)
return -1;
else
return 0;
}
//输出多项式
void print(ploy *p)
{
while(p->next != NULL)
{
p = p->next;
printf("%.0f*X^%d",p->coef,p->exp);
if(p->next != NULL)
printf("+");
}
}
/*多项式相加的函数,相加的结果保存到链表plonyna中,删除ploynb*/
void ploynadd(ploy *ployna, ploy *ploynb)
{
ploy *p,*q,*pa,*temp,*qb;
p = ployna->next; //p指向ployna的第一个节点
q = ploynb->next; //q指向ployna的第一个节点
pa=ployna; //pa指向q的前驱
qb = q;
int sum;
while(p != NULL && q != NULL) //当两个多项式均未扫描到最后一项时
{
switch(cmp(p, q))
{
case 1:
pa = pa->next;
p = p->next;
break;
case -1:
qb = qb->next;
pa->next = q;
q->next = p;
q = qb;
pa = pa->next;
break;
case 0:
sum = p->coef + q->coef;
if(sum != 0) //系数和不为0时,删除q节点
{
p->coef=sum;
pa = pa->next;
p = p->next;
temp = q;
q=q->next;
qb=q;
free(temp);
}
else //系数和为0时,同时删除两个节点p和q
{
temp=p->next; free(p);p=temp;
temp=q->next; free(q);q=temp;
}
break;
}
}
if(p!=NULL) //多项式A中还有剩余,则将剩余的结点加入到和多项式中
pa->next=p;
else //否则将B的结点加入到和多项式中
pa->next=q;
}
/*主函数*/
void main()
{
printf("请按照指数从大到小的顺序输入\n");
ploy *ployna,*ploynb;
ployna = crePoly();
print(ployna);
ploynb = crePoly();
print(ploynb);
printf("\n");
ploynadd(ployna,ploynb);
print(ployna);
printf("\n");
}
- 一元多项式加法
- 一元多项式加法
- 一元多项式加法
- polynomial 一元多项式加法实现
- 一元多项式的加法C++
- 1467 数据结构:一元多项式加法
- 一元多项式加法计算问题
- 链表实现一元多项式加法
- 一元多项式加法——单链表实现
- c++一元多项式的乘法和加法
- 数据结构--线性表--一元多项式加法运算
- 一元多项式的加法和乘法运算
- 一元多项式的加法和乘法
- 用链表实现一元多项式的加法运算
- 一元多项式的乘法与加法运算
- pat--一元多项式的乘法与加法
- 一元多项式的乘法与加法运算
- 一元多项式的乘法与加法运算
- ARC指南1 - strong和weak指针
- jdbc 所有数据库连接字符串大全
- 第一章 - Magento强大的配置系统
- 模拟db file scattered read
- Android应用开发中的风格和主题(style,themes)
- 一元多项式加法
- 使用grub4dos制作多系统启动U盘(win7、ubuntu12.04)
- magento获取当前路径
- Linux下用到数据库sqlite3
- [HTML5] 向新时代迈进(一)——Video
- Gem5的编译及运行测试程序
- 近两年常用的一些SHELL命令
- SQL*PLUS使用(二)
- magento布局是如何工作的