设计程序计算任意两个最高阶不超过10的一元多项式的和,约定各项系数均为整数。
要求:
(1)从键盘输入多项式各项,并输出计算结果。
(2)分别用顺序表和链表为存储结构进行实现。
#include <stdio.h>
#include <stdlib.h>
typedef struct LinkNode
{
int coef;
int index;
struct LinkNode* next;
} LinkNode, * LinkList;
LinkList createLinkNode()
{
int coef, index;
LinkList L = (LinkList)malloc(sizeof(LinkNode));
L->next = NULL;
LinkNode* q;
q = L;
LinkNode* p;
printf("请输入多项式(系数,指数):");
scanf_s("%d,%d", &coef, &index);
while (!(coef == 0 && index == 0))
{
p = (LinkNode*)malloc(sizeof(LinkNode));
p->next = NULL;
p->coef = coef;
p->index = index;
q->next = p;
q = p;
printf("请继续输入多项式(系数,指数):");
scanf_s("%d,%d", &coef, &index);
}
return L;
}
void addLinkList(LinkList L1, LinkList L2)
{
LinkNode* p1, * n;
while (L2->next != NULL)
{
p1 = L1;
while (p1->next != NULL && p1->next->index != L2->next->index)
{
p1 = p1->next;
}
n = L2->next;
if (p1->next == NULL)
{
n->next = p1->next;
p1->next = n;
}//当L1的指针指到L1的最后一项的时候
else
{
p1->next->coef += n->coef;//当L1的指针指到和L2相同项的时候
free(n);
if (p1->next->coef == 0)
{
n = p1->next;
p1->next = n->next;
free(n);
}//当L1和L2两项相加等于0时
}
L2->next = L2->next->next;//将L2的指针指到下一项
}
free(L2);
}
int main()
{
LinkList L1 = createLinkNode();
LinkList L2 = createLinkNode();
addLinkList(L1, L2);
LinkNode* p = L1->next;
if (p == NULL) return 0;
while (p != NULL && p->next != NULL)
{
printf("%dx^%d + ", p->coef, p->index);
p = p->next;
}
if (p != NULL)
printf("%dx^%d", p->coef, p->index);
return 0;
}