马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
//定义结构体变量 一元多项式 系数 指数 下一个节点
typedef struct PolyNode
{
float coaf;//系数
int exp;//指数
struct PolyNode *link;//指针域
}PolyNode,*PolyLinkList;
//后插法创建两个单链表
struct PolyNode *creatListF(int n)
{
struct PolyNode *head,*q,*r;//q 新增加的节点 r 当前节点
int coef,exp,i;
head =(struct PolyNode *)malloc (sizeof(struct PolyNode));
r=head;
for(i=1;i<n;i++)
{
scanf("%f%d",&coef,&exp);
q=(struct PolyNode *)malloc (sizeof(struct PolyNode));
r->link=q;
q->coaf=coef;
q->exp=exp;
r=q;
}
r->link=NULL;
return head;
}
//算法 多项式相加
struct PolyNode *add_poly(struct PolyNode *AH,struct PolyNode *BH)
{
struct PolyNode *p1,*q1,*r,*s;//A、B链表的当前指针 和链表的当前指针 S指向要删除的节点
p1=AH->link;//第一个节点
q1=BH->link;
r=AH->link;
while(p1!=NULL&&q1!=NULL)
{
//判断 指数是否相等
if(p1->exp==q1->exp)
{
//判断系数相加是否为零
int x = q1->exp+q1->exp;
if(x!=0)
{
//p1系数改变 和链表头结点指向p1 q1对应free q1 指向后移 q1指向后移
p1->coaf=x;
r->link=p1;
r=p1;
p1=p1->link;
s=q1;
free(s);
q1=q1->link;
}
else
{//两个链表的当前指针同时后移
s=p1;free(s);p1=p1->link;
s=q1;free(s);q1=q1->link;
}
}
else if(p1->exp<q1->exp)
{
//和链表指向拥有指数小节点的链表
r->link=p1;r=p1;p1=p1->link;
}
else
{
r->link=q1;r=q1;q1=q1->link;
}//剩余节点
if(p1!=NULL){r->link=p1;};
if(q1!=NULL){r->link=q1;};
}
free(BH);
return AH;
}
//遍历
void DispList(PolyNode *l)
{
//输出每一个节点
//p为当前节点
PolyNode *p = l->link;
while(p!=NULL)
{
printf("%fx%d",p->coaf,p->exp);
p=p->link;
}
printf("\n");
}
int main ()
{
PolyNode *A;
PolyNode *B;
A=creatListF(5);
DispList(A);
printf("\n");
B=creatListF(5);
DispList(B);
printf("\n");
add_poly(A,B);
DispList(A);
return 0;
}
不知道为什么输出结果是这样的 |