|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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;
- }
复制代码
不知道为什么输出结果是这样的 |
-
数据的格式出了什么问题吗 还是我的程序写得有问题
|