|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
#include "stdio.h"
#include "malloc.h"
#define MaxSize 100
typedef int DataType;
typedef struct
{
float coef; /*系数部分*/
int expn; /*指数部分*/
} ElemType ;
typedef struct Ploy
{
ElemType data;
struct Ploy *next ;
} Ploy ;
Ploy *create_Ploy_LinkList(void) /* 尾插入法创建单链表,链表的头结点head作为返回值 */
{
float coef ;
int expn ;
Ploy *head, *p, *q;
head=p=(Ploy *)malloc(sizeof(Ploy));
p->next=NULL; /* 创建单链表的表头结点head */
while (1)
{
printf("\n请输入一元多项式的系数(0.0表示结束): ") ;
scanf("%f",&coef);
if (coef==0.0) break ;
else
{
printf("\n请输入一元多项式的指数: ") ;
scanf("%d",&expn);
q=(Ploy *)malloc(sizeof(Ploy));
q->data.coef=coef ; /* 指数部分赋值 */
q->data.expn=expn ; /* 系数部分赋值 */
q->next=p->next;
p->next=q;
p=q ; /* 钩链,新创建的结点总是作为最后一个结点 */
}
}
return(head);
}
void output_Ploy_LinkList(Ploy *L, char ch) /* 输出以L为头结点的单链表中所有结点的值 */
{
Ploy *p;
p=L->next; /* 使p指向第一个结点 */
if (p==NULL) printf("\n此多项式为空!!\n\n") ;
else
{
printf("\n%c(x)=",ch) ;
while (p!=NULL)
{
if (p->data.coef>0)
printf("%+g",p->data.coef) ;
else printf("%g",p->data.coef) ;
if (p->data.expn!=0)
{
printf("X^") ;
printf("%d",p->data.expn);
}
p=p->next;
}
} /* 移动指针p */
printf("\n\n") ;
}
Ploy *add_ploy(Ploy *La, Ploy *Lb)
{
Ploy *Lc , *pc , *pa , *pb , *p ; float x ;
Lc=pc=(Ploy *)malloc(sizeof(Ploy)) ;
pa=La->next ; pb=Lb->next ;
while (pa!=NULL&&pb!=NULL)
{
if (pa->data.expn<pb->data.expn)
{
p=(Ploy *)malloc(sizeof(Ploy)) ;
p->data.coef=pa->data.coef ; p->data.expn=pa->data.expn ;
p->next=NULL ; /* 生成一个新的结果结点并赋值 */
pc->next=p ; pc=p ; pa=pa->next ;
} /* 生成的结点插入到结果链表的最后,pa指向下一个结点 */
if (pa->data.expn>pb->data.expn)
{
p=(Ploy *)malloc(sizeof(Ploy)) ;
p->data.coef=pb->data.coef ; p->data.expn=pb->data.expn ;
p->next=NULL ; /* 生成一个新的结果结点并赋值 */
pc->next=p ; pc=p ; pb=pb->next ;
} /* 生成的结点插入到结果链表的最后,pb指向下一个结点 */
if (pa->data.expn==pb->data.expn)
{
x=pa->data.coef+pb->data.coef ;
if (x<=1.0e-6) /* 系数和为0,pa, pb分别直接后继结点 */
{
pa=pa->next ; pb=pb->next ; }
else /* 若系数和不为0,生成的结点插入到结果链表的最后, pa, pb分别直接后继结点 */
{
p=(Ploy *)malloc(sizeof(Ploy)) ;
p->data.coef=x ; p->data.expn=pb->data.expn ;
p->next=NULL ;
pc->next=p ; pc=p ;
pa=pa->next ; pb=pb->next ;
}
}
}
if (pb!=NULL)
while(pb!=NULL)
{
p=(Ploy *)malloc(sizeof(Ploy)) ;
p->data.coef=pb->data.coef ; p->data.expn=pb->data.expn ;
p->next=NULL ;
pc->next=p ; pc=p ; pb=pb->next ;
}
return (Lc);
}
void main()
{
}
|
|