一元多项式的乘法与加法运算
一元多项式的乘法与加法运算
题目
链表实现
初始化输入
#include<iostream>
#include<cstdio>
using namespace std;
#define ElementType int
typedef struct PolyNode *PtrToPloyNode;
struct PolyNode
{
ElementType coef;
ElementType expon;
PtrToPloyNode link;
};
typedef PtrToPloyNode Polynomial;
Polynomial Polynomial1, Polynomial2;
void input()
{
int N;
ElementType CinTmp;
Polynomial NodeTmp,rear;
cin >> N;
rear = (PtrToPloyNode)malloc(sizeof(struct PolyNode));
cin >> CinTmp;
rear->coef = CinTmp;
cin >> CinTmp;
rear->expon = CinTmp;
Polynomial1 = rear;
for (size_t i = 0; i < N - 1; i++)
{
NodeTmp = (PtrToPloyNode)malloc(sizeof(struct PolyNode));
cin >> CinTmp;
NodeTmp->coef = CinTmp;
cin >> CinTmp;
NodeTmp->expon = CinTmp;
rear->link = NodeTmp;
rear = NodeTmp;
}
////
cin >> N;
rear = (PtrToPloyNode)malloc(sizeof(struct PolyNode));
cin >> CinTmp;
rear->coef = CinTmp;
cin >> CinTmp;
rear->expon = CinTmp;
Polynomial2 = rear;
for (size_t i = 0; i < N - 1; i++)
{
NodeTmp = (PtrToPloyNode)malloc(sizeof(struct PolyNode));
cin >> CinTmp;
NodeTmp->coef = CinTmp;
cin >> CinTmp;
NodeTmp->expon = CinTmp;
rear->link = NodeTmp;
rear = NodeTmp;
}
}
主程序
int main()
{
Polynomial Polynomial1, Polynomial2;
input(&Polynomial1, &Polynomial2);
Polynomial result = PolyAdd(Polynomial1, Polynomial2);
output(result);
return 0;
}
未AC全部代码
明天AC
#include<iostream>
#include<cstdio>
using namespace std;
#define ElementType int
typedef struct PolyNode *PtrToPloyNode;
struct PolyNode
{
ElementType coef;
ElementType expon;
PtrToPloyNode link;
};
typedef PtrToPloyNode Polynomial;
void input(Polynomial *Polynomial1, Polynomial *Polynomial2)//无头节点
{
int N;
ElementType CinTmp;
Polynomial NodeTmp,rear;
cin >> N;
rear = (PtrToPloyNode)malloc(sizeof(struct PolyNode));
cin >> CinTmp;
rear->coef = CinTmp;
cin >> CinTmp;
rear->expon = CinTmp;
*Polynomial1 = rear;
for (size_t i = 0; i < N - 1; i++)
{
NodeTmp = (PtrToPloyNode)malloc(sizeof(struct PolyNode));
cin >> CinTmp;
NodeTmp->coef = CinTmp;
cin >> CinTmp;
NodeTmp->expon = CinTmp;
rear->link = NodeTmp;
rear = NodeTmp;
}
rear->link = NULL;
////
cin >> N;
rear = (PtrToPloyNode)malloc(sizeof(struct PolyNode));
cin >> CinTmp;
rear->coef = CinTmp;
cin >> CinTmp;
rear->expon = CinTmp;
*Polynomial2 = rear;
for (size_t i = 0; i < N - 1; i++)
{
NodeTmp = (PtrToPloyNode)malloc(sizeof(struct PolyNode));
cin >> CinTmp;
NodeTmp->coef = CinTmp;
cin >> CinTmp;
NodeTmp->expon = CinTmp;
rear->link = NodeTmp;
rear = NodeTmp;
}
rear->link = NULL;
}
int Compare(int e1, int e2)
{
if (e1 == e2) return 0;
if (e1 > e2) return 1;
if (e1 < e2) return -1;
}
void Attach(int coef, int expon, Polynomial * PrtRear)
{
Polynomial TempNode = (Polynomial)malloc(sizeof(struct PolyNode));
TempNode->coef = coef;
TempNode->expon = expon;
(*PrtRear)->link = TempNode;
(*PrtRear) = TempNode;
}
Polynomial PolyAdd(Polynomial P1, Polynomial P2)
{
Polynomial front, rear, temp;
int sum;
rear = (Polynomial)malloc(sizeof(struct PolyNode));
front = rear;
while (P1 && P2)
{
switch (Compare(P1->expon,P2->expon))
{
case 1://P1指数比较大
Attach(P1->coef, P1->expon, &rear);
P1 = P1->link;
break;
case -1://P2指数比较大
Attach(P2->coef,P2->expon,&rear);
P2 = P2->link;
break;
case 0://P1 P2指数相同
sum = P1->coef + P2->coef;
if (sum)
{
Attach(sum, P2->expon,&rear);
}
P1 = P1->link;
P2 = P2->link;
break;
default:
break;
}
}
for (; P1; P1 = P1->link)Attach(P1->coef,P1->expon,&rear);
for (; P2; P2 = P2->link)Attach(P2->coef, P2->expon, &rear);
rear->link = NULL;
temp = front;
front = front->link;
free(temp);
return front;
}
void output(Polynomial result)
{
//result = result->link;
if (result == NULL)
{
cout << '0 0';
}
while (result)
{
cout << (result)->coef << ' ' << (result)->expon;
if ((result)->link) cout << ' ';
result = result->link;
}
}
Polynomial PolyMulti(Polynomial Polynomial1, Polynomial Polynomial2)
{
Polynomial result;
Polynomial temp, front;
temp = (Polynomial)malloc(sizeof(struct PolyNode));
temp->link = NULL;
result = (Polynomial)malloc(sizeof(struct PolyNode));
result = NULL;
for(;Polynomial1;Polynomial1= Polynomial1->link)
{
front = Polynomial2;
for(; front; front = front->link)
{
temp->coef = Polynomial1->coef * front->coef;
temp->expon = Polynomial1->expon + front->expon;
result = PolyAdd(temp,result);
}
}
free(temp);
return result;
}
int main()
{
Polynomial Polynomial1, Polynomial2;
input(&Polynomial1, &Polynomial2);
Polynomial result1 = PolyMulti(Polynomial1, Polynomial2);
output(result1);
cout << endl;
Polynomial result2 = PolyAdd(Polynomial1, Polynomial2);
output(result2);
return 0;
}