SWUST OJ 1040 一元多项式加法运算的实现

本文介绍了一个C++程序,展示了如何使用LNode结构定义链表,并详细讲解了初始化链表、链表元素的插入操作以及链表的遍历。通过`initLinkList`函数创建节点,`opLinkList`函数实现数据修改,`dispLinkList`用于展示链表内容。
摘要由CSDN通过智能技术生成

#include <stdio.h>
#include <stdlib.h>

typedef struct LNode
{
	int data;
	int index;
	struct LNode* next;
}LNode;

void initLinkList(LNode* pL)
{
	int m, n;
	LNode* pR, * pS;
	pR = pL;
	while (1)
	{
		scanf("%d,%d", &m, &n);
		if (m == 0 && n == 0)
			break;
		pS = (LNode*)malloc(sizeof(LNode));
		pS->next = NULL;
		pS->data = m;
		pS->index = n;
		pR->next = pS;
		pR = pS;
	}
}

void opLinkList(LNode* pLA, LNode* pLB)
{
	LNode* pR1, * pR, * pS;
	int m, n;
	while (1)
	{
		pR1 = pLA;
		pR = pLA->next;
		scanf("%d,%d", &m, &n);
		if (m == 0 && n == 0)
			break;
		while (pR != NULL && n > pR->index)
		{
			pR1 = pR1->next;
			pR = pR->next;
		}
		if (pR == NULL || n < pR->index)
		{
			pS = (LNode*)malloc(sizeof(LNode));
			pS->data = m;
			pS->index = n;
			pR1->next = pS;
			pS->next = pR;
		}
		if (n == pR->index)
		{
			pR->data += m;
		}
	}
	pR1 = pLA;
	pR = pLA->next;
	while (pR != NULL)
	{
		if (pR->data == 0)
		{
			pR1->next = pR->next;
			pR = pR->next;
		}
		else
		{
			pR1 = pR1->next;
			pR = pR->next;
		}
	}
}

void dispLinkList(LNode* pL)
{
	LNode* pR;
	pR = pL->next;
	while (pR != 0)
	{
		printf("%dx^%d", pR->data, pR->index);
		pR = pR->next;
		if (pR != NULL)
			printf("+");
	}
}

int main()
{
	LNode* pLA, * pLB;
	pLA = (LNode*)malloc(sizeof(LNode));
	pLA->next = NULL;
	pLB = (LNode*)malloc(sizeof(LNode));
	pLB->next = NULL;
	initLinkList(pLA);
	opLinkList(pLA, pLB);
	dispLinkList(pLA);
	return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值