首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

写了将两个链表的简单运用都异常。

2013-04-09 
写了将两个链表的简单运用都错误。。最近在学数据结构,可是在两个链表的合并和一元多项式的合并出现段错误。。

写了将两个链表的简单运用都错误。。
最近在学数据结构,可是在两个链表的合并和一元多项式的合并出现段错误。。。。。
下面附两个一元多项式的合并代码 大家帮忙看下。。。。


# include <stdio.h>
# include <stdlib.h>
# include <malloc.h>

typedef struct 
{
   float coef;    //  系数 
   int expn;      //指数 
}term,ElemType;

typedef struct node
{
   ElemType data;
   struct node *next;     
}LinkListpoly;

LinkListpoly *Creatlistpoly()   //创建一个一元多项式链表 
{
    int x;
    float c;     
   LinkListpoly *head,*rear,*L;
   head=(LinkListpoly *)malloc(sizeof(LinkListpoly));
   head->next=NULL;
   rear=head;
   printf("请输入一元多项式的指数和系数,结束请输入两个0");
   while(1)
    {
       scanf("%d%f",&x,&c);
       if(!x)  break;
       L=(LinkListpoly *)malloc(sizeof(LinkListpoly));
       L->data.coef=c;
       L->data.expn=x;
       L->next=rear->next;
       rear->next=L;
       rear=L;    
    }      
   rear->next=NULL;
   return head; 
}

void OutputLinkListpoly(LinkListpoly *L)   //对一个一元多项式的系数和指数输出 
{
   LinkListpoly *p;
   p=L->next;
   printf("指数   系数\n");
   while(p)
     {
       printf("%2d  %2.2f\n",p->data.expn,p->data.coef);
       p=p->next;
     }  
}

int compare(int a,int b)
{
   int c;
   if(a==b)  c=0;
   else
     if(a>b) c=1;
   else
     if(a<b) c=-1;
  return c;   
}

void AddLinkListpoly(LinkListpoly *La,LinkListpoly *Lb,LinkListpoly *Lc) //将两个一元多项式合并 
{
     LinkListpoly *p,*qa,*qb,*u,*v;
     int a,b;
     Lc=p=La;
     qa=La->next;
     qb=Lb->next;
     while(qa&&qb)
      {
         a=qa->data.expn;
         b=qb->data.expn;
         switch(compare(a,b))
         {
          case -1:
             p->next=qa;
             p=qa;
             qa=qa->next;


             break;
          case 0:
             qa->data.coef+=qb->data.coef;
             if(qa->data.coef==0)
                {
                   u=qa;
                   v=qb;
                   qa=qa->next;
                   qb=qb->next;
                   free(u);
                   free(v);              
                }      
              else
               {
                p->next=qa;
                p=qa;
                v=qb;
                qa=qa->next;
                qb=qb->next;
                free(v);
                }
                break;
           case 1:    
               p->next=qb;
               p=qb;
               qb=qb->next;
               break;         
        }
      }
     if(p=qa)
          p->next=qa;
     if(p=qb)
          p->next=qb;        
      
     free(Lb); 
}

int main()
{
   LinkListpoly *La,*Lc,*Lb;
   La=Creatlistpoly();
   printf("第一个一元多项式的系数是:\n");
   OutputLinkListpoly(La);
   Lb=Creatlistpoly();
   printf("第二个一元多项式的系数是:\n");
   OutputLinkListpoly(Lb);
   AddLinkListpoly(La,Lb,Lc);


   printf("合并后的一元多项式是:\n");
   OutputLinkListpoly(Lc);
   system("pause"); 
}
[解决办法]
 if(p=qa)
          p->next=qa;
 if(p=qb)
          p->next=qb;        
      

改为:

 if(p==qa)
          p->next=qa;
 if(p==qb)
          p->next=qb;        
      
[解决办法]

引用:
引用:if(p=qa)
          p->next=qa;
 if(p=qb)
          p->next=qb;        
      

改为:

 if(p==qa)
          p->next=qa;
 if(p==qb)
          p->next=qb;
感谢给予纠……


单步调试下吧。
[解决办法]

# include <stdio.h>
 # include <stdlib.h>
 # include <malloc.h>
 
typedef struct 
 {
    float coef;    //  系数 
    int expn;      //指数 
 }term,ElemType;
 
typedef struct node
 {
    ElemType data;
    struct node *next;     
 }LinkListpoly;
 
LinkListpoly *Creatlistpoly()   //创建一个一元多项式链表 
 {
     int x;
     float c;     
    LinkListpoly *head,*rear,*L;
    head=(LinkListpoly *)malloc(sizeof(LinkListpoly));
    head->next=NULL;
    rear=head;
    printf("请输入一元多项式的指数和系数,结束请输入两个0");
    while(1)
     {
        scanf("%d%f",&x,&c);
        if(!x)  break;
        L=(LinkListpoly *)malloc(sizeof(LinkListpoly));
        L->data.coef=c;
        L->data.expn=x;
        L->next=rear->next;
        rear->next=L;
        rear=L;    
     }      
    rear->next=NULL;
    return head; 
 }
 
void OutputLinkListpoly(LinkListpoly *L)   //对一个一元多项式的系数和指数输出 
 {
    LinkListpoly *p;
    p=L->next;


    printf("指数   系数\n");
    while(p)
      {
        printf("%2d  %2.2f\n",p->data.expn,p->data.coef);
        p=p->next;
      }  
 }
 
int compare(int a,int b)
 {
    int c;
    if(a==b)  c=0;
    else
      if(a>b) c=1;
    else
      if(a<b) c=-1;
   return c;   
 }
 
void AddLinkListpoly(LinkListpoly *La,LinkListpoly *Lb,LinkListpoly *Lc) //将两个一元多项式合并 
 {
      LinkListpoly *p,*qa,*qb,*u,*v;
      int a,b;
      Lc=p=La;
      qa=La->next;
      qb=Lb->next;
      while(qa&&qb)
       {
          a=qa->data.expn;
          b=qb->data.expn;
          switch(compare(a,b))
          {
           case -1:
              p->next=qa;
              p=qa;
              qa=qa->next;
              break;
           case 0:
              qa->data.coef+=qb->data.coef;
              if(qa->data.coef==0)
                 {
                    u=qa;
                    v=qb;
                    qa=qa->next;
                    qb=qb->next;
                    free(u);
                    free(v);              
                 }      
               else
                {
                 p->next=qa;
                 p=qa;


                 v=qb;
                 qa=qa->next;
                 qb=qb->next;
                 free(v);
                 }
                 break;
            case 1:    
                p->next=qb;
                p=qb;
                qb=qb->next;
                break;         
         }
       }
      if(p==qa)
           p->next=qa;
      if(p==qb)
           p->next=qb;        
       
      free(Lb); 
 }
 
int main()
 {
    LinkListpoly *La,*Lb,*Lc = (LinkListpoly *)malloc(sizeof(LinkListpoly));
    La=Creatlistpoly();
    printf("第一个一元多项式的系数是:\n");
    OutputLinkListpoly(La);
    Lb=Creatlistpoly();
    printf("第二个一元多项式的系数是:\n");
    OutputLinkListpoly(Lb);
    AddLinkListpoly(La,Lb,Lc);
    printf("合并后的一元多项式是:\n");
    OutputLinkListpoly(Lc);
    system("pause"); 
 } 




[解决办法]
引用:
引用:C/C++ code?123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384……

你的问题应该是出在add那一块,仔细找找

热点排行