| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 557 人关注过本帖
标题:关于数据结构中单链表的操作,改了之后一运行就出错误啊
只看楼主 加入收藏
qq384200403
Rank: 2
等 级:论坛游民
帖 子:35
专家分:39
注 册:2013-3-1
结帖率:87.5%
收藏
已结贴  问题点数:20 回复次数:1 
关于数据结构中单链表的操作,改了之后一运行就出错误啊
采用用单链表表示的一元多项式,实现两个一元多项式相加功能。

实现单链表的基本操作,包括:建立一元多项式单链表,一元多项式相加,打印输出单链表中的所有结点。#include<stdio.h>#include<malloc.h>

struct node//结点

{ int coef;  int exp;  node *next;};

typedef struct node polynode;

polynode *a,*b;

polynode *polycreate()//函数:建立单链表

{ polynode *head,*rear,*s;

    int c,e;

    head=(polynode * )malloc(sizeof(polynode)); /*建立多项式的头结点*/

    rear=head;   /*rear始终指向单链表的尾,便于尾插法建表*/

 printf("输入未知数的系数,指数");

    scanf("%d,%d",&c,&e);   

    while(c!=0)  /*若c=0,则代表多项式的输入结束*/

 { s=(polynode * )malloc(sizeof(polynode));  /*申请新的结点*/

   s->coef=c;

   s->exp=e;

   rear->next=s;  /*在当前表尾做插入*/

   rear=s;

   printf("输入未知数的系数,指数");

   scanf("%d,%d",&c,&e);}

   rear->next=NULL;  /*将表的最后一个结点的next置NULL,以示表结束*/

   return(head);}


 /*int initiate(polynode **head)

{if ((*head=(polynode*)malloc(sizeof(polynode))) ==NULL)

return 0;

(*head) ->next=NULL;

return 1;}*/

 polynode  *initiate(polynode*head)

{if((head=(polynode*)malloc(sizeof(polynode)))==NULL)

      return (0);

     head->next=NULL;

    return (head)}

void polyadd(polynode *polya, polynode *polyb)//函数:

/*将两个多项式相加,然后将和多项式存放在多项式polya中,并将多项式polyb删除*/

{ polynode *p,*q,*tail,*temp;

    int sum;

    p=polya->next; /*令p和q分别指向polya和polyb多项式链表中的第一个结点*/

    q=polyb->next;

    tail=polya;    /*tail指向和多项式的尾结点*/

            /*初始化*/

while(p!=NULL&&q!=NULL)  /*当两个多项式均未扫描结束时*/

{ if(p->exp< q->exp)

 /*规则(1):如果p指向的多项式项的指数小于q的指数,将p结点加入到和多项式中*/

{ tail->next=p;tail=p;p=p->next;}

     else if(p->exp==q->exp)  /*规则(2):若指数相等,则相应的系数相加*/

{

   sum=p->coef+q->coef;

     if(sum!=0)  /*若系数和非零,则系数和置入结点p,释放结点q,并将指针后移*/

{  p->coef=sum;

tail->next=p ; tail=p;

p=p->next;

temp=q;q=q->next;free(temp);

}

else  /*若系数和为0,则删除结点p与q,并将指针指向下一个结点*/

{ temp=p;p=p->next;free(temp);

temp=q;q=q->next;free(temp);

}

}

else /*规则(3):将q结点加入到"和多项式中"*/

{ tail->next=q; tail=q;

  q=q->next;}

}

if(p!=NULL) /*多项式A中还有剩余,则将剩余的结点加入到和多项式中*/

  tail->next=p;

else    /*否则,将B中的结点加入到和多项式中*/

tail->next=q;

}

 


void print(polynode *h )//函数:显示输出单链表中的所有结点。

{   polynode *p;

     p=h;

 printf("y=");

 while(p->next!=NULL)

 {

  printf(" %dx(%d)+" , h->next->coef,h->next->exp);

  p->next=p->next->next;

 }

}

void main ()

{  initiate( a);

     initiate( b);

 polynode *polycreate(polynode a);

 print(a);

 polynode *polycreate( polynode  b);

 print(b );

 polyadd(a, b);

 print(a);

}
搜索更多相关主题的帖子: include 多项式 
2013-04-15 20:29
Susake
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:女儿国的隔壁
等 级:贵宾
威 望:23
帖 子:2288
专家分:6481
注 册:2012-12-14
收藏
得分:20 
程序代码:
#include <stdio.h>
#include <malloc.h>
struct node
{
    int coef;
    int exp;
    struct node *next;
};
    typedef struct node polynode;

 polynode *a,*b;

 polynode *polycreate(polynode a)//函数:建立单链表
{
    polynode *head,*rear,*s;
     int c,e;
     head=(polynode * )malloc(sizeof(polynode)); /*建立多项式的头结点*/
     rear=head;   /*rear始终指向单链表的尾,便于尾插法建表*/
printf("输入未知数的系数,指数");
     scanf("%d,%d",&c,&e);
     while(c!=0)  /*若c=0,则代表多项式的输入结束*/

 { s=(polynode * )malloc(sizeof(polynode));  /*申请新的结点*/
    s->coef=c;
    s->exp=e;
    rear->next=s;  /*在当前表尾做插入*/
    rear=s;
    printf("输入未知数的系数,指数");
    scanf("%d,%d",&c,&e);}
    rear -> next = NULL;  /*将表的最后一个结点的next置NULL,以示表结束*/
    return(head);}


 /*int initiate(polynode **head)

 {if ((*head=(polynode*)malloc(sizeof(polynode))) ==NULL)

 return 0;

 (*head) ->next=NULL;

 return 1;}*/

 polynode  *initiate(polynode*head)

 {if((head=(polynode*)malloc(sizeof(polynode)))==NULL)
       return (0);
      head->next=NULL;
     return (head);}

 void polyadd(polynode *polya, polynode *polyb)//函数:
/*将两个多项式相加,然后将和多项式存放在多项式polya中,并将多项式polyb删除*/

 { polynode *p,*q,*tail,*temp;
     int sum;
     p=polya->next; /*令p和q分别指向polya和polyb多项式链表中的第一个结点*/
     q=polyb->next;
     tail=polya;    /*tail指向和多项式的尾结点*/
             /*初始化*/
while(p!=NULL&&q!=NULL)  /*当两个多项式均未扫描结束时*/

 { if(p->exp< q->exp)

 /*规则(1):如果p指向的多项式项的指数小于q的指数,将p结点加入到和多项式中*/

 { tail->next=p;tail=p;p=p->next;}
      else if(p->exp==q->exp)  /*规则(2):若指数相等,则相应的系数相加*/

 {
    sum=p->coef+q->coef;
      if(sum!=0)  /*若系数和非零,则系数和置入结点p,释放结点q,并将指针后移*/

 {  p->coef=sum;

 tail->next=p ; tail=p;

 p=p->next;

 temp=q;q=q->next;free(temp);

 }

 else  /*若系数和为0,则删除结点p与q,并将指针指向下一个结点*/

 { temp=p;p=p->next;free(temp);

 temp=q;q=q->next;free(temp);

 }

 }

 else /*规则(3):将q结点加入到"和多项式中"*/

 { tail->next=q; tail=q;
   q=q->next;}

 }

 if(p!=NULL) /*多项式A中还有剩余,则将剩余的结点加入到和多项式中*/
   tail->next=p;

 else    /*否则,将B中的结点加入到和多项式中*/
tail->next=q;

 }



 void print(polynode *h )//函数:显示输出单链表中的所有结点。
{   polynode *p;
      p=h;

 printf("y=");

 while(p->next!=NULL)

 {
   printf(" %dx(%d)+" , h->next->coef,h->next->exp);
   p->next=p->next->next;

 }

 }

 void main ()

 {  initiate( a);
      initiate( b);
   polynode *polycreate(polynode a);

 print(a);

 polynode *polycreate( polynode  b);

 print(b );

 polyadd(a, b);

 print(a);

 }

1.函数没参数
2.NULL没定义

仰望星空...........不忘初心!
2013-04-16 12:01
快速回复:关于数据结构中单链表的操作,改了之后一运行就出错误啊
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.026224 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved