
一元多项式的实现(C语言)
求程序大神帮忙解决一下数据结构的练习。要求:1)一元多项式的输入,显示输出(1)提示输入多项式系数和指数,输入之后把多项式按照常用形式显示出来(2)计算结果显示2)一元多...
求程序大神帮忙解决一下数据结构的练习。要求:1)一元多项式的输入,显示输出
(1)提示输入多项式系数和指数,输入之后把多项式按照常用形式显示出来
(2)计算结果显示
2)一元多项式加法,减法,乘法实现。 展开
(1)提示输入多项式系数和指数,输入之后把多项式按照常用形式显示出来
(2)计算结果显示
2)一元多项式加法,减法,乘法实现。 展开
展开全部
#define TURE 1
#define FALSE 0
#include<stdio.h>
#include<stdlib.h>
typedef struct
{
float coef;
int e;
}ElementType;
typedef struct node
{
ElementType data;
struct node *next;//这也是为什么要定义struct node 而非struct的原因
}Lnode,*LinkList;
int Head_CreatLinkList (LinkList &L,int n,ElementType a[])//头插法建立链表
{
int i;
LinkList head,p;
L=(LinkList)malloc(sizeof(Lnode));
L->next=NULL;
head=L;
for(i=0;i<n;i++)
{
p=(LinkList)malloc(sizeof(Lnode));
p->next=NULL;
p->data.coef=a[i].coef;
p->data.e=a[i].e;
head->next=p;
head=p;
}
return TURE;
}
int GetElement(LinkList L)
{
int m;
m=L->data.e;
//printf("%d",m);
return m;
}
int Comp(int a,int b )
{
if(a>b)
return 1;
else if(a<b)
return -1;
else
return 0;
}
int Union_LinkList(LinkList &L1,LinkList &L2,LinkList &L3)
{
LinkList p1,p2,p3,flag1,flag2;//flag标记指针,用于删除L2中节点
p1=L1->next;
p2=L2->next;
L3=p3=L1;//L3改变将导致L1的改变,即最终L3和L1相同
while(p1&&p2)
{
switch(Comp(GetElement( p1),GetElement( p2)))
{
case -1:
{
p3->next=p1;
p3=p1;
p1=p1->next;
break;
}
case 1:
{
p3->next=p2;
p3=p2;
p2=p2->next;
break;
}
case 0:
{
p1->data.coef=p1->data.coef+p2->data.coef;
if(p1->data.coef==0)
{
flag1=p1;
p1=p1->next;
free(flag1);
}
flag2=p2;
p2=p2->next;
free(flag2);
break;
}
}
}
p3->next=p1?p1:p2;
free(L2);
return TURE;
}
int Display_LinkList(LinkList L)
{
LinkList p;
p=L;
if(!p)
return FALSE;
while(p->next)
{
p=p->next;
printf("[%f%, %d]\t",p->data.coef,p->data.e);
}
printf("\n");
return TURE;
}
void main()
{
LinkList a,b,c;
ElementType a1[6]={{1,1},{2,7},{3,3},{4,4},{5,9},{1,10}};
ElementType a2[4]={{-1,1},{2,7},{3,8},{-5,9}};
Head_CreatLinkList (a,6,a1);
Head_CreatLinkList (b,4,a2);
Display_LinkList(a);
Display_LinkList(b);
Union_LinkList(a,b,c);
Display_LinkList(c);
}
这是自己以前写的一个多项式加法的程序,现在也没检查了,希望你自己好好调试一下,至于减法和除法,只要加一点吧。希望对你有帮助
#define FALSE 0
#include<stdio.h>
#include<stdlib.h>
typedef struct
{
float coef;
int e;
}ElementType;
typedef struct node
{
ElementType data;
struct node *next;//这也是为什么要定义struct node 而非struct的原因
}Lnode,*LinkList;
int Head_CreatLinkList (LinkList &L,int n,ElementType a[])//头插法建立链表
{
int i;
LinkList head,p;
L=(LinkList)malloc(sizeof(Lnode));
L->next=NULL;
head=L;
for(i=0;i<n;i++)
{
p=(LinkList)malloc(sizeof(Lnode));
p->next=NULL;
p->data.coef=a[i].coef;
p->data.e=a[i].e;
head->next=p;
head=p;
}
return TURE;
}
int GetElement(LinkList L)
{
int m;
m=L->data.e;
//printf("%d",m);
return m;
}
int Comp(int a,int b )
{
if(a>b)
return 1;
else if(a<b)
return -1;
else
return 0;
}
int Union_LinkList(LinkList &L1,LinkList &L2,LinkList &L3)
{
LinkList p1,p2,p3,flag1,flag2;//flag标记指针,用于删除L2中节点
p1=L1->next;
p2=L2->next;
L3=p3=L1;//L3改变将导致L1的改变,即最终L3和L1相同
while(p1&&p2)
{
switch(Comp(GetElement( p1),GetElement( p2)))
{
case -1:
{
p3->next=p1;
p3=p1;
p1=p1->next;
break;
}
case 1:
{
p3->next=p2;
p3=p2;
p2=p2->next;
break;
}
case 0:
{
p1->data.coef=p1->data.coef+p2->data.coef;
if(p1->data.coef==0)
{
flag1=p1;
p1=p1->next;
free(flag1);
}
flag2=p2;
p2=p2->next;
free(flag2);
break;
}
}
}
p3->next=p1?p1:p2;
free(L2);
return TURE;
}
int Display_LinkList(LinkList L)
{
LinkList p;
p=L;
if(!p)
return FALSE;
while(p->next)
{
p=p->next;
printf("[%f%, %d]\t",p->data.coef,p->data.e);
}
printf("\n");
return TURE;
}
void main()
{
LinkList a,b,c;
ElementType a1[6]={{1,1},{2,7},{3,3},{4,4},{5,9},{1,10}};
ElementType a2[4]={{-1,1},{2,7},{3,8},{-5,9}};
Head_CreatLinkList (a,6,a1);
Head_CreatLinkList (b,4,a2);
Display_LinkList(a);
Display_LinkList(b);
Union_LinkList(a,b,c);
Display_LinkList(c);
}
这是自己以前写的一个多项式加法的程序,现在也没检查了,希望你自己好好调试一下,至于减法和除法,只要加一点吧。希望对你有帮助
更多追问追答
追问
好多错误啊,能不能改一下给我?
追答
请问一下是哪里的错误?编译错误还是什么?刚刚我运行了一下,没有错误呀,我这个程序是直接自己设置了输入,而不是手动输入,你自己可以改一下
ElementType a1[6]={{1,1},{2,7},{3,3},{4,4},{5,9},{1,10}};
ElementType a2[4]={{-1,1},{2,7},{3,8},{-5,9}};
这两句表示1x^1+2x^7+3x^3+4X^4+5x^9+1x^10
-1x^1+2x^7+3x^8+4X^4-5x^9
这两个表达式相减得到了4x^7+3x^3+4X^4+3x^8+1x^10
是正确结果啊,请问楼主的错误在哪里一
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询