一元多项式的乘法与加法运算

一元多项式的乘法与加法运算

题目

一元多项式的乘法与加法运算

链表实现

初始化输入


#include<iostream>
#include<cstdio>
using namespace std;

#define ElementType int
typedef struct PolyNode *PtrToPloyNode;
struct PolyNode
{
	ElementType coef;
	ElementType expon;
	PtrToPloyNode link;
};
typedef PtrToPloyNode Polynomial;
Polynomial Polynomial1, Polynomial2;


void input()
{
	int N;
	ElementType CinTmp;
	Polynomial NodeTmp,rear;

	cin >> N;
	rear = (PtrToPloyNode)malloc(sizeof(struct PolyNode));
	cin >> CinTmp;
	rear->coef = CinTmp;
	cin >> CinTmp;
	rear->expon = CinTmp;
	Polynomial1 = rear;
	for (size_t i = 0; i < N - 1; i++)
	{
		NodeTmp = (PtrToPloyNode)malloc(sizeof(struct PolyNode));
		cin >> CinTmp;
		NodeTmp->coef = CinTmp;
		cin >> CinTmp;
		NodeTmp->expon = CinTmp;
		rear->link = NodeTmp;
		rear = NodeTmp;
	}

	////

	cin >> N;
	rear = (PtrToPloyNode)malloc(sizeof(struct PolyNode));
	cin >> CinTmp;
	rear->coef = CinTmp;
	cin >> CinTmp;
	rear->expon = CinTmp;
	Polynomial2 = rear;
	for (size_t i = 0; i < N - 1; i++)
	{
		NodeTmp = (PtrToPloyNode)malloc(sizeof(struct PolyNode));
		cin >> CinTmp;
		NodeTmp->coef = CinTmp;
		cin >> CinTmp;
		NodeTmp->expon = CinTmp;
		rear->link = NodeTmp;
		rear = NodeTmp;
	}
}

主程序

int main()
{

	Polynomial Polynomial1, Polynomial2;
	input(&Polynomial1, &Polynomial2);
	Polynomial result = PolyAdd(Polynomial1, Polynomial2);
	output(result);


	return 0;
}

未AC全部代码

明天AC


#include<iostream>
#include<cstdio>
using namespace std;

#define ElementType int
typedef struct PolyNode *PtrToPloyNode;
struct PolyNode
{
	ElementType coef;
	ElementType expon;
	PtrToPloyNode link;
};
typedef PtrToPloyNode Polynomial;


void input(Polynomial *Polynomial1, Polynomial *Polynomial2)//无头节点
{
	int N;
	ElementType CinTmp;
	Polynomial NodeTmp,rear;

	cin >> N;
	rear = (PtrToPloyNode)malloc(sizeof(struct PolyNode));
	cin >> CinTmp;
	rear->coef = CinTmp;
	cin >> CinTmp;
	rear->expon = CinTmp;
	*Polynomial1 = rear;
	for (size_t i = 0; i < N - 1; i++)
	{
		NodeTmp = (PtrToPloyNode)malloc(sizeof(struct PolyNode));
		cin >> CinTmp;
		NodeTmp->coef = CinTmp;
		cin >> CinTmp;
		NodeTmp->expon = CinTmp;
		rear->link = NodeTmp;
		rear = NodeTmp;
	}

	rear->link = NULL;
	////

	cin >> N;
	rear = (PtrToPloyNode)malloc(sizeof(struct PolyNode));
	cin >> CinTmp;
	rear->coef = CinTmp;
	cin >> CinTmp;
	rear->expon = CinTmp;
	*Polynomial2 = rear;
	for (size_t i = 0; i < N - 1; i++)
	{
		NodeTmp = (PtrToPloyNode)malloc(sizeof(struct PolyNode));
		cin >> CinTmp;
		NodeTmp->coef = CinTmp;
		cin >> CinTmp;
		NodeTmp->expon = CinTmp;
		rear->link = NodeTmp;
		rear = NodeTmp;
	}
	rear->link = NULL;
}


int Compare(int e1, int e2)
{
	if (e1 == e2) return 0;
	if (e1 > e2) return 1;
	if (e1 < e2) return -1;
}

void Attach(int coef, int expon, Polynomial * PrtRear)
{
	Polynomial TempNode = (Polynomial)malloc(sizeof(struct PolyNode));
	TempNode->coef = coef;
	TempNode->expon = expon;

	(*PrtRear)->link = TempNode;
	(*PrtRear) = TempNode;
}

Polynomial PolyAdd(Polynomial P1, Polynomial P2)
{
	Polynomial front, rear, temp;
	int sum;

	rear = (Polynomial)malloc(sizeof(struct PolyNode));
	front = rear;

	while (P1 && P2)
	{
		switch (Compare(P1->expon,P2->expon))
		{
		case 1://P1指数比较大
			Attach(P1->coef, P1->expon, &rear);
			P1 = P1->link;
			break;
		case -1://P2指数比较大
			Attach(P2->coef,P2->expon,&rear);
			P2 = P2->link;
			break;

		case 0://P1 P2指数相同
			sum = P1->coef + P2->coef;
			if (sum)
			{
				Attach(sum, P2->expon,&rear);
			}
			P1 = P1->link;
			P2 = P2->link;
		break;

		default:
			break;
		}
	}
	for (; P1; P1 = P1->link)Attach(P1->coef,P1->expon,&rear);
	for (; P2; P2 = P2->link)Attach(P2->coef, P2->expon, &rear);
	rear->link = NULL;
	temp = front;
	front = front->link;
	free(temp);

	return front;
}

void output(Polynomial result)
{
	//result = result->link;
	if (result == NULL)
	{
		cout << '0 0';
	}

	while (result)
	{
		cout << (result)->coef << ' ' << (result)->expon;
		if ((result)->link) cout << ' ';
		result = result->link;
	}
}


Polynomial PolyMulti(Polynomial Polynomial1, Polynomial Polynomial2)
{
	Polynomial result;
	Polynomial temp, front;

	temp = (Polynomial)malloc(sizeof(struct PolyNode));
	temp->link = NULL;


	result = (Polynomial)malloc(sizeof(struct PolyNode));
	result = NULL;


	for(;Polynomial1;Polynomial1= Polynomial1->link)
	{
		front = Polynomial2;
		for(; front; front = front->link)
		{
			temp->coef = Polynomial1->coef * front->coef;
			temp->expon = Polynomial1->expon + front->expon;
			result = PolyAdd(temp,result);
		}
	}
	free(temp);
	return result;
}

int main()
{

	Polynomial Polynomial1, Polynomial2;
	input(&Polynomial1, &Polynomial2);

	Polynomial result1 = PolyMulti(Polynomial1, Polynomial2);
	output(result1);
	cout << endl;

	Polynomial result2 = PolyAdd(Polynomial1, Polynomial2);
	output(result2);


	return 0;
}