2021-03-11用链表实现的多项式加减

用链表实现的多项式加减

头文件中的代码:

#include<iostream>
#include<stdio.h>
//函数结果状态代码
#define MAXSIZE 100
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
//#define OVERFLOW -2
//Status 是函数的类型,其值是函数结果状态代码
typedef int Status,Elemtype;

using namespace std;
//练习:多项式的加减运算:利用链表实现
//1、定义
typedef struct poly
{
	float xi;
	int zhi;
	struct poly* next;
}poly,*Poly;
//2、初始化
Status InitList(Poly& L)
{
	L = new poly;  //生成新结点作为头结点,用头指针L指向头结点
	L->next = NULL;//头结点的指针域置空;
	return OK;
}
//3、建立链表
Status jlList(Poly& L,int n)
{
	L=new poly;
	L->next = NULL;
	poly* r, * p;
	r = L;
	for (int i = 0; i < n; i++)
	{
		p = new poly;
		cout << "请输入第" << i + 1 << "个数字的系数" << endl;
		cin >> p->xi;
		cout << "请输入第" << i + 1 << "个数字的指数" << endl;
		cin >> p->zhi;
		p->next = NULL;
		r->next = p;
		r = p;
	}
	return OK;
}


//4.判断链表是否为空
Status emptyList(Poly L)
{
	if (L->next == NULL)
		return ERROR;
	else
		return OK;
}

//5
//4.链表相加
poly* ListAdd(Poly L1, Poly L2)
{
	poly* L3;
	L3 = new poly;
	L3->next = NULL;
	poly* p, * q,*r,*s;
	r = L3;
	p = L1->next;
	q = L2->next;
	while (q && p)
	{
		if (p->zhi == q->zhi)
		{
			s = new poly;
			s->xi = p->xi + q->xi;
			s->zhi = p->zhi;
			s->next = NULL;
			r->next = s;
			r = s;
			p = p->next;
			q = q->next;
		}
		else if (p->zhi < q->zhi)
		{
			s = new poly;
			s->xi = p->xi;
			s->zhi = p->zhi;
			s->next = NULL;
			r->next = s;
			r = s;
			p = p->next;
		}
		else if (p->zhi > q->zhi)
		{
			s = new poly;
			s->xi = q->xi;
			s->zhi = q->zhi;
			s->next = NULL;
			r->next = s;
			r = s;
			q = q->next;
		}
	}
	while (!q&&p)
	{
		s = new poly;
		s->xi = p->xi;
		s->zhi = p->zhi;
		s->next = NULL;
		r->next = s;
		r = s;
		p = p->next;
	}
	while (!p && q)
	{
		s = new poly;
		s->xi = q->xi;
		s->zhi = q->zhi;
		s->next = NULL;
		r->next = s;
		r = s;
		q = q->next;
	}
	return L3;
}

//5.显示链表中的元素
void display(Poly L)
{
	poly* p;
	p = L->next;
	int j = 1;
	while (p) 
	{
		/*cout << "第" << j << "个元素的系数为" << p->xi << "  ";
		cout << "第" << j << "个元素的指数为" << p->zhi << endl;*/
		cout << "第" << j << "项为:(" << p->xi << "," << p->zhi << ")"<<"  " ;
		p = p->next;
		j++;
	}
	cout << endl;
}

主文件中代码:

#include<iostream>
#include"jiegou.h"
using namespace std;

int main()
{
	poly* L1, * L2, * L3;
	InitList(L1);
	InitList(L2);
	InitList(L3);
	jlList(L1, 6);
	jlList(L2, 3);
	display(L1);
	display(L2);
	L3 = ListAdd(L1, L2);
	display(L3);
	return 0;
}

仅供自学练习,欢迎大佬指点!!!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值