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