编写将两个多项式相加的函数

数据结构与算法分析——C语言描述   习题3.6

#include "stdafx.h"
#include"Polynomial.h"
int main()
{
	Polynomial P;
	P = (Polynomial)malloc(sizeof(Node));
	P->next = NULL;
	int m[3][2] = { {10,1000},{5,14},{1,0} };
	int n[4][2] = { {-2,1492},{ 3,1990},{11,1},{5,0}};
	PlusToPolyList(m, 3, n, 4, P);
	PrintPoly(P);
	return 0;
}

#include<stdio.h>
#include<stdlib.h>

typedef struct node {
	int Coefficient;
	int Exponent;
	struct node* next;
}Node;
typedef Node* PtrToNode;
typedef PtrToNode Polynomial;

int IsEmpty(Polynomial P) {
	return P->next == NULL;
}

int IsLast(Polynomial P) {
	return P->next == NULL;
}

//创建多项式链表
Polynomial CreatedPoly() {
	Polynomial head, p1, p2;
	int n = 0;
	p2 = p1 = (Polynomial)malloc(sizeof(Node));
	if (p1 == NULL) {
		printf("Can not created!\n");
		return NULL;
	}
	else {
		head = NULL;
		printf("请输入多项式:\n");
		scanf_s("%d%d", &(p1->Coefficient), &(p1->Exponent));
		while (p1->Coefficient != 0) {
			n++;
			if (n == 1) {
				head = p1;
				p2->next = NULL;
			}
			else {
				p2->next = p1;
			}
			p2 = p1;
			p1 = (Polynomial)malloc(sizeof(Node));
			scanf_s("%d%d", &(p1->Coefficient), &(p1->Exponent));
		}
		p2->next = NULL;
		free(p1);
		p1 = NULL;
		return head;
	}
}
//输出多项式
void PrintPoly(Polynomial P) {
	P = P->next;
	while (P->next != NULL) {
		printf("(%d*X^%d)+", P->Coefficient, P->Exponent);
		P = P->next;
	}
	printf("(%d*X^%d)\n", P->Coefficient, P->Exponent);
}

//使用头插入法插入多项式。
void PushPolyF(int Coefficient, int Exponent, Polynomial P) {
	Polynomial Tmp;
	Tmp = (Polynomial)malloc(sizeof(Node));
	Tmp->Coefficient = Coefficient;
	Tmp->Exponent = Exponent;
	Tmp->next = P->next;
	P->next = Tmp;
}

//对多项式进行从大到小的排序(因为是采用头插入法,则输出结构的时候,系数小的先输出)
void SortPolyArray(int a[][2], int nums) {
	//使用冒泡排序法
	int Cof = 0;
	int Exp = 0;
	for (int i = 0; i < nums; i++) {
		for (int j = i + 1; j < nums; j++) {
			if (a[i][1] < a[j][1]) {
				Cof = a[i][0];
				Exp = a[i][1];
				a[i][0] = a[j][0];
				a[i][1] = a[j][1];
				a[j][0] = Cof;
				a[j][1] = Exp;
			}
		}
	}
}
//将多项式数组输出
void PrintPolyArray(int m[][2], int count) {
	for (int i = 0; i < count; i++) {
		printf("(%d*X^%d)", m[i][0], m[i][1]);
	}
}

//将两个多项式中数相加并写入多项式链表中。
void PlusToPolyList(int m[][2],int M, int n[][2],int N, Polynomial P) {
	SortPolyArray(m, M);
	SortPolyArray(n, N);
	int i = 0, j = 0;
	//任何一个多项式数组录入完毕后都会结束
	while(i < M) {
		if (m[i][1] > n[j][1]) {
			PushPolyF(m[i][0], m[i][1], P);
			i++;
		}
		else if (m[i][1] == n[j][1]) {
			PushPolyF((m[i][0])+(n[j][0]), m[i][1], P);
			i++;j++;
		}
		else {
			PushPolyF(n[j][0], n[j][1], P);
			j++;
		}
	}
	//将还未完成的数组继续录入
	if (i == M) {
		for(;j<N;j++)
			PushPolyF(n[j][0], n[j][1], P);
	}
	else
		for(;i<M;i++)
			PushPolyF(m[i][0], m[i][1], P);
}


猜你喜欢

转载自blog.csdn.net/weixin_37378399/article/details/78819677
今日推荐