4.两个多项式相加的算法

内容:用单链表存储一元多项式,并实现两个多项式相加

此代码运用了第二个算法单链表的基本算法的实现,难度较易,可以用来当作链表的简单问题练手

代码如下:

#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代表输入多项式的系数和指数完成。

输出结果如下:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值