| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 662 人关注过本帖
标题:关于单链表的问题
只看楼主 加入收藏
qq384200403
Rank: 2
等 级:论坛游民
帖 子:35
专家分:39
注 册:2013-3-1
结帖率:87.5%
收藏
已结贴  问题点数:20 回复次数:6 
关于单链表的问题
实验内容
   采用用单链表表示的一元多项式,实现两个一元多项式相加功能。
   实现单链表的基本操作,包括:建立一元多项式单链表,一元多项式相加,打印输出单链表中的所有结点。
   基本要求:
(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
海龙独仙
Rank: 2
来 自:江西南昌大学
等 级:论坛游民
帖 子:19
专家分:18
注 册:2012-12-26
收藏
得分:10 
你这样把所有代码都复制过来一般人很少有耐心看完的。。。建议你优化下,让代码简洁明了。这样才显示出你事先做过准备

呵呵,新手路过,说错 勿怪
2013-04-08 14:07
不玩虚的
Rank: 9Rank: 9Rank: 9
来 自:四川
等 级:贵宾
威 望:10
帖 子:331
专家分:1301
注 册:2012-12-9
收藏
得分:10 
楼上正解,先告别人错误在那。别人看得比较快。具体问题具体分析嘛。没事,晚上帮你看看。算是学习下吧

同学习......同进步....你帮我......我帮你.....上善若水.....
2013-04-08 14:30
不玩虚的
Rank: 9Rank: 9Rank: 9
来 自:四川
等 级:贵宾
威 望:10
帖 子:331
专家分:1301
注 册:2012-12-9
收藏
得分:0 
#include
using namespace std;
typedef struct node
{
   int coef;
   int exp;
   node *next;
} polynode;
polynode *polycreate()//建立一个一元多项式

{
    polynode *head,*rear,*s;
    int c,e;
    head=new node;
    rear=head;
    cout<<"请输入一元多项式的系数c和指数e,输入0 0时输入完成:"<coef<<"X^"<exp<<"+";
        p=p->next;  
    }
    cout<exp)
    {
      t=q->next;
      q->next=p;
      tail->next=q;
      tail=q;
      q=t;
      if(q==NULL)
      {tail=p;
          p=p->next;
      }
    }
   else  if(p->exp==q->exp)  
     {
         sum=p->coef+q->coef;
         if(sum!=0)  
        {p->coef=sum;
         tail=p;
        }
        else  
        {
        tail->next=p->next;
        }
        p=tail->next;
        u=q;
        q=q->next;
     }
   
     else if(p->exp>q->exp)
     {tail=p;
     p=p->next;
     }
    if(p==NULL)
    {tail->next=q;
        tail=q;
        if(q==NULL)
            break;
    else    q=q->next;
    }
}
}
int main()
{     polynode *a,*b;
    a=new node;
    b=new node;
    a=polycreate();
    cout<<"a一元多项式为:"<<ENDL;
     print(a);
    b=polycreate();
    cout<<"b一元多项式为:"<<ENDL;
    print(b);
     polyadd(a,b);
         cout<<"a+b后的一元多项式为:"<<ENDL;
     print(a);
    return 0;
}//好大的一个坑啊,居然头文件都没有,那个我就不看了,给你弄了个,你参考下,错了就别介意,还有格式不大好看,自己弄下。

同学习......同进步....你帮我......我帮你.....上善若水.....
2013-04-09 20:04
不玩虚的
Rank: 9Rank: 9Rank: 9
来 自:四川
等 级:贵宾
威 望:10
帖 子:331
专家分:1301
注 册:2012-12-9
收藏
得分:0 
#inclue <iostream>//居然复制粘贴没了,自己加下

同学习......同进步....你帮我......我帮你.....上善若水.....
2013-04-09 20:07
不玩虚的
Rank: 9Rank: 9Rank: 9
来 自:四川
等 级:贵宾
威 望:10
帖 子:331
专家分:1301
注 册:2012-12-9
收藏
得分:0 
#include <iostream>
using namespace std;
typedef struct node
{
   int coef;
   int exp;
   node *next;
} polynode;
polynode *polycreate()//建立一个一元多项式

{
    polynode *head,*rear,*s;
    int c,e;
    head=new node;
    rear=head;
    cout<<"请输入一元多项式的系数c和指数e,输入0 0时输入完成:"<<endl;
    cin>>c>>e;
    while(c!=0)
    {   
    s=new node;
   s->coef=c;
   s->exp=e;
   rear->next=s;  
   rear=s;
   cin>>c>>e;
}
   rear->next=NULL;
   return(head);
}
void print(polynode *h )
{   polynode *p;
    printf("y=");
        p=h->next;
    while(p!=NULL)
    {cout<<p->coef<<"X^"<<p->exp<<"+";
        p=p->next;  
    }
    cout<<endl;
}
void polyadd(polynode *polya, polynode *polyb)
{
    polynode *p,*q,*tail,*t,*u;
    int sum;
    p=polya->next;
    q=polyb->next;
    tail=polya;   
while(p!=NULL&&q!=NULL)  
{   if(p->exp<q->exp)
    {
      t=q->next;
      q->next=p;
      tail->next=q;
      tail=q;
      q=t;
      if(q==NULL)
      {tail=p;
          p=p->next;
      }
    }
   else  if(p->exp==q->exp)  
     {
         sum=p->coef+q->coef;
         if(sum!=0)  
        {p->coef=sum;
         tail=p;
        }
        else  
        {
        tail->next=p->next;
        }
        p=tail->next;
        u=q;
        q=q->next;
     }
   
     else if(p->exp>q->exp)
     {tail=p;
     p=p->next;
     }
    if(p==NULL)
    {tail->next=q;
        tail=q;
        if(q==NULL)
            break;
    else    q=q->next;
    }
}
}
int main()
{     polynode *a,*b;
    a=new node;
    b=new node;
    a=polycreate();
    cout<<"a一元多项式为:"<<endl;
     print(a);
    b=polycreate();
    cout<<"b一元多项式为:"<<endl;
    print(b);
     polyadd(a,b);
         cout<<"a+b后的一元多项式为:"<<endl;
     print(a);
    return 0;
}//不好意思上面的粘贴复制错了好多

同学习......同进步....你帮我......我帮你.....上善若水.....
2013-04-09 22:40
不玩虚的
Rank: 9Rank: 9Rank: 9
来 自:四川
等 级:贵宾
威 望:10
帖 子:331
专家分:1301
注 册:2012-12-9
收藏
得分:0 
void polyadd(polynode *polya, polynode *polyb)
{
    polynode *p,*q,*r;
    int sum;
    p=polya->next;
    q=polyb->next;
    r=polya;   
while(p!=NULL&&q!=NULL)  
{  if(p->exp==q->exp)
    {sum=p->coef+q->coef;
        if(sum!=0)
        {p->coef=sum;
        r=p;
        }
        else r->next=p->next;
        p=p->next;
        q=q->next;
    }
    if(p->exp>q->exp)
    {r->next=p;r=p;p=p->next;
    }
    else {r->next=q;r=q;q=q->next;}
    if(p==NULL)
        r->next=q;
    else r->next=p;

}
}//再给你个函数,标准的答案,写完了才知道有这东西,坑爹啊

同学习......同进步....你帮我......我帮你.....上善若水.....
2013-04-09 22:56
快速回复:关于单链表的问题
数据加载中...
 
   



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

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