栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++利用单链表实现一元多项式的加、乘操作

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++利用单链表实现一元多项式的加、乘操作

提示:一元多项式中的数据项含有两个数据分别是系数与指数,为了简单起见,系数与指数都为整数。 定义单链表的数据结构和结点的数据结构。
#include 

typedef struct
{
	int xi;//系数
	int zhi;//指数
}unit;

typedef struct LNode
{
	unit data; //结点的数据部分
	struct LNode *next;
} LinkList;
1.初始化单链表
//初始化链表
void InitList(LinkList *&L)
{
	L = new LinkList;
	L->next = NULL;
}
2.插入结点到有序单链表中 根据指数的大小,从大到小进行插入
void InsertList(LinkList *&L,unit e)
{
	LinkList *r,*s;//r是循环用的结点指针,s是插入的新结点
	r = L;
	//寻找新插入结点的位置
	while(r->next!=NULL && e.zhi < r->next->data.zhi)//以指数决定插入的位置
		r = r->next;
	if(r->next != NULL && e.zhi == r->next->data.zhi)//指数相等
		r->next->data.xi += e.xi;  //系数相加
	else
	{
		s = new LinkList;
		s->data.xi = e.xi;	s->data.zhi = e.zhi;
	//将e的值赋给s指针所指结点
		s->next = r->next;
		r->next = s;
	}
}
3.遍历单链表 一元多项式存在多种特殊情况 第一种特殊情况:系数为1,指数为0,只输出1。 第二种特殊情况:指数为1时,输出‘X’。
//遍历线性表
void DispList(LinkList *L)
{
	LinkList *p = L->next;
	int j = 0;
	while(p)
	{
		if(p->data.xi == 1 && p->data.zhi == 0)//系数为1,指数为0
		   cout<<"1";
		if(p->data.xi != 0 && p->data.xi != 1)
			cout<data.xi;
		if(p->data.xi != 0)
		{
			if(p->data.zhi > 1)
				cout<<"X^"<data.zhi;
			else if(p->data.zhi < 0)
				cout<<"X^("<data.zhi<<')';
			else
				if(p->data.zhi == 1)
					cout<<'X';
		}
		if(p->next != NULL && p->next->data.xi > 0)
			cout<<'+';
		p = p->next;

	}
	cout< 
4.两个多项式相加 
在单链表L的基础上,进行相加。 
//两个多项式相加
void AddList(LinkList *&L,LinkList *Lc)
{
	LinkList *b = Lc->next;
	while(b != NULL)
	{
		InsertList(L,b->data);//从Lc表中取出每一个节点插入到L中
		b = b->next;
	}
}
5.两个多项式相乘 单链表Lc的一个项的系数和指数需要乘以单链表Lb的所有项,将相乘得到的数据存入一个新表La,之后再由单链表Lc的下一个项进行操作。
void Cheng(LinkList *&La,LinkList *&Lb,LinkList *Lc)
{
	LinkList *b,*c = Lc->next;
	unit e;
	while(c != NULL)  //取Lc表中的每一个节点
	{
		b = Lb->next;  
		while(b != NULL)   //取Lb表中的每一个节点
		{
			e.xi = c->data.xi * b->data.xi;    //系数相乘
			e.zhi = c->data.zhi + b->data.zhi;   //指数相加,得到节点相乘的值 
			InsertList(La,e);  //再将该节点插入到La中
			b = b->next;
		}
		c = c->next;
	}
}
================================================= 主函数 因为要生成有两个多项式,所以外循环 while 代表多项式的个数。
void main()
{
	LinkList *La,*Lb,*L;
	InitList(La);InitList(Lb);InitList(L);
	int i,j = 0;
	unit k;
	while(j++ < 2)
	{
		i = 0;
		do
		{		
			cout<<"请输入第"<>k.xi;
			cout<<"请输入第"<>k.zhi;
			cout< 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/832748.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号