一元稀疏多项式的运算

本文介绍了一元稀疏多项式的运算实现,包括输入建立有序多项式、相加、相减和相乘的操作。在运算过程中,通过插入和比较系数与指数来保证结果的有序性。详细分析了多项式链表的构建和操作,以及相乘时的积项插入策略。
摘要由CSDN通过智能技术生成

一元稀疏多项式的运算

实现要求

⑴ 输入并建立多项式;
⑵ 输出多项式,输出形式为整数序列:n,c1,e1,c2,e2……cn,en,其中n是多项式的项数,ci,ei分别为第i项的系数和指数。所有输出都按指数降序排列。
⑶ 多项式A和B相加,建立多项式A+B,输出相加的多项式;
⑷ 多项式A和B相减,建立多项式A-B,输出相减的多项式;
⑸ 多项式A和B相乘,建立多项式A×B,输出相乘的多项式;
⑹ 设计一个菜单,至少具有上述操作要求的基本功能。

一元稀疏多项式的运算分析

⑴ 输入并建立有序多项式
每输入一项(c,e),将其插入到多项式链表的合适位置,在插入时:
*有同类项(指数相同):系数相加(或者不插入,显示已存在该项的提示)
* 没有同类项(指数不相同):直接插入
当输入和插入完成后,所建立的多项式链表是按指数大小有序的。
⑵ 多项式A和B相加/相减
① 将多项式A的每一项(c,e),将其插入到和/差多项式链表的合适位置;
② 将多项式B的每一项(c,e),根据其指数e找到在和/差多项式链表的正确位置,在插入时:
*有同类项(指数相同):系数相加/相减
*没有同类项(指数不相同):直接插入
当多项式B的所有项插入完成后,所建立的多项式链表是按指数大小有序的。(类似于集合的并操作)
⑶ 多项式A和B相乘
对于多项式A的每一项(ca,ea)和多项式B的每一项(cb,eb),将积项(ca×cb,ea+eb)插入到积多项式链表的合适位置,在插入时中:
*有同类项(指数相同):系数相加
*没有同类项(指数不相同):直接插入
当所有的积项(ca×cb,ea+eb)插入完成后,所建立的多项式链表是按指数大小有序的。

实现代码

#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
typedef struct Node{
   
	float data;
	int flag;
	struct Node *next;
}Dnode;

// 输出多项式
void Display(Dnode *L){
   //打印多项式
	Dnode *p;
	p = L->next;
	if (p != NULL){
   
		printf("多项式为\t");
		if (p->flag==0)
			printf("%0.2f", p->data);
		else
		    printf("%0.2f*x^%d", p->data, p->flag);
		p = p->next;
		while (p != NULL)
		{
   
			if (p->data > 0)
				printf("+%0.2f*x^%d", p->data, p->flag);
			else
				printf("%0.2f*x^%d", p->data, p->flag);
			p = p->next;
		}
		printf("\n");
	}
	else
		printf("无数据!\n");
}

//插入
void  add_Dnode_item(Dnode  *L, float c, int e, int k)
/*  将项(c,e)以k的方式插入到以L为头指针的一元多项式链表中   */
/*   插入后的一元多项式链表是按指数从小到大有序   */
{
   
	Dnode  *pre = L, *p = L->next, *q;  float  x;
	while (p != NULL&&p->flag<e)
	{
   
		pre = p;  p = p->next;
	}
	if (p == NULL)   /*   已到链表最后,开辟新结点,插入到最后   */
	{
   
		q = 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值