一元多项式求和的实现
来源:互联网 发布:怎么删除网络连接 编辑:程序博客网 时间:2024/06/05 03:14
/*
一元多项式求和
例:A(x)=7*12x^2-2x^8+5x^12 ,B(x)=4x+6x^3+2x^8+5x^20+7x^28,求A(x)+B(x)
把系数指数依次输入,输入 0 0 结束
*/
#include <stdio.h>
#include <malloc.h> //实现动态存储分配
typedef struct Node //定义单链表结点
{
int coef,exp; //系数,指数
struct Node *next;
}Node;
Node *Great()
{
Node *first = NULL,*r = NULL,*s = NULL;
int coef,exp;
first = (Node*)malloc(sizeof(Node)); //申请头结点
r = first; //尾插法建立单链表
printf("请输入系数和指数:");
scanf("%d%d",&coef,&exp);
while(coef != 0)
{
s = (Node*)malloc(sizeof(Node));
s->coef = coef;
s->exp = exp;
r->next = s;
r = s;
printf("请输入系数和指数:");
scanf("%d%d",&coef,&exp);
}
r->next = NULL; //单链表的尾标志
return first; //返回头指针
}
Node *AddPolynomial(Node *A,Node *B)
{
Node *pre = A,*p = pre->next;
Node *qre = B,*q = qre->next;
Node *v = NULL;
while(p != NULL && q != NULL)
{
if(p->exp < q->exp)
{
pre = p;p = p->next;
}else if(p->exp < q->exp){
v = q->next;
pre->next = q;
q->next = p;
q = v;
}else{
p->coef = p->coef + q->coef;
if(p->coef == 0){
pre->next = p->next;
free(p);
p = p->next;
}else{
pre = p;
p = p->next;
}
qre->next = q->next;
free(q);
q = qre->next;
}
}
if(q != NULL)
pre->next = q;
free(B);
return(A);
}
void Print(Node *first)
{
Node *p = first->next;
if(p != NULL)
printf("%dx%d",p->coef,p->exp);
p = p->next;
while(p != NULL)
{
if(p->coef > 0)
printf("+%dx%d",p->coef,p->exp);
else
printf("%dx%d",p->coef,p->exp);
p = p->next;
}
printf("\n");
}
int main()
{
Node *A = NULL, *B = NULL;
A = Great();Print(A);
B = Great();Print(B);
A = AddPolynomial(A,B);
printf("结果:");
Print(A);
return 0;
一元多项式求和
例:A(x)=7*12x^2-2x^8+5x^12 ,B(x)=4x+6x^3+2x^8+5x^20+7x^28,求A(x)+B(x)
把系数指数依次输入,输入 0 0 结束
*/
#include <stdio.h>
#include <malloc.h> //实现动态存储分配
typedef struct Node //定义单链表结点
{
int coef,exp; //系数,指数
struct Node *next;
}Node;
Node *Great()
{
Node *first = NULL,*r = NULL,*s = NULL;
int coef,exp;
first = (Node*)malloc(sizeof(Node)); //申请头结点
r = first; //尾插法建立单链表
printf("请输入系数和指数:");
scanf("%d%d",&coef,&exp);
while(coef != 0)
{
s = (Node*)malloc(sizeof(Node));
s->coef = coef;
s->exp = exp;
r->next = s;
r = s;
printf("请输入系数和指数:");
scanf("%d%d",&coef,&exp);
}
r->next = NULL; //单链表的尾标志
return first; //返回头指针
}
Node *AddPolynomial(Node *A,Node *B)
{
Node *pre = A,*p = pre->next;
Node *qre = B,*q = qre->next;
Node *v = NULL;
while(p != NULL && q != NULL)
{
if(p->exp < q->exp)
{
pre = p;p = p->next;
}else if(p->exp < q->exp){
v = q->next;
pre->next = q;
q->next = p;
q = v;
}else{
p->coef = p->coef + q->coef;
if(p->coef == 0){
pre->next = p->next;
free(p);
p = p->next;
}else{
pre = p;
p = p->next;
}
qre->next = q->next;
free(q);
q = qre->next;
}
}
if(q != NULL)
pre->next = q;
free(B);
return(A);
}
void Print(Node *first)
{
Node *p = first->next;
if(p != NULL)
printf("%dx%d",p->coef,p->exp);
p = p->next;
while(p != NULL)
{
if(p->coef > 0)
printf("+%dx%d",p->coef,p->exp);
else
printf("%dx%d",p->coef,p->exp);
p = p->next;
}
printf("\n");
}
int main()
{
Node *A = NULL, *B = NULL;
A = Great();Print(A);
B = Great();Print(B);
A = AddPolynomial(A,B);
printf("结果:");
Print(A);
return 0;
}
阅读全文
2 0
- 一元多项式求和的实现
- 一元多项式求和算法(单链表实现)
- 一元多项式的实现
- 一元多项式求和
- 一元多项式求和
- 一元多项式求和
- 一元多项式求和
- 一元多项式求和
- 一元多项式求和(Java链表实现)
- 单链表应用--一元多项式求和
- <PTA>一元多项式的求和和乘积运算解题报告
- 用链表实现的一元多项式算法
- 用链表实现一元多项式的加法运算
- 一元多项式相加的链式实现
- 用链表实现一元稀疏多项式的相加
- 一元多项式的加减乘数实现
- 一元多项式的加减法 C++实现
- 一元多项式的运算
- JZOJ1281【USACO题库】3.1.6 Stamps邮票
- Data invert to BCD
- iOS 开发中的争议(二)UI到底应该用xib/storyboard完成,还是用手写代码来完成?
- Linux 命令笔记
- jsp
- 一元多项式求和的实现
- React学习 -- 事件系统
- 【effective Java读书笔记】注解(一)
- 三种 I/O 复用(select poll epoll)的优缺点总结 & epoll 为何如此高效
- [LeetCode]537. Complex Number Multiplication
- Mybatis概述
- Dalvik字节码的类型方法与字段表示方法
- progressBar和ProgressDialog使用
- leetcode题解-128. Longest Consecutive Sequence