DSZhappy 2016-10-23 13:46 采纳率: 0%
浏览 996

哪位大神能指教一下这代码中的bug是啥呀

题目是这样的: 应用单链表实现一元多项式及其相加。 例如,一元多项式 1:x2+5x+3;一元多项式 2:2x2+5;加法运算结果:3x2+5x+8。
代码:
#include using namespace std;struct node{ int xishu; //系数 int zhishu; //指数 node* next;};void creatnode(node * phead) //创建链表{ cout<<"前一个数表示系数,后一个数表示指数。输入两个 0 表示结束输入"<>x; cin>>y; pnode->xishu=x; pnode->zhishu=y; pnode->next=nullptr; p->next=pnode; p=pnode; } if(x==0) { cout<<"输入完毕!"<next; node q=p; bool flag; flag=true; while(flag) //冒泡排序 { flag=false; p=phead->next; while((p->next)!=nullptr) { if((p->zhishu)<(p->next->zhishu)) { int temp,temp2; temp=p->xishu; temp2=p->zhishu; p->xishu=p->next->xishu; p->zhishu=p->next->zhishu; p->next->xishu=temp; p->next->zhishu=temp2; p=p->next; flag=true; } p=p->next; } }}void print(node*phead1,node * phead2,node * phead3) //输出两多项式相加后的多项式{ node *p=phead1; p=phead1->next; node * q=phead2; q=phead2->next; node store=phead3; while((p->next!=nullptr)&&(q->next!=nullptr)) //不考虑链表中最后的0,所以不考虑最后的结点 { node * temp=new node; if(p->zhishu==q->zhishu) { temp->xishu=p->xishu+q->xishu; temp->zhishu=p->zhishu; temp->next=nullptr; store->next=temp; store=temp; p=p->next; q=q->next; } if((p->zhishu)>(q->zhishu)) { temp->xishu=p->xishu; temp->zhishu=p->zhishu; temp->next=nullptr; store->next=temp; store=temp; p=p->next; } if((p->zhishu)<(q->zhishu)) { temp->xishu=q->xishu; temp->zhishu=q->zhishu; temp->next=nullptr; store->next=temp; store=temp; q=q->next; p=p; } } //接下来处理当两个链表中某个链表全部遍历之后,将令一个链表中的值赋给目标链表 while(p->next!=nullptr&&q->next==nullptr) { node * temp=new node; temp->xishu=p->xishu; temp->zhishu=p->zhishu; temp->next=nullptr; store->next=temp; store=temp; p=p->next; q=q; } while(q->next!=nullptr&&p->next==nullptr) { node * temp=new node; temp->xishu=q->xishu; temp->zhishu=q->zhishu; temp->next=nullptr; store->next=temp; store=temp; q=q->next; } //输出最终结果 cout<<"输出之前的遍历:"; travel(phead3); node * r=phead3; r=phead3->next; while(r->next!=nullptr) { if(r->zhishu!=0) { cout<xishu<<"x^"<zhishu<<"+"; } if(r->zhishu==0) { cout<xishu<<"+"; } r=r->next; } if(r->zhishu!=0) { cout<xishu<<"x^"<zhishu<<"."; } if(r->zhishu==0) { cout<xishu<<"."; }}int main(){ node* head1=new node; head1->next=nullptr; cout<<"请输入第一个一元多项式,"; creatnode(head1); node* head2=new node; head2->next=nullptr; cout<<"请输入第二个一元多项式,"; creatnode(head2); node * head3=new node; //创建目标链表的哨位结点 head3->next=nullptr; lsort(head1); lsort(head2); print(head1,head2,head3); return 0;}

当输入题目中的样例时,输出的只有5x^1+8. 少了3x^2这一项。

  • 写回答

5条回答 默认 最新

  • DSZhappy 2016-10-23 14:57
    关注

    #include

    using namespace std;

    struct node
    {
    int xishu; //系数
    int zhishu; //指数
    node* next;
    };

    void creatnode(node * phead) //创建链表
    {
    cout<<"前一个数表示系数,后一个数表示指数。输入两个 0 表示结束输入"< node* p=phead;
    int x=1,y=1;
    while(x!=0)
    {
    node* pnode=new node;
    cin>>x;
    cin>>y;
    pnode->xishu=x;
    pnode->zhishu=y;
    pnode->next=nullptr;
    p->next=pnode;
    p=pnode;
    }
    if(x==0)
    {
    cout<<"输入完毕!"<<endl;
    cout<<endl;
    }
    }

    void lsort(node * phead) //对链表按照指数由小到大排序
    {
    node * p=phead->next;
    node *q=p;
    bool flag;
    flag=true;
    while(flag) //冒泡排序
    {
    flag=false;
    p=phead->next;
    while((p->next)!=nullptr)
    {
    if((p->zhishu)<(p->next->zhishu))
    {
    int temp,temp2;
    temp=p->xishu;
    temp2=p->zhishu;
    p->xishu=p->next->xishu;
    p->zhishu=p->next->zhishu;
    p->next->xishu=temp;
    p->next->zhishu=temp2;
    p=p->next;
    flag=true;
    }
    p=p->next;
    }

    }
    travel(phead);
    

    }

    void print(node*phead1,node * phead2,node * phead3)
    {
    node p=phead1;
    p=phead1->next;
    node * q=phead2;
    q=phead2->next;
    node
    store=phead3;
    while((p->next!=nullptr)&&(q->next!=nullptr)) //不考虑最后的0,所以不考虑最后的结点
    {
    node * temp=new node;
    if(p->zhishu==q->zhishu) //若指数相同,则将head1中所指向的值存到目标链表中
    {
    temp->xishu=p->xishu+q->xishu;
    temp->zhishu=p->zhishu;
    temp->next=nullptr;
    store->next=temp;
    store=temp;
    p=p->next;
    q=q->next;
    }
    if((p->zhishu)>(q->zhishu))
    {
    temp->xishu=p->xishu;
    temp->zhishu=p->zhishu;
    temp->next=nullptr;
    store->next=temp;
    store=temp;
    p=p->next;
    }
    if((p->zhishu)<(q->zhishu))
    {
    temp->xishu=q->xishu;
    temp->zhishu=q->zhishu;
    temp->next=nullptr;
    store->next=temp;
    store=temp;
    q=q->next;
    p=p;
    }
    }
    //接下来处理某一链表遍历完后的情况
    while(p->next!=nullptr&&q->next==nullptr)
    {
    node * temp=new node;
    temp->xishu=p->xishu;
    temp->zhishu=p->zhishu;
    temp->next=nullptr;
    store->next=temp;
    store=temp;
    p=p->next;
    q=q;
    }
    while(q->next!=nullptr&&p->next==nullptr)
    {
    node * temp=new node;
    temp->xishu=q->xishu;
    temp->zhishu=q->zhishu;
    temp->next=nullptr;
    store->next=temp;
    store=temp;
    q=q->next;
    }
    node * r=phead3; //r为指向目标链表的指针
    r=phead3->next;
    while(r->next!=nullptr)
    {
    if(r->zhishu!=0)
    {
    cout<xishu<<"x^"<zhishu<<"+";
    }
    if(r->zhishu==0)
    {
    cout<xishu<<"+";
    }
    r=r->next;
    }
    if(r->zhishu!=0)
    {
    cout<xishu<<"x^"<zhishu<<".";
    }
    if(r->zhishu==0)
    {
    cout<xishu<<".";
    }
    }
    int main()
    { node * head1=new node;
    head1->next=nullptr;
    cout<<"请输入第一个一元多项式,";
    creatnode(head1);
    node* head2=new node;
    head2->next=nullptr;
    cout<<"请输入第二个一元多项式,";
    creatnode(head2);
    node * head3=new node; //创建目标链表的哨位结点
    head3->next=nullptr;
    lsort(head1);
    lsort(head2);
    print(head1,head2,head3);
    return 0;
    }

    评论

报告相同问题?

悬赏问题

  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿
  • ¥15 回答4f系统的像差计算
  • ¥15 java如何提取出pdf里的文字?
  • ¥100 求三轴之间相互配合画圆以及直线的算法
  • ¥100 c语言,请帮蒟蒻写一个题的范例作参考
  • ¥15 名为“Product”的列已属于此 DataTable
  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题