typedef struct Polynomial // 多项式
{
int Coefficient; // 系数
int Exponent; // 指数
} Polynomial;
typedef struct Node // 节点
{
Polynomial Poly;
struct Node* Next;
} Node;
typedef Node* List; // 多项式的项在链表中按指数由大到小排列
List CreateHeader(void); // 创建多项式的表头
Node* CreateNode(List Header); // 创建一个节点
void ZeroPolynomial(Node* Ptr); // 使节点中的系数和指数的值都为0
List MultPolynomial(List Header1, List Header2); // 两个多项式求积
/*
参数:1个:待初始化的节点的指针
结果:节点中的系数和指数都初始化为0
*/
void ZeroPolynomial(Node* Ptr)
{
if (Ptr != NULL) // 防止传入空指针
{
Ptr->Poly.Coefficient = 0; // 系数初始化为0
Ptr->Poly.Exponent = 0; // 指数初始化为0
Ptr->Next = NULL;
}
}
/*
参数:1个:多项式的表头
结果:在链表后创建一个节点,并初始化系数和指数为0
返回:若成功创建,返回创建得节点的指针;否则,返回NULL
*/
Node* CreateNode(List Header)
{
Node* Ptr, * Tmp; // Ptr -- 接收创建得节点的指针
// Tmp -- 临时存放指针,用于寻找链表末尾
Ptr = (Node*)malloc(sizeof(Node));
if (Ptr == NULL)
{
ferror("Wrong");
return NULL;
}
ZeroPolynomial(Ptr); // 初始化节点
Tmp = Header; // 寻找链表末尾
while (Tmp->Next != NULL)
Tmp = Tmp->Next;
Tmp->Next = Ptr; // 将创建得节点添加至链表末尾
return Ptr;
}
/*
参数:无
结果:创建多项式的表头
返回:若成功创建,返回表头指针;否则,返回NULL
*/
List CreateHeader(void)
{
List Header;
Header = (List)malloc(sizeof(Node));
if (Header == NULL)
{
ferror("Wrong");
return NULL;
}
ZeroPolynomial(Header); // 初始化表头
return Header;
}
/*
参数:2个,多项式1和2的表头
结果:多项式1和2相乘,将结果放在链表中,按指数由大到小排列
返回:返回相乘后结果的表头
*/
List MultPolynomial(List Header1, List Header2)
{
Node* Tmp1, * Tmp2, * MultTmp; // Tmp1 -- 接收链表1的指针;Tmp2 -- 接收链表2的指针
List MultHeader; // MultTmp -- 接收结果链表的指针;MultHeader -- 存放结果的链表
int Coefficient, Exponent; // Coefficient -- 系数;Exponent -- 指数
MultHeader = CreateHeader(); // 创建表头
Tmp1 = Header1->Next;
while (Tmp1 != NULL)
{
Tmp2 = Header2->Next;
while (Tmp2 != NULL)
{
MultTmp = MultHeader->Next;
Coefficient = Tmp1->Poly.Coefficient * Tmp2->Poly.Coefficient;
Exponent = Tmp1->Poly.Exponent + Tmp2->Poly.Exponent;
while (MultTmp != NULL) // 合并同类项
{
if (MultTmp->Poly.Exponent == Exponent)
{
MultTmp->Poly.Coefficient += Coefficient;
break;
}
MultTmp = MultTmp->Next;
}
if (MultTmp == NULL) // 无同类项,创建新节点
{
MultTmp = CreateNode(MultHeader);
MultTmp->Poly.Coefficient = Coefficient;
MultTmp->Poly.Exponent = Exponent;
}
Tmp2 = Tmp2->Next;
}
Tmp1 = Tmp1->Next;
}
return MultHeader;
}多项式乘法(链表)
最新推荐文章于 2023-09-23 19:46:02 发布
该代码实现了一个用链表存储的多项式结构,支持创建表头、创建节点、初始化节点(系数和指数为0)、以及两个多项式相乘的功能。相乘的过程是通过遍历两个多项式的节点,合并同类项或创建新节点来完成的。
3793

被折叠的 条评论
为什么被折叠?



