5.一元多项式相加——单向链表

题目说明:
编写一元多项式加法运算程序。要求用线性链表存储一元多项式(参照课本)。该程序有以下几个功能:

  1. 多项式求和

输入:输入三个多项式,建立三个多项式链表Pa、Pb、Pc

(提示:调用CreatePolyn(polynomial &P,int m)。

输出:显示三个输入多项式Pa、Pb、Pc、和多项式Pa+Pb、多项式Pa+Pb+Pc

(提示:调用AddPolyn(polynomial &Pa, polynomial Pb), 调用PrintPolyn(polynomial P))。

  1. 退出

输入:
根据所选功能的不同,输入格式要求如下所示(第一个数据是功能选择编号,参见测试用例):

1
多项式A包含的项数,以指数递增的顺序输入多项式A各项的系数(整数)、指数(整数)

多项式B包含的项数,以指数递增的顺序输入多项式B各项的系数(整数)、指数(整数)

多项式C包含的项数,以指数递增的顺序输入多项式C各项的系数(整数)、指数(整数)

0 ---操作终止,退出。
输出:
对应一组输入,输出一次操作的结果(参见测试用例)。

1 多项式输出格式:以指数递增的顺序输出: <系数,指数>,<系数,指数>,<系数,指数>,参见测试用例。零多项式的输出格式为<0,0>
0 无输出

扫描二维码关注公众号,回复: 3749531 查看本文章

测试用例
in:
1
2
1 1 2 2
2
1 1 2 2
2
1 1 2 2
out:
<1,1>,<2,2>↵
<1,1>,<2,2>↵
<1,1>,<2,2>↵
<2,1>,<4,2>↵
< 3,1>,<6,2>↵

#include <cstdio>
#include <cstring>
using namespace std;

struct Node
{
	int coef, expn;
	Node *next;
};
struct Polyn
{
	Node *head, *tail;
	Polyn()
	{
		head = new Node;
		head->coef = head->expn = -1;
		head->next = NULL;
		tail = head;
	}
	Node *insert(Node *p, Node *q)
	{
		q->next = p->next;
		p->next = q;
		return q;
	}
	void append(Node *p)
	{
		tail = insert(tail, p);
	}
	void append(int coef, int expn)
	{
		Node *p = new Node;
		p->coef = coef;
		p->expn = expn;
		tail = insert(tail, p);
	}
	void print()
	{
		Node *p = head->next;
		if (p == NULL)
		{
			printf("<0,0>\n");
			return;
		}
		printf("<%d,%d>", p->coef, p->expn);
		for (p = p->next; p != NULL; p = p->next)
			printf(",<%d,%d>", p->coef, p->expn);
		printf("\n");
	}
};
Polyn operator+(Polyn &pa, Polyn &pb)
{
	Polyn pc = Polyn();
	Node *qa = pa.head->next, *qb = pb.head->next;
	while (qa && qb)
	{
		if (qa->expn < qb->expn)
		{
			Node *p = qa;
			qa = qa->next;
			pc.append(p);
		}
		else if (qb->expn < qa->expn)
		{
			Node *p = qb;
			qb = qb->next;
			pc.append(p);
		}
		else
		{
			Node *p = new Node;
			p->coef = qa->coef + qb->coef;
			p->expn = qa->expn;
			p->next = NULL;
			if (p->coef != 0) pc.append(p);
			qa = qa->next;
			qb = qb->next;
		}
	}
	if (qa)
		pc.tail->next = qa;
	if (qb)
		pc.tail->next = qb;
	return pc;
}
int main()
{
	int q;
	while(~scanf("%d", &q) && q)
	{
		Polyn pa = Polyn();
		int n;
		scanf("%d", &n);
		for (int i = 1; i <= n; i++)
		{
			int coef, expn;
			scanf("%d%d", &coef, &expn);
			pa.append(coef, expn);
		}
		pa.print();
		Polyn pb = Polyn();
		scanf("%d", &n);
		for (int i = 1; i <= n; i++)
		{
			int coef, expn;
			scanf("%d%d", &coef, &expn);
			pb.append(coef, expn);
		}
		pb.print();
		Polyn pc = Polyn();
		scanf("%d", &n);
		for (int i = 1; i <= n; i++)
		{
			int coef, expn;
			scanf("%d%d", &coef, &expn);
			pc.append(coef, expn);
		}
		pc.print();
		Polyn p = pa + pb;
		p.print();
		p = p + pc;
		p.print();
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/ArgentumHook/article/details/83218682