内容:用单链表存储一元多项式,并实现两个多项式相加。
此代码运用了第二个算法单链表的基本算法的实现,难度较易,可以用来当作链表的简单问题练手
代码如下:
#include<stdio.h>
#include<stdlib.h>
typedef struct poly
{
int mi; //指数幂
int xishu;//系数
struct poly* next;
}PNode, * PLinklist;
int lnit(PLinklist* head) //链表初始化
{
*head = (PLinklist)malloc(sizeof(PNode));
if (*head)
{
(*head)->next = NULL;
return 1;
}
else
return 0;
}
int CF(PLinklist* head)//尾插法创建链表
{
PNode* ptemp, * phead;
int c;//存放系数
int exp;//存放指针
int i = 1;//计数器提示用户输入第几项
phead = *head;
scanf_s("%d,%d", &c, &exp);
while (c != 0)
{
ptemp = (PLinklist)malloc(sizeof(PNode));
if (ptemp)
{
ptemp->mi = exp;//接受指数
ptemp->xishu = c;//接受系数
ptemp->next = NULL;
phead->next = ptemp;
phead = ptemp;
scanf_s("%d,%d", &c, &exp);
}
else
return 0;
}
return 1;
}
void polyadd(PLinklist LA, PLinklist LB)
{
PNode* LA1 = LA->next;
PNode* LB1 = LB->next;
PNode* temp;
while (LA1 && LB1)
{
if (LA1->mi < LB1->mi)
{
LA->next = LA1;
LA = LA->next;
LA1 = LA->next;
}
else if (LA1->mi == LB1->mi)
{
LA1->xishu += LB1->xishu; // Add the coefficients
if (LA1->xishu == 0)
{
// 去掉系数为0的项2
temp = LA1;
LA1 = LA1->next;
free(temp);
}
else
{
LA->next = LA1;
LA = LA1;
LA1 = LA1->next;
temp = LB1;
LB1 = LB1->next;
free(temp);
}
}
else
{
LA->next = LB1;
LA = LA->next;
LB1 = LB1->next;
}
}
if (LA1)
{
LA->next = LA1;
}
else
{
LA->next = LB1;
}
}
void print(PLinklist head)
{
head = head->next;
while (head)
{
if (head->mi)
printf("%dx^%d", head->xishu, head->mi);
else
printf("%d", head->xishu);
if (head->next)
printf("+");
else
break;
head = head->next;
}
}
int main()
{
PLinklist LA;
PLinklist LB;
lnit(&LA);
lnit(&LB);
printf("输入第一个多项式的系数,指数 eg:10,2");
printf("\n");
CF(&LA);
printf("输入第二个多项式的系数,指数 eg:10,2");
printf("\n");
CF(&LB);
print(LA);
printf("\n");
print(LB);
printf("\n");
polyadd(LA, LB);
printf("两个多项式相加的结果是:");
print(LA);
printf("\n");
}
输入0,0代表输入多项式的系数和指数完成。
输出结果如下: