编译环境 gcc
#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>
typedef struct Node* PNode;
typedef struct Node {
float coef;
int exp;
PNode Next;
}Node;
//创建链表,并从小到大排序
void CreatSortList(PNode head)
{
PNode p;
PNode node;
float coef;
int exp;
bool flag;
p = head->Next;
scanf("%f,%d", &coef, &exp);
while (coef != 0 || exp != 0)
{
node = (PNode)malloc(sizeof(Node));
node->coef = coef;
node->exp = exp;
node->Next = NULL;
if (head->Next == NULL)
{
head->Next = node;
p = head->Next;
}
else if (node->exp > p->exp)
{
p->Next = node;
p = p->Next;
}
else if (node->exp < p->exp)
{
flag = 0;
p = head;
while (p->Next != NULL)
{
if (p->Next->exp > node->exp)
{
node->Next = p->Next;
p->Next = node;
break;
}
else
p = p->Next;
}
while (p->Next != NULL)
p = p->Next;
}
else
{
p->coef += node->coef;
free(node);
}
scanf("%f,%d", &coef, &exp);
}
}
void PrintList(PNode head)
{
PNode p = head->Next;
while (p != NULL)
{
printf("%.3f,%d\n", p->coef, p->exp);
p = p->Next;
}
}
PNode AddPoly(PNode head1, PNode head2)
{
PNode pa = head1->Next;
PNode pb = head2->Next;
PNode head, pc;
PNode node;
head = (PNode)malloc(sizeof(Node));
head->Next = NULL;
pc = head;
while (pa != NULL && pb != NULL)
{
if (pa->exp < pb->exp)
{
pc->Next = pa;
pa = pa->Next;
}
else if (pa->exp > pb->exp)
{
pc->Next = pb;
pb = pb->Next;
}
else
{
node = (PNode)malloc(sizeof(Node));
node->coef = pa->coef + pb->coef;
node->exp = pa->exp;
node->Next = NULL;
pc->Next = node;
pb = pb->Next;
pa = pa->Next;
}
pc = pc->Next;
pc->Next = NULL;
}
if (pa == NULL)
{
pc->Next = pb;
}
else
pc->Next = pa;
return head;
}
int main(void)
{
PNode head1 = (PNode)malloc(sizeof(Node));
PNode head2 = (PNode)malloc(sizeof(Node));
head1->Next = NULL;
head2->Next = NULL;
printf("请输入第一个多项式每一项的系数和指数,如3,5。输入0,0结束\n");
CreatSortList(head1);
printf("第一个多项式按指数升序排列为:\n");
PrintList(head1);
printf("请输入第二个多项式每一项的系数和指数,如3,5。输入0,0结束\n");
CreatSortList(head2);
printf("第二个多项式按指数升序排列为:\n");
PrintList(head2);
PNode head3 = AddPoly(head1, head2);
printf("两个多项式相加为:\n");
PrintList(head3);
return 0;
}