一元 多项式求和
处理好指针的问题。
当某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);
}
分享到:
相关推荐
通过阅读和理解这些代码,你可以深入学习如何使用数据结构来处理一元多项式求和的问题。 总结一下,一元多项式求和的关键知识点包括: 1. 使用数组或链表作为数据结构来表示一元多项式。 2. 合并多项式时,对应位置...
实验报告的主题是“一元多项式求和”,主要探讨如何使用链表数据结构来实现这一计算过程。在数据结构中,链表是一种重要的抽象数据类型,它可以动态地存储具有相同类型的元素,尤其适合处理无序数据或需要频繁插入和...
本话题将深入探讨数据结构中的链表以及其在C++中的一元多项式求和应用。链表是一种线性数据结构,不同于数组,它不连续存储元素,而是通过节点之间的指针链接。这里我们将详细讲解链表的实现、一元多项式的表示以及...
在本文中,我们探讨了如何利用数据结构和算法解决一元多项式求和的问题。一元多项式通常表示为 \( A(x) = a_0 + a_1x + a_2x^2 + \ldots + a_nx^n \),其中 \( n+1 \) 个系数唯一定义了多项式。当处理两个一元多项式...
在计算机科学中,一元多项式求和是一个基础的数学计算任务,特别是在数值计算和算法设计领域。在C语言中实现这个功能,我们需要理解多项式的概念、数组的使用以及循环结构来实现求和并按照降幂顺序输出结果。本文将...
实现一元多项式求和的关键步骤如下: 1. **构建链表**:首先,我们需要根据给定的多项式构建两个单链表,分别表示 $P(x)$ 和 $Q(x)$。每个节点应包含系数和对应的指数。可以使用插入操作从链表头部开始,按照指数的...
### 一元多项式求和问题代码解析 #### 一、引言 在计算机科学与数学领域中,一元多项式的表示与运算是一项基础而重要的技能。本篇文章将基于提供的代码示例,深入探讨如何利用链表实现一元多项式的相加运算。这不仅...
一元多项式求和.cpp
有两个指数递减的一元多项式,写一程序先求这两个多项式的和,再求它们的积。 基本要求:用带表头结点的单链表作为多项式的存储表示;要建立两个单链表;多项式相加就是要把一个单链表中的结点插入到另一个单链表中...
1. 多项式求和 输入:输入三个多项式,建立三个多项式链表Pa、Pb、Pc (提示:调用CreatePolyn(polynomial &P,int m)。 输出:显示三个输入多项式Pa、Pb、Pc、和多项式Pa+Pb、多项式Pa+Pb+Pc (提示:调用AddPolyn...
总结来说,一元多项式求和的问题展示了数据结构(如单链表)和算法(如链表操作和遍历)在解决实际问题中的作用。通过巧妙地利用这些基础知识,我们可以有效地处理数学问题并将其转化为可执行的代码。理解并熟练掌握...
在计算机科学中,一元多项式算法是一种处理数学上的一元多项式问题的算法,它通常涉及加法、减法、乘法以及求幂等运算。C语言是一种强大的编程语言,特别适合用来实现这种底层的算法,因为它允许直接操作内存和数据...
### 一元多项式的表示与处理 在数学领域中,一元多项式是一种常见的代数结构,它由一个变量的不同幂次项组成。本篇文章将详细介绍如何通过编程语言(如C++)来实现一元多项式的表示、输入、输出以及基本操作。 ###...
在计算机科学和编程领域,一元多项式的求和是一个基础且重要的问题,特别是在数值计算、符号计算以及数学软件开发中。一元多项式是数学中的一个基本概念,它由常数项、一次项、二次项等按照特定顺序组合而成,如 \( ...
一元多项式相加 数据结构实验报告.pdf
本文将深入探讨如何使用C语言来实现一元多项式的相加操作,这是一种基本的数据结构应用。 一元多项式可以看作是形如`a_nx^n + a_{n-1}x^{n-1} + ... + a_1x + a_0`的数学表达式,其中`a_i`是系数,`x`是变量,`n`是...
本案例聚焦于使用Java语言描述的一元多项式的表示与运算,主要涵盖了单链表结构的应用,以及多项式加法操作的实现。以下是相关知识点的详细说明: 4.1 多项式的表示: 一元n次多项式可以表示为一个多项式序列,每个...
在计算机科学中,一元多项式是数学表达式的一种形式,通常由常数、变量以及它们的乘积组成,如2x^3 + 4x^2 - x + 5。这种类型的数学对象在编程中有着广泛的应用,尤其是在数值计算、符号计算和科学计算等领域。在C++...
数据结构--一元多项式相加.doc
数据结构课件:第2章 线性表2一元多项式的表示及相加.pptx