`

一元多项式求和

阅读更多

一元 多项式求和

处理好指针的问题。
当某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. 合并多项式时,对应位置...

    数据结构实验报告之一元多项式求和(链表)报告2.doc

    实验报告的主题是“一元多项式求和”,主要探讨如何使用链表数据结构来实现这一计算过程。在数据结构中,链表是一种重要的抽象数据类型,它可以动态地存储具有相同类型的元素,尤其适合处理无序数据或需要频繁插入和...

    数据结构链表的应用C++一元多项式求和

    本话题将深入探讨数据结构中的链表以及其在C++中的一元多项式求和应用。链表是一种线性数据结构,不同于数组,它不连续存储元素,而是通过节点之间的指针链接。这里我们将详细讲解链表的实现、一元多项式的表示以及...

    一元多项式求和问题的研究与实现

    在本文中,我们探讨了如何利用数据结构和算法解决一元多项式求和的问题。一元多项式通常表示为 \( A(x) = a_0 + a_1x + a_2x^2 + \ldots + a_nx^n \),其中 \( n+1 \) 个系数唯一定义了多项式。当处理两个一元多项式...

    一元多项式求和,结果按降幂输出

    在计算机科学中,一元多项式求和是一个基础的数学计算任务,特别是在数值计算和算法设计领域。在C语言中实现这个功能,我们需要理解多项式的概念、数组的使用以及循环结构来实现求和并按照降幂顺序输出结果。本文将...

    一元多项式_单链表实现一元多项式求和_signa67_pleasekzo_

    实现一元多项式求和的关键步骤如下: 1. **构建链表**:首先,我们需要根据给定的多项式构建两个单链表,分别表示 $P(x)$ 和 $Q(x)$。每个节点应包含系数和对应的指数。可以使用插入操作从链表头部开始,按照指数的...

    一元多项式求和问题代码

    ### 一元多项式求和问题代码解析 #### 一、引言 在计算机科学与数学领域中,一元多项式的表示与运算是一项基础而重要的技能。本篇文章将基于提供的代码示例,深入探讨如何利用链表实现一元多项式的相加运算。这不仅...

    一元多项式求和.cpp

    一元多项式求和.cpp

    一元多项式求和与求积

    有两个指数递减的一元多项式,写一程序先求这两个多项式的和,再求它们的积。 基本要求:用带表头结点的单链表作为多项式的存储表示;要建立两个单链表;多项式相加就是要把一个单链表中的结点插入到另一个单链表中...

    一元多项式相加(c++)

    1. 多项式求和 输入:输入三个多项式,建立三个多项式链表Pa、Pb、Pc (提示:调用CreatePolyn(polynomial &P,int m)。 输出:显示三个输入多项式Pa、Pb、Pc、和多项式Pa+Pb、多项式Pa+Pb+Pc (提示:调用AddPolyn...

    (数据结构与算法)一元多项式求和---单链表的应用

    总结来说,一元多项式求和的问题展示了数据结构(如单链表)和算法(如链表操作和遍历)在解决实际问题中的作用。通过巧妙地利用这些基础知识,我们可以有效地处理数学问题并将其转化为可执行的代码。理解并熟练掌握...

    一元多项式算法c语言的实现

    在计算机科学中,一元多项式算法是一种处理数学上的一元多项式问题的算法,它通常涉及加法、减法、乘法以及求幂等运算。C语言是一种强大的编程语言,特别适合用来实现这种底层的算法,因为它允许直接操作内存和数据...

    一元多项式

    ### 一元多项式的表示与处理 在数学领域中,一元多项式是一种常见的代数结构,它由一个变量的不同幂次项组成。本篇文章将详细介绍如何通过编程语言(如C++)来实现一元多项式的表示、输入、输出以及基本操作。 ###...

    一般一元多项式的求和

    在计算机科学和编程领域,一元多项式的求和是一个基础且重要的问题,特别是在数值计算、符号计算以及数学软件开发中。一元多项式是数学中的一个基本概念,它由常数项、一次项、二次项等按照特定顺序组合而成,如 \( ...

    一元多项式相加 数据结构实验报告.pdf

    一元多项式相加 数据结构实验报告.pdf

    数据结构(C)--一元多项式的相加

    本文将深入探讨如何使用C语言来实现一元多项式的相加操作,这是一种基本的数据结构应用。 一元多项式可以看作是形如`a_nx^n + a_{n-1}x^{n-1} + ... + a_1x + a_0`的数学表达式,其中`a_i`是系数,`x`是变量,`n`是...

    数据结构(Java语言描述) 案例04 一元多项式的表示及运算.docx

    本案例聚焦于使用Java语言描述的一元多项式的表示与运算,主要涵盖了单链表结构的应用,以及多项式加法操作的实现。以下是相关知识点的详细说明: 4.1 多项式的表示: 一元n次多项式可以表示为一个多项式序列,每个...

    一元多项式相加 vs C++代码

    在计算机科学中,一元多项式是数学表达式的一种形式,通常由常数、变量以及它们的乘积组成,如2x^3 + 4x^2 - x + 5。这种类型的数学对象在编程中有着广泛的应用,尤其是在数值计算、符号计算和科学计算等领域。在C++...

    数据结构--一元多项式相加.doc

    数据结构--一元多项式相加.doc

    数据结构课件:第2章 线性表2一元多项式的表示及相加.pptx

    数据结构课件:第2章 线性表2一元多项式的表示及相加.pptx

Global site tag (gtag.js) - Google Analytics