typedef struct PNode {
int coef;//系数
int expn;//指数
struct PNode* next;//指针域
int length=0;
}PNode ,*Polynomial;//首先是结构体定义
//初始化链表函数
int InitList(Polynomial &L)
{
L = new PNode;
L->next = NULL;
L->coef = 0;
L->expn = 0;
//尾插法
cout << "多项式节点数" << endl;
int n=0;
cin >> n;
PNode* p = L;
cout << "请输入多项式指数以及系数" << endl;
for (int i = 0; i < n; i++)
{
PNode* code = new PNode;
code->next = NULL;
cin >> code->expn;//指数
cin>> code->coef;//系数
p->next = code;
p = code;
L->length++;
}
return 0;
}
//链表输出函数
void PutList(Polynomial L)
{
PNode* p = L->next;
if (p)
{
cout << p->coef << "x" << "^" << p->expn;
p = p->next;
}
while (p)
{
cout <<"+"<<p->coef << "x" << "^" << p->expn;
p = p->next;
}
cout << endl;
}
//针对指数对链表进行排序算法
void Sort_L(Polynomial& L)
{
PNode* p = L;
for (int i = 0; i < L->length-1; i++)
{
p = L->next;//重置头节点
for (int j = 0; j < L->length - i - 1; j++)
{
if (p->expn > p->next->expn)
{
int temp = p->coef;
int temp2 = p->expn;
p->coef = p->next->coef;
p->expn = p->next->expn;
p->next->coef = temp;
p->next->expn = temp2;
}
p = p->next;
}
}
}
//链表相加函数算法
Polynomial merge_L(Polynomial L1, Polynomial L2)
{
if (L1 == NULL)
return L2;
if (L2 == NULL)
return L1;
Polynomial L = new PNode;
L->next = NULL;
PNode* p = L;
while (L1 && L2)
{//针对l1和l2的指数大小对其进行赋值排序链接
if (L1->expn > L2->expn)
{
p->next = L2;
p = p->next;
L2 = L2->next;
}
else if (L1->expn < L2->expn)
{
p->next = L1;
p = p->next;
L1 = L1->next;
}
else if(L1->expn==L2->expn)
{
L1->coef = L1->coef + L2->coef;
if (L1->coef != 0)
{
p->next = L1;
p = p->next;
}
L1 = L1->next;
L2 = L2->next;
}
}
while (L1)//当l1还有值的时候继续接连l1
{
p->next = L1;
p = p->next;
L1 = L1->next;
}
while (L2)//当l2还有值时接连l2
{
p->next = L2;
p = p->next;
L2 = L2->next;
}
return L;
}
完整代码如下:
#include<iostream>
using namespace std;
typedef struct PNode {
int coef;//系数
int expn;//指数
struct PNode* next;//指针域
int length=0;
}PNode ,*Polynomial;
void PutList(Polynomial);
//排序算法
void Sort_L(Polynomial& L)
{
PNode* p = L;
cout << p << endl;;
for (int i = 0; i < L->length-1; i++)
{
p = L->next;//重置头节点
for (int j = 0; j < L->length - i - 1; j++)
{
if (p->expn > p->next->expn)
{
int temp = p->coef;
int temp2 = p->expn;
p->coef = p->next->coef;
p->expn = p->next->expn;
p->next->coef = temp;
p->next->expn = temp2;
}
p = p->next;
}
}
}
int InitList(Polynomial &L)
{
L = new PNode;
L->next = NULL;
L->coef = 0;
L->expn = 0;
//尾插法
cout << "多项式节点数" << endl;
int n=0;
cin >> n;
PNode* p = L;
cout << "请输入多项式指数以及系数" << endl;
for (int i = 0; i < n; i++)
{
PNode* code = new PNode;
code->next = NULL;
cin >> code->expn;//指数
cin>> code->coef;//系数
p->next = code;
p = code;
L->length++;
}
return 0;
}
void PutList(Polynomial L)
{
PNode* p = L->next;
if (p)
{
cout << p->coef << "x" << "^" << p->expn;
p = p->next;
}
while (p)
{
cout <<"+"<<p->coef << "x" << "^" << p->expn;
p = p->next;
}
cout << endl;
}
Polynomial merge_L(Polynomial L1, Polynomial L2)
{
if (L1 == NULL)
return L2;
if (L2 == NULL)
return L1;
Polynomial L = new PNode;
L->next = NULL;
PNode* p = L;
while (L1 && L2)
{
if (L1->expn > L2->expn)
{
p->next = L2;
p = p->next;
L2 = L2->next;
}
else if (L1->expn < L2->expn)
{
p->next = L1;
p = p->next;
L1 = L1->next;
}
else if(L1->expn==L2->expn)
{
L1->coef = L1->coef + L2->coef;
if (L1->coef != 0)
{
p->next = L1;
p = p->next;
}
L1 = L1->next;
L2 = L2->next;
}
}
while (L1)
{
p->next = L1;
p = p->next;
L1 = L1->next;
}
while (L2)
{
p->next = L2;
p = p->next;
L2 = L2->next;
}
return L;
}
int main()
{
Polynomial L1, L2;
InitList(L1);
cout << "L1:";
PutList(L1);
Sort_L(L1);
cout << "排序后的L1:" ;
PutList(L1);
InitList(L2);
cout << "L2:";
PutList(L2);
Sort_L(L2);
cout << "排序后的L2:";
PutList(L2);
Polynomial L = merge_L(L1, L2);
Sort_L(L);
cout << "合并后的多项式:";
PutList(L);
return 0;
}