一元 多项式求和
处理好指针的问题。
当某A链表某项指数大于B链表某项指数时,将B项插入到A链表。
当A链表某项小于B链某项指数,将A链表指针指向下一项。
当A项等于B项时,将他们的系数相加,如果系数和为0,将A链和B链的项都删除。否则,删除该B项。
这里是将结果直接存放到A链表,如果新建一个链表来保存可能会更简单些。
/*
* PolyAdd.c
*
* Created on: 2013/07/21
* Author: Administrator
*/
#include <stdlib.h>
#include <stdio.h>
#include <stddef.h>
#define ELE_TYPE int
typedef struct PolyEx {
ELE_TYPE coef;
ELE_TYPE ex;
struct PolyEx *next;
}PolyEx;
void init(PolyEx *elem) {
elem->coef = 0;
elem->ex = 0;
elem->next = NULL;
}
void destroy(PolyEx *elem) {
PolyEx *p = elem->next, *temp = NULL;
while(p) {
temp = p;
p = p->next;
free(temp);
}
}
void addElem(PolyEx *poly, int coef, int ex) {
PolyEx *p = poly->next;
PolyEx *newNode = NULL;
if(!coef) {
return;
}
newNode = (PolyEx*)malloc(sizeof(PolyEx));
newNode->coef = coef;
newNode->ex = ex;
newNode->next = p;
poly->next = newNode;
}
void printPolyEx(PolyEx *ex) {
PolyEx *p = ex->next;
while(p) {
printf("(%2dX^%2d)", p->coef, p->ex);
p = p->next;
if(p) {
printf (" + ");
}
}
printf("\n");
}
void addMerge(PolyEx *ex1, PolyEx *ex2) {
PolyEx *p3, *p2, *p1, *prev1, *prev2;
p1 = ex1->next;
p2 = ex2->next;
p3 = ex1;
prev1 = ex1;
prev2 = ex2;
while(p1 && p2) {
if(p1->ex > p2->ex) {
prev2 = p2;
p2 = prev2->next;
prev2->next = p1->next;
p1->next = prev2;
}
else if(p1->ex < p2->ex) {
prev1 = p1;
p1 = p1->next;
}
else {
if(p1->coef + p2->coef != 0) {
p1->coef += p2->coef;
prev1 = p1;
p1 = p1->next;
prev2->next = p2->next;
free(p2);
p2 = prev2->next;
}
else {
prev1->next = p1->next;
free(p1);
p1 = prev1->next;
prev2->next = p2->next;
free(p2);
p2 = prev2->next;
}
}
}
if(p2) {
prev1->next = p2;
prev2->next = NULL;
}
}
void subMerge(PolyEx *ex1, PolyEx *ex2) {
PolyEx *p2 = ex2->next;
while(p2) {
p2->coef *= -1;
p2 = p2->next;
}
addMerge(ex1, ex2);
}
int main(int argc, char* argv[]){
PolyEx ex1, ex2;
int i = 0;
int n1 = 16;
int n2 = 39;
init(&ex1);
init(&ex2);
for(i = n1; i > -1; i--) {
addElem(&ex1, i, i);
}
printf("Ex1:\n");
printPolyEx(&ex1);
for(i = n2; i > 0; i--) {
addElem(&ex2, i + 3, i);
}
printf("Ex2:\n");
printPolyEx(&ex2);
addMerge(&ex1, &ex2);
printf("After add:\n");
printPolyEx(&ex1);
for(i = n2; i > 1; i--) {
addElem(&ex2, i * 3, i);
}
printf("Ex2:\n");
printPolyEx(&ex2);
subMerge(&ex1, &ex2);
printf("Ater sub:\n");
printPolyEx(&ex1);
destroy(&ex1);
destroy(&ex2);
}
分享到:
相关推荐
一元多项式求和 数据结构对一元月多项指数想同的进行合并,并按升顺排列显示结果
实验内容:一元多项式求和。 把任意给定的两个一元多项式P(x) ,Q(x) 输入计算机,计算它们的和并输出计算结果。 实验内容: 1.问题描述: 一元多项式求和——把任意给定的两个一元多项式P(x) ,Q(x) 输入计算机,...
一元多项式求和,结果按降幂输出 c语言
用单链表实现一元多项式求和,把任意给定的两个一元多项式P(x)
数据结构,链表的应用,基于C++,一元多项式求和,带主程序,可直接运行。
一元多项式求和.cpp
有两个指数递减的一元多项式,写一程序先求这两个多项式的和,再求它们的积。 基本要求:用带表头结点的单链表作为多项式的存储表示;要建立两个单链表;多项式相加就是要把一个单链表中的结点插入到另一个单链表中...
数据结构第二章实验一元多项式求和,c语言链式结构实现
(数据结构与算法)一元多项式求和---单链表的应用 http://blog.csdn.net/eeeduo/article/details/37877677
一元多项式相加 数据结构实验报告.pdf
利用C语言中的链表实现一元多项式算法,十分实用,便于c爱好者学习链表结构。
关于一元多项式的相加运算,用链表写的,大家要用的话就来下载吧!欢迎下载哦!
设计合理数据结构表示一元多项式,并设计高效算法实现两个一元多项式相加 本课程设计要求用C++实现两个一元多项式的求和问题,用带头结点的单链表村存储多项式。
利用C语言编写的,其思想是利用数据结构实现两个一元多项式的输入输出,及其两个多项式的和,多项式得积,多项式的差
一般一元多项式的求和应用仅限于C++编辑器
1. 多项式求和 输入:输入三个多项式,建立三个多项式链表Pa、Pb、Pc (提示:调用CreatePolyn(polynomial &P,int m)。 输出:显示三个输入多项式Pa、Pb、Pc、和多项式Pa+Pb、多项式Pa+Pb+Pc (提示:调用AddPolyn...
数据结构--一元多项式相加.doc
菜鸟代码
数据结构(Java语言描述) 案例04 一元多项式的表示及运算.docx 学习资料 复习资料 教学资源
数据结构课件:第2章 线性表2一元多项式的表示及相加.pptx