#include<stdio.h>
#include<malloc.h>
typedef struct Lnode{
int data;
int data1;
struct Lnode *next;
}Lnode, *Linklist;
void create(Linklist &S, int n)
{
S = (Linklist)malloc(sizeof(Lnode));
S->next = NULL;
int i;
Linklist p,a;
a = S;
for(i = 0; i < n; i++)
{
p = (Linklist)malloc(sizeof(Lnode));
printf("请依次输入系数指数:");
scanf("%d%d", &p->data, &p->data1);
p->next = NULL;
a->next = p;
a = p;
}
}
void print(Linklist L)
{
Linklist p;
p = L->next;
if(p == NULL)
{
printf("0\n");
}
while(p)
{
if(p->data == 0)
{
//printf("0");
}
else
if(p->data == 1)
{
printf("X^%d", p->data1);
}
else
{
printf("%dX^%d", p->data, p->data1);
}
Linklist q;
q = p;
p = p->next;
if(p != NULL && q->data != 0)
{
printf("+");
}
}
printf("\n");
}
void add(Linklist List1, Linklist List2, Linklist &L)
{
Linklist p1, p2, list, s;
L = (Linklist)malloc(sizeof(Lnode));
L->next = NULL;
list = L;
p1 = List1->next;
p2 = List2->next;
while (p1 && p2)
{
if (p1->data1 < p2->data1)
{
s = p1->next;
list->next = p1;
list = p1;
list->next = NULL;
p1 = s;
}
else if (p1->data1 == p2->data1)
{
p1->data = p1->data + p2->data;
if (p1->data != 0)
{
list->next = p1;
s = p1->next;
list = p1;
list->next = NULL;
p1 = s;
p2 = p2->next;
}
else
{
p1 = p1->next;
p2 = p2->next;
}
}
else
{
s = p2->next;
list->next = p2;
list = p2;
list->next = NULL;
p2 = s;
}
}
if(p1 != NULL) list->next = p1;
if(p2 != NULL) list->next = p2;
}
int main()
{
Linklist a;
Linklist b;
Linklist c;
int n;
int n1;
printf("请输入第一个多项式的项数:");
scanf("%d", &n);
create(a, n);
printf("第一个多项式为:");
print(a);
printf("请输入第二个多项式的项数:");
scanf("%d", &n1);
create(b, n1);
printf("第二个多项式为");
print(b);
add(a, b, c);
printf("两式相加的结果为:");
print(c);
return 0;
}