码迷,mamicode.com
首页 > 其他好文 > 详细

多项式相加

时间:2021-03-16 13:52:06      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:struct   第一个   sizeof   ror   type   nod   define   size   turn   

多项式相加有很多种实现方法。
不怕浪费空间的可以用数组,数组下标当作指数;
结构可以同时存储指数和系数,但要开辟新的空间存放比较后相加的结果;
链表可以和结构一样使用,开辟新链表,不断释放旧的链表;
这里介绍一种直接利用两个链表的结点,以一个链表为基准,将另外一个链表的结点选择性加入,同时释放系数为0没用的结点。

include <stdio.h>

include<stdlib.h>

#define ERROR 0
#define OK 1
typedef struct Node
{
	int coef;//系数
	int exp;//指数
	struct Node* PNext;
}Node;
typedef Node* PNode;

int InsertLine(PNode TrvP, int n, int  coef,int exp)//在第n位置插入一个结点
{

	int i = 0;
	while (TrvP && i < n - 1)
	{
		TrvP = TrvP->PNext;
		i++;
	}

	if (!TrvP || i > n - 1) return ERROR;

	Node* InsertNode = (Node*)malloc(sizeof(Node));

	InsertNode->coef = coef;
	InsertNode->exp = exp;
	InsertNode->PNext = TrvP->PNext;
	TrvP->PNext = InsertNode;
}
//以第一个链表为基准,将第二个链表选择性插入,这样不用开辟新的空间,
void add_poly(PNode HNode1, PNode HNode2)
{
	PNode q1=HNode1->PNext, q2=HNode2->PNext;
	PNode Ans = HNode1;//指向q1前一个元素,用于随时转移到来自q2的结点
	PNode temp;//过渡性,用于释放空间
	while (q1 && q2)
	{
		if (q1->exp == q2->exp)
		{
			int x = q1->coef + q2->coef;
			if (x)
			{
				q1->coef = x;
				Ans = q1;
				q1 = q1->PNext;
				temp = q2; q2 = q2->PNext; free(temp);
			}
			else//系数和为0,释放掉两个空间
			{
				Ans->PNext = q1->PNext;
				temp = q1; q1 = q1->PNext; free(temp);
				temp = q2; q2 = q2->PNext; free(temp);
			}
		}
		else if(q1->exp<q2->exp)
		{
			Ans = q1; q1 = q1->PNext;
		}
		else//q2结点并入q1
		{
			Ans->PNext = q2; Ans = q2;
			q2 = q2->PNext;
			Ans->PNext = q1;
		}
	}
	if (q2)//若q2有余,直接挂到Ans末尾
	{
		Ans->PNext = q2;
	}
}

int main()
{
	PNode HNode1, HNode2;
	HNode1 = (PNode)malloc(sizeof(Node));
	HNode2 = (PNode)malloc(sizeof(Node));
	HNode1->PNext = NULL;
	HNode2->PNext = NULL;

	InsertLine(HNode1, 1, 7, 0);
	InsertLine(HNode1, 2, 3, 1);
	InsertLine(HNode1, 3, 9, 8);
	InsertLine(HNode1, 4, 5, 17);
	InsertLine(HNode2, 1, -3, 1);
	InsertLine(HNode2, 2, 22, 7);
	InsertLine(HNode2, 3, -9, 8);
	add_poly(HNode1, HNode2);
	for (PNode p = HNode1->PNext; p; p = p->PNext) printf("%d %d\n", p->coef, p->exp);
}

多项式相加

标签:struct   第一个   sizeof   ror   type   nod   define   size   turn   

原文地址:https://www.cnblogs.com/tzp-empty-hya/p/14534885.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!