当前位置: 代码迷 >> C语言 >> 多项式合并同类项问题
  详细解决方案

多项式合并同类项问题

热度:535   发布时间:2008-03-26 19:50:50.0
多项式合并同类项问题
这个函数编译通过 就是运行不了  我看不出是哪里有问题啊
pn * tongleixiang(pn * head)       //pn 是多项式的节点类型
{
     pn *p,*temp;
     head=sort(head);    //先把多项式从大到小排序  排序函数没问题
     p=head->next;
     while(p)
     {
             temp=p->next;
             if(p->e==temp->e)    //当前和下一个指数相同的话
             {
                  p->c+=temp->c;  //把下一个节点的系数加到当前节点的系数     
                  p->next=temp->next;  //把指针指向下一个的下一个
                  free(temp);
                  continue;   //继续从p开始和p->next比较
             }     
             p=p->next;
     }
     return head;
}
那位高手帮忙解答一下
搜索更多相关的解决方案: 多项式  同类项  

----------------解决方案--------------------------------------------------------
怎么没人啊  晕  等了一天了
----------------解决方案--------------------------------------------------------
if(p->e==temp->e) 调试时 这边提示程序产生一个访问段违例
----------------解决方案--------------------------------------------------------
temp=p->next
这个TEMP可能是NULL
----------------解决方案--------------------------------------------------------
为什么?  我已经把p->next指向p->next->next;也就是p->next=temp->next;
----------------解决方案--------------------------------------------------------
你只是验证了P不是空的
----------------解决方案--------------------------------------------------------
加油啊
----------------解决方案--------------------------------------------------------
请问我应该怎么修改代码呢 ?
----------------解决方案--------------------------------------------------------
最好能把程序贴上来,否则我没有办法编译.
pn * tongleixiang(pn * head)       //pn 是多项式的节点类型
{
     pn *p;
     p=(head=sort(head));    //先把多项式从大到小排序  排序函数没问题
     while(p->next)
     {
             if(p->e==(p->next)->e)    //当前和下一个指数相同的话
             {
                  (p->c)+=(p->next)->c;  //把下一个节点的系数加到当前节点的系数     
                  p->next=(p->next)->next;  //把指针指向下一个的下一个
                  free(p->next);
                  continue;   //继续从p开始和p->next比较
             }     
             p=p->next;
     }
     return head;
}
----------------解决方案--------------------------------------------------------
#include <stdio.h>
#include <malloc.h>
typedef struct danxiang
{
        int c,e;
        struct danxiang * next;
}pn;
pn * create()
{
     pn * head, * p;
     int n,i=1;
     printf("输入多项式的个数n\n");
     printf("n= ");
     scanf("%d",&n);
     
     head=p=(pn*)malloc(sizeof(pn));
     while(n)
     {
             p->next=(pn*)malloc(sizeof(pn));
             p=p->next;
             printf("输入第%d单项式的系数和指数,以空格分开\n",i);
             scanf("%d%d",&p->c,&p->e);
             n--;
             i++;
     }
     p->next=NULL;
     return head;
}

pn * tongleixiang(pn * head)
{
     pn *p,*temp;
     p=head->next;
     while(p)
     {

             temp=p->next;
             if(p->e==temp->e)
             {
                  p->c+=temp->c;
                  p->next=temp->next;
                  free(temp);
             }
              else p=p->next;
     }
     return head;
}
void print(pn * head)
{
     pn * p=head->next;
     printf("F(x) = ");
     while(p)
     {
            
             if(p->c==1)
             {
                  if(p->e==0)
                  printf("%d",p->c);
                  else if(p->e==1)
                        printf("X");
                        else printf("X^%d",p->e);
             }
             else
             {
                  if(p->e==0)
                  printf("%d",p->c);
                  else if(p->e==1)
                       printf("%dX",p->c);
                       else printf("%dX^%d",p->c,p->e);
             }     
             p=p->next;
             if(p) printf(" + ");
     }
}
void freememory(pn * head)
{
     pn * q=head;
     while(q)
     {
     head=head->next;
     free(q);
     q=head;
     }
}
int main()
{
    pn *p,*q;
    p=create();
    q=tongleixiang(p);
    print(q);
    freememory(p);
    getch();
    return 0;
}


程序在turbo c++3.0可以  在devcpp就不行  怎么回事啊
----------------解决方案--------------------------------------------------------
  相关解决方案