返回信息流我做了一个,但是编译有问题,creat函数是这样吗?第一项设不设0x-1行不行?主函数怎么写?
#include"stdio.h"
#include"malloc.h"
#include"stdlib.h"
#define LEN sizeof(polynomail)
struct polynomail{//建立一个结构体
float coef;//系数
int expn;//指数
polynomail *next;
};
void creat(polynomail *L,int m){
//逆位序输入m个元素的值,建立带表头节点的单线性表L
polynomail *p;int i;
L=(polynomail *)malloc(LEN);
L->next=NULL;//先建立一个带头节点的单链表
for(i=m;i<=1;--i)
{
p= (polynomail *)malloc(LEN);//生成新节点
scanf("%f,%f",&p->coef,&p->expn);//输入元素值
p->next=L->next;L->next=p;//插入到表头
}
}//creatplynomail *p
void add(polynomail *polya,polynomail *polyb)//一元多项式相加函数将和多项式存放在多项式polya中,并将多项式ployb删除
{
polynomail *p,*q,*h,*temp;
float sum;
p=polya->next;//令p和q分别指向polya和polyb多项式链表中的第一个结点
q=polyb->next;
h=polya; //位置指针,指向和多项式polya
while(p!=NULL&&q!=NULL)
{
if(p->expn<q->expn)
{
h->next=p; //将p结点加入到和多项式中
h=h->next;
p=p->next;
}
else if(p->expn==q->expn) /*若指数相等,则相应的系数相加*/
{
sum=p->coef+q->coef;
if(sum!=0)
{
p->coef=sum;
h->next=p;h=h->next;p=p->next;
temp=q;q=q->next;free(temp);
}
else /*如果系数和为零,则删除结点p与q,并将指针指向下一个结点*/
{
temp=p->next;free(p);p=temp;
temp=q->next;free(q);q=temp;
}
}
else //若p指数大于q指数
{
h->next=q; //p结点不动,将q结点加入到和多项式中
h=h->next;
q=q->next;
}
}
if(p!=NULL) /*多项式polya中还有剩余,则将剩余的结点加入到和多项式中*/
h->next=p;
else //否则将polyb的结点加入到和多项式中
h->next=q;
}
void print(polynomail * p) /*输出函数,打印出一元多项式*/
{
while(p->next!=NULL)
{
p=(polynomail *)malloc(LEN);
p=p->next;
printf("(%f,%f) ",p->coef,p->expn);
}
}
void main()
{
int a,b;
polynomail *p,*q;
printf("请输入俩个多项式的非零系数个数:\n");
scanf("%ld,%ld",&a,&b);
printf("请输入多项式一:\n");
creat(p,a);
print(p);
printf("第一个多项式已载入!\n请输入多项式二:\n");
creat(q,b);
print(q);
add(p,q);
printf("相加后的多项式是:\n");
print(p);
}
这是一条镜像帖。来源:北邮人论坛 / cpp / #30253同步于 2009/10/22
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
一元多项式的相加,大牛指教!
zhangweitai
2009/10/22镜像同步7 回复
订阅后,新回复会通过你的通知中心匿名送达。
7 条回复
【 在 zhangweitai 的大作中提到: 】
: 我做了一个,但是编译有问题,creat函数是这样吗?第一项设不设0x-1行不行?主函数怎么写?
: #include"stdio.h"
: #include"malloc.h"
: ...................
数据结构的作业 ,不懂啊
估计没人有这热情来看这么一大段代码……
【 在 zhangweitai (❤紫侠狼❤) 的大作中提到: 】
: 这个可以改,但是还有没有别的问题?