| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 662 人关注过本帖
标题:关于单链表的问题
取消只看楼主 加入收藏
qq384200403
Rank: 2
等 级:论坛游民
帖 子:35
专家分:39
注 册:2013-3-1
结帖率:87.5%
收藏
已结贴  问题点数:20 回复次数:0 
关于单链表的问题
实验内容
   采用用单链表表示的一元多项式,实现两个一元多项式相加功能。
   实现单链表的基本操作,包括:建立一元多项式单链表,一元多项式相加,打印输出单链表中的所有结点。
   基本要求:
(1)初始化单链表;
(2)程序具有单链表初始化、一元多项式建立、一元多项式相加和显示功能,可根据用户需要连续进行这些操作;
            (3)根据键盘输入的数据在单链表中查找结点;
(4)任一操作结束后将单链表中的内容输出;
(5)可由用户选择退出程序。
我的程序是这样的


#include
#include

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始终指向单链表的尾,便于尾插法建表*/
    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;
   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;
}






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 )//函数:显示输出单链表中的所有结点。
{   printf("y=");
    while(h->next!=NULL)
    {
        printf(" %dx(%d)+" , h->next->coef,h->next->exp);
        h->next=h->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-08 13:11
快速回复:关于单链表的问题
数据加载中...
 
   



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

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