数据结构与算法分析——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
#include
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