c语言版数据结构(奇迹冬瓜)-链表实战(3)解升序排列的一元多项式相加

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

//c语言版数据结构(奇迹冬瓜)-链表实战(3)解升序排列的一元多项式相加

/*
主要函数思想:
初始化一元多项式A
初始化一元多项式B
初始化一元多项式C
给一元多项式A赋入数据
给一元多项式B赋入数据(指数升序)
当A的结点或者B的结点项的下一项不为空
{
    比较AB的指数
	{
	   定位当前结点A的指数,定位当前结点B的指数.
	   如果A的结点指数<B的结点指数(C的下一个结点为当前A的结点,A移动结点)
	   如果A的结点指数=B的结点指数(如果系数A+B=0,A,B结点都移动)
	   如果A的结点指数>B的结点指数(C的下一个结点为当前B的结点,B移动结点)
	}
}
当A的结点不为空
{
  c链接A接下来的结点
}
当B的结点不为空
{
  c链接B接下来的结点
}
输出
*/

//---------头文件----------

#include<stdio.h>
#include<stdlib.h>

//---------宏定义----------

#define TRUE 1
#define ERROR 0
#define OVERFLOW -2

//-----结构体和替换名------

typedef struct Node
{
	float coef;
	int expn;
	struct Node *next;
}Poly,*Polynomial;

//------函数-------

int InitPolynomial(Polynomial f);
int InputData(Polynomial f);
int Compare(int c1,int c2);
int JudgeCoefZero(float a1,float a2);
void OutPut(Polynomial f);

//-----主函数-----

void main()
{
	Poly A,B,C,*f1=&A,*f2=&B,*f3=&C;
	int d;
	InitPolynomial(f1);InitPolynomial(f2);InitPolynomial(f3);
	InputData(f1);InputData(f2);
	f1=f1->next;
	f2=f2->next;
	while(f1&&f2)
	{
		d=Compare(f1->expn,f2->expn);
		switch(d)
		{
		   case -1:f3->next=f1;f1=f1->next;f3=f3->next;break;
		   case 0:if(!JudgeCoefZero(f1->coef,f2->coef))
				  {
					  f1->coef+=f2->coef;
					  f3->next=f1;
					  f3=f3->next;
				  }
				  f1=f1->next;
				  f2=f2->next;
				  break;
		   case 1:f3->next=f2;f2=f2->next;f3=f3->next;break;
		}
	}
	if(f1)
	{
		f3->next=f1;
	}
	if(f2)
	{
		f3->next=f2;
	}
	OutPut(&C);
}

int InitPolynomial(Polynomial f)
{
	if(!(f=(Polynomial)malloc(sizeof(Poly))))
	{
		exit(OVERFLOW);
	}
	f->next=NULL;
	return TRUE;
}

int InputData(Polynomial f)
{
	Polynomial StartNode=f,Tempf=f,NewNode;
	int n;
	printf("输入多项式的项数:");
	do
	{
		scanf("%d",&n);
		if(n<0)
		{
			printf("输入错误!重新输入.\n");
		}
	}while(n<0);
	printf("按升序输入一元多项式的系数和指数:\n");
	for(;n>0;n--)
	{
		if(!(NewNode=(Polynomial)malloc(sizeof(Poly))))
	    {
			exit(OVERFLOW);
		}
		scanf("%f%d",&NewNode->coef,&NewNode->expn);
		Tempf->next=NewNode;
		NewNode->next=NULL;
		Tempf=NewNode;
	}
	f=StartNode;
	return TRUE;
}

int Compare(int c1,int c2)
{
	if(c1>c2)
	{
		return 1;
	}
	else if(c1==c2)
	{
		return 0;
	}
	else
	{
		return -1;
	}
}

int JudgeCoefZero(float a1,float a2)
{
	return 0==a1+a2?1:0;
}

void OutPut(Polynomial f)
{
	f=f->next;
	printf("f(x)=");
	while(f)
	{
		if(f->expn)
		{
			printf("%fx^%d",f->coef,f->expn);
		}
		else
		{
			printf("%f",f->coef);
		}

		f=f->next;
		if(f&&f->coef>0)
		{
			printf("+");
		}
	}
	getchar();
	getchar();
}


 

链表——一元多项式求导 7-一元多项式求导(20 分) 设计函数求一元多项式的导数。 输入格式: 以指数递降方式输入多项式非零项系数和指数(绝对值均为不超过1000的整数)。数字间以空格分隔。 输出格式: 以与输入相同的格式输出导数多项式非零项的系数和指数。数字间以空格分隔,但结尾不能有多余空格。 输入样例: 3 4 -5 2 6 1 -2 0 输出样例: 12 阅读详情

相关推荐

c语言一元多项式简单的计算器 期末大作业

#include&lt;stdio.h&gt; #include&lt;stdlib.h&gt; #include&lt;conio.h&gt; typedef struct Polynomial {     int coef;//系数     int expn;//指数     struct Polynomial *next; }*Poly, Node; Poly Creat()        ...

大白兔的博客 8784

C语言下用单链表实现一元多项式的四则运算

在C语言下实现多项式的四则运算及合并同类项,并按升序排序的功能,已成功运行!功能模块包括合并同类项,升序排序,创建多项式,输出多项式,加法,减法,乘法,除法。

数据结构C语言描述——用单链表实现多项式相加

#include #include typedef DataType; typedef struct Node2{ DataType xishu; DataType zhisu; struct Node2 *Next; }Node2; typedef struct Node2* PNode2; //多项式按照指数大小排序 void insertNewPoint_link(PNode

crazy_kid_hnf的博客 2196

多项式计算器_version1_QT实现(C++)

这个一个多项式计算器,用QT实现。编程语言C++。 很酷,很好玩!请大家多多指教!

Java线性表多项式求和_C算法与数据结构-线性表的应用,多项式求和---ShinePans

/*---上机作业作业,二项式加法---*//*---By 潘尚 ---*//*---日期: 2014-5-8 . ---*//*---题目:---*///如果有两个稀疏多项式A和B,设计算法完毕下列任务//1.输入并建立多项式A和B;//2.求两个多项式的和多项式C;//3.求两个多项式的积多项式D;//输出4个多项式A,B,C,D;#include #include #include type...

weixin_39716921的博客 173

数据结构学习(C++)——单链表应用(一元多项式【1】) ()

数据结构学习(C++)——单链表应用(一元多项式【1】) ()[@more@]总算到了这里,这时,你会很得意的说,辛辛苦苦学的单链表总算知道能干点什么了。但是很不幸,如果你和我一样看的是那本书,到这里,你可能比学双向链表时还要...

csd3176的博客 300

问题 A: 一元多项式运算器——建立与输出

问题 A: DS-2.3.1 一元多项式运算器——建立与输出(by Yan) 时间限制: 10 Sec 内存限制: 256 MB 提交: 1694 决: 922 [提交][状态][讨论版] 题目描述 通过键盘接收一组多项式的系数和指数,建立多项式(要求各项按指数升序排列),并按指定格式输出。 输入 第一行输入一个正整数n,表示非零项个数。 第二行输入n对整数,每对形如(7,3),表示系数为...

weixin_43740054的博客 1911

一元多项式的表示及相加

线性表的应用——一元多项式的表示及相加 对于一元多项式,可以用线性表来处理,可以采用顺序存储或者是式存储 (一)一元多项式的顺序存储表示 1&gt;.一元多项式Pn(x)只存储该一元多项式各项的系数,每个系数所对应的指数项则隐含在存储系数的顺序表的下标中。即p[0]存系数p0,对应为的系数。p[n]对应存系数pn,对应为的系...

团子7号 2600

数据结构)线性表_多项式相加1_模仿

#include #include #include typedef int ElemType; typedef struct Node *PloyNode; typedef struct Node *PloyList; /*结构体*/ struct Node { int coef; int expn; PloyNode next; }; /*带表头的单向链表*/ void

u013080459的专栏 860

使用链表一元多项式的和

#include #include using namespace std; struct node { int coefficient; int exponent; struct node *next; }; struct node *creat()//建立单链表返回链表头指针,此头指针无数据 { struct node *head,*p1,*p2;

老猫的博客 672

数据结构】哈工大实验一:一元多项式(代碼以及報告)

代碼見最後的附錄。 一、 实验目的 写一个代码计算一元多项式链表存储一元多项式,在此基础上完成对多项式的代数操作。 1.能够输入多项式(可以按各项的任意输入顺序,建立按指数降幂排列多项式)和输出多项式(按指数降幂排列),以文件形式输入和输出,并显示。 2.能够计算多项式在某一点x=x0的值,其中x0是一个浮点型常量,返回结果为浮点数。 3.能够给出计算两个多项式加法、减法、乘...

清凌的博客 2024

JAVA学习笔记3_Java语言基础(流程控制结构)

1_Java语言基础(键盘录入的基本格式讲)(掌握)如何实现键盘录入呢?    * a:导包        * 格式:            * import java.util.Scanner;         * 位置:            * 在class上面。    * b:创建键盘录入对象        * 格式:            * Scanner sc = new Scan...

qq_32187313的博客 1386

hdu 2011 多项式求和

多项式求和<br />Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)<br />Total Submission(s): 11765    Accepted Submission(s): 6983<br /><br /><br />Problem Description多项式的描述如下:<br />1 - 1/2 + 1/3 - 1/4 + 1/5 - 1/6 + ...<br />现在请

killsoon的专栏 1440

用Java实现多项式相加

今天看了一篇关于C的多项式相加的文章,但是觉得那位作者的想法尚有待完善,觉得可以做得更好,可惜我不熟悉C,于是我用我熟悉的Java来完善这一程序。         多项式由三个部分组成:常数、系数和未知数(A、B、X等的)。多项式的加法规则是相同系数、相同未知数的常数可以进行相加,组成一个新的项,而不同系数或者不同未知数的,则不能进行相加减,应将其写到后面。我的多项式相加的想法是:先对一个用户输

calkee的专栏 5246

java中基于循环嵌套的使用例题经典

编程题 1.求1--100之间可以被7整除的数的个数,并输出这些数; class Demo1 { public static void main(String[] args) { //记录个数 int count=0; for(int i=1;i { //能被7整除即该数对7取余为0 if(i%7==0) { System.out.print(i+",

RYJ359的博客 8165

自定义C++一元多项式

自己定义了一个一元多项式的简单类,主要是用来实现一个简单的框架,另外就是验证编译器默认情况下会为我们的类添加那些构造函数。 /**polynomial.h*该类定义一元多项式*MAXDEGREE:定义该类最大可表示的次数*MINCOEFF:定义绝对值最小的系数*coefficient[]:存放一元多项式的系数*currentDegre...

weixin_34257076的博客 1029

数据结构之单链表实现多项式加法

////线性表实现多项式相加相减 #include <stdlib.h> #include <stdio.h> #include<math.h> #include<iostream> using namespace std; typedef struct polynode { int exp;//指数 int xishu;//系数 polyn...

qq_40239192的博客 1891

C语言用带头节点的链表创建多项式并进行相关操作

#include "stdio.h"#include "string.h"#include "ctype.h"#include "stdlib.h"#include "io.h"#include "math.h"#include "time.h"#define OK 1#define ERROR 0#define TRUE 1#define FALSE 0#define MAXSIZE 20 /*

qq_37873184的博客 1017
上一篇: c语言版数据结构(奇迹冬瓜)-栈实战(1)栈解迷宫<迷宫算法>
下一篇: c语言版数据结构(奇迹冬瓜)-链表实战(4)双链表解一元多项式相乘
utral董东东
博客等级 码龄16年 158粉丝 33原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值