数据结构实验 第一章 链表(多项式加法)

数据结构实验 第一章 链表(多项式加法)
【问题描述】编写一个程序用单链表存储多项式,并实现两个一元多项式A与B相加放入C的函数。C中多项式按升幂输出。

【输入形式】输入A的项数后一个个输入对应的系数和指数;再按同样的方法输入B。
【输出形式】形如,a1xn1+a2xn2+…+a3*xn3

【要求】用链表实现

【提示】A、B刚开始可能是无序的,C按升幂排列,所以为了方便后面的操作要将A、B也升幂排序要写一个排序的程序。求和时系数为0的项不存入C。

//输入两个多项式,先将两个多项式按升幂排序,相加后再按升幂输出
#include<cstdlib>
#include<iostream>
#include<cstdio>
#include<cstdlib>
using namespace std;
typedef struct node* list;
struct node {//结点用来存储项
	float coef;//系数
    int expon;//指数
	list next;//下一项
};
void show(list l);
list create()//创建多项式//有头结点系数域放长度
{
	list q, r, head;
	int i;
	head = (list)malloc(sizeof(struct node));
	r = head;
	int n;
	cout << "输入多项式位数:";
	cin >> n;
	head->expon = n;
	for (i = 0; i < n; i++)
	{
		q = (list)malloc(sizeof(struct node));
		cout << "系数:";
		cin >> q->coef;
		cout << "指数:";
		cin >> q->expon;
		cout << "---------------"<<endl;
		r->next = q;//插入尾部方式
		r = q;
	}//能否找错比如输入两个指数相同的是错的
	r->next = NULL;
	show(head);
	return head;
}
list sort(list head)//按升幂排序
{
	list p = head->next, q;
	int e;
	float a;
	if (p!= NULL)
	{
		while (p->next!= NULL)
		{
			q = p->next;
			if (p->expon == q->expon)
			{
				cout << "多项式输入不能指数重复" << endl;
				exit(1);//非正常退出
			}
			while (q != NULL)
			{
				if (p->expon > q->expon)
				{
					e = q->expon;
					a = q->coef;
					q->expon = p->expon;
					q->coef = p->coef;
					p->expon = e;
					p->coef = a;
				}
				q = q->next;
			}
			p = p->next;
		}
	}
	show(head);
	return head;
}
list add(list a, list b)//排好序的多项式相加
{
	list p, q, r, c, s;
	int m=0, n=0;
	p = a->next;
	q = b->next;
	c = (list)malloc(sizeof(struct node));//c表头指针
	r = c;
	c->expon = 0;
	while (p&&q) 
	{
		if (p->expon < q->expon) 
		{
			s = (list)malloc(sizeof(struct node));
			s->expon = p->expon;
			s->coef = p->coef;
			r->next = s;
			r = s;
			p = p->next;
			c->expon++;
			n++;
		}
		else if (p->expon > q->expon) {
			s = (list)malloc(sizeof(struct node));
			s->expon = q->expon;
			s->coef = q->coef;
			r->next = s;
			r = s;
			q = q->next;
			c->expon++;
			m++;
		}
		else {
			float sum = p->coef + q->coef;
			if (sum != 0) {
				s = (list)malloc(sizeof(struct node));
				s->coef = sum;
				s->expon = p->expon;
				r->next = s;
				r = s;
				p = p->next;
				q = q->next;
				c->expon++;
			}
			else {
				p = p->next;
				q = q->next;
			}
			n++;
			m++;
		}
	}
	if (p == NULL && q == NULL)
		r->next = NULL;
	if (p != NULL) {
		r->next = p;
		c->expon = c->expon + a->expon - n;//记录长度
	}
	if (q != NULL) {
		r->next = q;
		c->expon = c->expon + b->expon - m;
	}
	return c;
}
void show(list l)//输出函数
{
	list p = l;
	int n = l->expon-1;
	if (p->expon)
	{
		p = p->next;
		if (p->coef >= 0)
		{
			if (p->expon > 0)
				cout << p->coef << "*x^" << p->expon;
			else if (p->expon == 0)
				cout << p->coef;
			else
				cout << p->coef << "*x^" << "(" << p->expon << ")";
		}
		else
		{
			if (p->expon > 0)
				cout << "(" << p->coef << ")" << "*x^" << p->expon;
			else if (p->expon == 0)
				cout << "(" << p->coef << ")";
			else
				cout << "(" << p->coef << ")" << "*x^" << "(" << p->expon << ")";
		}
		while (n--)
		{
			p = p->next;
			if (p->coef >= 0)
			{
				if (p->expon > 0)
					cout << "+" << p->coef << "*x^" << p->expon;
				else if (p->expon == 0)
					cout << "+" << p->coef;
				else
					cout << "+" << p->coef << "*x^" << "(" << p->expon << ")";
			}
			else
			{
				if (p->expon > 0)
					cout << "+" << "(" << p->coef << ")" << "*x^" << p->expon;
				else if (p->expon == 0)
					cout << "+" << "(" << p->coef << ")";
				else
					cout << "+" << "(" << p->coef << ")" << "*x^" << "(" << p->expon << ")";
			}
		}
		cout << endl;
	}
	else
		cout << 0;
}
int main()
{
	list a, b, c;
	a = create();
	a = sort(a);
	b = create();
	b = sort(b);
	cout << "输出:" << endl;
	c = add(a, b);
	show(c);
	return 0;
}

这和老师上课要求的输入输出形式不一定相同,请自行修改。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值