当前位置:文档之家› 一元多项式的各种运算实现(c++,c)

一元多项式的各种运算实现(c++,c)

list *temp=pre->next;
pre->next=pre->next->next;
free(temp);
toup->length--;
}//if
else p=p->next;
}//while,合并幂相等的项
p=toup->next;
list* pr=NULL;
list* tem=NULL;
{
if(!toup) {cout<<"初始化失败"<<endl;exit(0);}
list *a=toup->next;
int i=1;
while(i<toup->length)
{
list* temp=a;
list* p=a;
list* t=p->next;
while(t)
{
if(abs(p->zhi)>abs(t->zhi))
if(toup) destory(toup);//假如有头结点或元素节点,销毁结点
toup=(node*)malloc(sizeof(node));
if(!toup){cout<<"溢出错误"<<endl;exit(0);}
toup->length=0;
toup->next=NULL;
}
//销毁全部,包括头结点
ch=c;
switch(c)
{case '-':
k1=-1;
k2=0;
k3=0;
break;
case '+':
k1=1;
k2=0;
k3=0;
break;
case 'x':if(k2==0)
p->data=k1*1;
else
p->data=k1*dat;
dat=0.0;
k1=1;
k2=0;
k3=0;
kx=1;
void shuoming()
{
cout<<"*******************************************************************************"<<endl;
cout<<"*各项可以用平时书写习惯输入,若有未知数,必须用x表示,且各项之间必须用空格分隔,支*"<<endl;
int i=0;
while(c!='\n')
{
if(!p)
{ p=(list*)malloc(sizeof(list)); if(!p) {cout<<"溢出错误"<<endl;exit(0);}
if(i==0) {toup->next=p;toup->length++;i++;p->next=NULL;t=p;}
结构体类型定义:
typedef struct list
{
type data;
int zhi;
struct list* next;
}list;
typedef struct node
{
int length;
list* next;
}node;
用到的函数:
注:各函数参数如是结构体指针,则此指针传入函数之前必将其赋值为NULL否则可能出现错误。
i++;
}//while
}
//把指数相等的项合并,也可实现多项式加法
void neat(node *&toup)
{
paixu(toup);//先排序
list* p=toup->next;
list* pre;
while(p)
{
if(equalmi(p,p->zhi,pre))
{
p->data=pre->next->data+p->data;
}
//将toup2原样赋给toup1
void copy(node*& toup1,node*& toup2)
{
if(!toup2) {cout<<"初始化未成功"<<endl;exit(0);}
init(toup1);
list* t2=toup2->next,*t1=toup1->next ;
while(t2)
status equalmi(list *&element,int m,list *&prep)
{
prep=element;
list *t=element->next;
while(t&&t->zhi!=m)
{
prep=t;
t=t->next;
}//while
if(t) return 1;//找到了
else return 0;
{
if(!atoup||!btoup) {cout<<"链初始化失败";exit(0);}
void init(node *&toup);
init(newtoup);
list* ap=atoup->next;list* bp=btoup->next;list* temp=NULL;
int i=1;
while(ap)
if(0==kx) {p->data =k1*dat;p->zhi=0;}
else {if(k2==0) p->zhi=k1*1;else p->zhi=k1*(int)dat;}
}
//初始化,生成单链表表头,参数是指向头结点的指针
void init(node *&toup)
{
status destory(node *&toup);
p=p->next;
free(tem);
tem=NULL;
}
}//if
else
{
pr=p;
p=p->next ;
}//else
}//while,将数据为0的项删除
pr=NULL;
}
//得到第i个元素的指数
/*status get(node *&toup,int i)
{if(!toup) {cout<<"错误:没有头结点"<<endl;exit(-1);}
#include<sys/timeb.h>
#include<stdarg.h>
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
typedef int status;
typedef floattype;
typedef int fuhaosign;
status destory(node *&toup)
{
if(toup)
{
list* p=toup->next;list* t;
while(p)
{
t=p->next;
free(p);
p=t;
}//while
free(toup);
toup=NULL;
}//if
return OK;
}
//找到指数与m相等的元素,返回前一元素的指针,参数是元素指针
{ list* t=(list*)malloc(sizeof(list));
if(i==1) {newtoup->next=t;newtoup->length++;t->data=ap->data;t->zhi=ap->zhi;ap=ap->next;temp=t;i++;}
else {temp->next=t;newtoup->length++;t->data=ap->data;t->zhi=ap->zhi;temp=t;ap=ap->next;}
#include<iostream.h>
#include<iomanip.h>
#include<ctype.h>
#include<malloc.h>
#include<limits.h>
#include<stdio.h>
#include<stdlib.h>
#include<io.h>
#include<math.h>
int k2=0;//k2标志着+-号前面是否有数值,0时没有,1为有
fuhaosign k1=1;//k1是符号位正负的标志,0为负,1为正
int k3=0;//小数点的个数
int kx=0;//标志前面是否有x
list* p=toup->next,* t;
type dat=0.0;
//输入
c=getchar();
{
list* temp=(list*)malloc(sizeof(list));
if(!t1)
{
toup1->next =temp;toup1->length++;temp->data =t2->data ;temp->zhi =t2->zhi ;t2=t2->next ;t1=temp;
相关主题