我的算法让我想到了“寄生虫”(难道是因为前不久看了这部剧?)
#include <stdio.h>
#include <stdlib.h>
#define MAX 100
typedef struct Node *PtrToNode;
typedef PtrToNode Header;
typedef PtrToNode FirstNode;
typedef PtrToNode Polynomial;
void MultPolynomial(const Polynomial Poly1, const Polynomial Poly2);
void ZeroPolynomial(Polynomial Poly);
struct Node
{
int Coefficient;
int Exponent;
char Original[MAX]; //判断这个元素是那个链表里面的
PtrToNode Prev; //所用的链表是双链表
PtrToNode Next;
};
typedef PtrToNode Polynomial; /*Nodes sorted by exponent*/
int main()
{
return 0;
}
//将多项式初始化为0的过程
void ZeroPolynomial(Polynomial Poly)
{
Poly->Next = NULL;
Poly->Prev = NULL;
Poly->Coefficient = 0;
Poly->Exponent = 0;
}
//两个多项式相乘的过程
void MultPolynomial(const Polynomial Poly1, //Poly1是较小项
const Polynomial Poly2)
{
//设置三个指针分别指向三个链表
//TmpCell 保存A一个单元和B一个单元的乘积
FirstNode A0, A1, B;
Header TmpCell;
A0 = Poly1;
A1 = Poly1;
B = Poly2->Next;
while (A0->Next != NULL)
{
if (A0->Original == "A")
{
while (B != NULL)
{
TmpCell = (FirstNode)malloc(sizeof(struct Node));
ZeroPolynomial(TmpCell);
TmpCell->Coefficient = A->Coefficient * B->Coefficient;
TmpCell->Exponent = A->Exponent + B->Exponent;
TmpCell->Original = "A*B"; //A与B的乘积都标识为"A*B"
while (A1->Next != NULL)
{
if (TmpCell->Exponent > A1->Exponent)
{
//在A之前插入TmpCell的元素
TmpCell->Next = A1;
TmpCell->Prev = A1->Prev;
A1->Prev->Next = TmpCell;
break;
}
else if (TmpCell->Exponent < A->Exponent)
{
//继续找
A1 = A1->Next;
continue;
}
else
{
//如果指数相等,那么TmpCell的系数加上A的系数再插入到A的前方
TmpCell->Next = A1;
TmpCell->Prev = A1->Prev;
TmpCell->Coefficient += A1->Coefficient;
A1->Prev->Next = TmpCell;
break;
}
}
B = B->Next;
}
}
else
A0 = A0->Next;
}
}