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

原创 2012年08月21日 19:35:05

//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();
}


 

数据结构之一元多项式相加

问题 采用链式存储结构,将两个线性链表表示的一元多项式相加,并输出。 算法设计 1、程序结构设计 1)数据结构  typedef struct node { floatcoef;...
  • johnWcheung
  • johnWcheung
  • 2016年03月06日 23:04
  • 6048

一元多项式的表示和相加

一元多项式的表示和相加是数据结构(C语言)中的一个简单的问题,这里我们用C++的一些东西来实现它。(简洁版)首先是表示多项式,多项式有一些列的单项组成,每一项都有系数和指数两个量,考虑到多项式的长度和...
  • RegretPain
  • RegretPain
  • 2016年11月24日 11:07
  • 1283

数据结构(12)线性表之C++实现一元多项式相加

导言 一元多项式表现形式 部分算法描述 具体实现代码 代码实现第一种 第二种代码的实现仅链表存储形式实现导言上篇文章,我们说明了一元多项式相加采取了什么形式和抽象定义数据类型定义以及实现一元多项式相加...
  • YuYunTan
  • YuYunTan
  • 2016年03月17日 11:24
  • 4147

C语言:用链表实现一元多项式的加法

/* 一元多多项式的加法 1.先创建链表,存储多项式 2.输出多项式 3.两个多项式相加 4.输出多项式 */ # include # include typedef struct ...
  • wjb214149306
  • wjb214149306
  • 2015年08月01日 17:05
  • 4631

java数据结构之单链表应用之一元多项式求和

利用java中单链表进行一元多项式求和,下面直接看案例分析: package LinkedList; import LinkedList.Elem.Node; public class LinkedA...
  • linzhiqiang0316
  • linzhiqiang0316
  • 2016年06月01日 22:36
  • 1818

数据结构(3)--线性表实现一元多项式加法

1.简要说明     一元多项式的表示和相加     多项式Pn(x)按升幂可写成:                 Pn(x) = P0+P1*x+p2*x^2+...+Pn*x^n,     它由...
  • u010366748
  • u010366748
  • 2016年02月05日 00:00
  • 7200

【数据结构_链表_List_1040】一元多项式加法运算的实现

#include #include #include #include using namespace std; typedef struct node { int data1,dat...
  • IronCarrot
  • IronCarrot
  • 2017年03月26日 22:58
  • 599

Java链表练习实现一元多项式的加法

链表的实现在之前写过了,就不再写了 将链表的数据域赋值为多项式结点类 多项式结点类: package polynomialOfOneIndeterminate; public class Pol...
  • dly215011
  • dly215011
  • 2016年10月21日 22:56
  • 1125

【数据结构】C++链表实现一元多项式的加法

链表排序借鉴了隔壁家的一个博客 http://www.cnblogs.com/TenosDoIt/p/3666585.html       里面有关于链表的冒泡,选择,插入,快排等详细的代码 ...
  • JK851617453
  • JK851617453
  • 2017年10月28日 20:10
  • 209

c语言版数据结构(奇迹冬瓜)-链表实战(1)A=AUB

//c语言版数据结构(奇迹冬瓜)-链表实战(1)A=AUB //题目:假设利用两个线性表LA和LB分别表示两个集合A和B,现要求一个新的集合A=A∪B //思想: /* 主函数: 初始化集合A和集...
  • runner2012
  • runner2012
  • 2012年08月11日 16:41
  • 1271
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:c语言版数据结构(奇迹冬瓜)-链表实战(3)解升序排列的一元多项式相加
举报原因:
原因补充:

(最多只允许输入30个字)