| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 507 人关注过本帖
标题:链表排序,求改错!!!
只看楼主 加入收藏
爱编聪聪
Rank: 2
等 级:论坛游民
帖 子:26
专家分:20
注 册:2013-9-16
结帖率:100%
收藏
已结贴  问题点数:14 回复次数:8 
链表排序,求改错!!!
若原数据输入为1,2,3,4,则在vc中执行时出现错误,不能显示排序后的数据
linklist *sort_linklist(linklist *head)
{
    linklist *p,*q,*s,*former;
    p=head->next;
    head->next=NULL;
    while(p!=NULL)
    {
        q=p;
        p=p->next;
        q->next=NULL;
        if(head->next==NULL)
            head->next=q;
        else
        {
            s=head->next;
            while(q->data>s->data&&s!=NULL)
            {
                former=s;
                s=s->next;
            }
            if(s==NULL)
            {
                q->next=NULL;
                former->next=q;
            }
            else
            {
                if(s==head->next)
                {
                    q->next=s;
                    head->next=q;
                }
                else
                {
                    q->next=s;
                    former->next=q;
                }
            }
        }
    }
    return head;
}
搜索更多相关主题的帖子: former 
2013-11-03 00:30
rchunjiang
Rank: 4
来 自:大连
等 级:业余侠客
帖 子:42
专家分:262
注 册:2013-10-25
收藏
得分:14 
程序代码:
linklist *sort_linklist(linklist *head)
{
    linklist *p,*q,*s,*former=NULL;
    p=head->next;
    head->next=NULL;
    while(p!=NULL)
    {
        q=p;
        p=p->next;
        q->next=NULL;                                  

 //       if(head->next==NULL)        //从第一个开始,不需要排除第一个,删掉if...else...

 //           head->next=q;

 //       else

 //       {
            //s=head->next;           //从第一个开始比较
            s=head;
            //while(q->data>s->data&&s!=NULL)        //首先确保s不为空,才能读取数据
            while(s!=NULL&&q->data>s->data)
            {
                former=s;
                s=s->next;
            }
            if(s==NULL)
            {
                q->next=NULL;
                former->next=q;
            }
            else
            {
                //if(s==head->next)        //从第一个开始
                if(s==head)
                {
                    q->next=s;
                    //head->next=q;
                    head=q;
                }
                else
                {
                    q->next=s;
                    former->next=q;
                }
            }
//      }
    }
    return head;
} 
2013-11-03 11:15
爱编聪聪
Rank: 2
等 级:论坛游民
帖 子:26
专家分:20
注 册:2013-9-16
收藏
得分:0 
回复 2楼 rchunjiang
多谢!多谢!,不过我还想问一下,我用的单链表是带"头结点"的,输入的第一个数是在head->next->data里的,头结点的数据域head->data是没有赋过值的,那当s=head的时候
q->data怎么和s->data比较的啊
            s=head;
            while(s!=NULL&&q->data>s->data)
             {
                 former=s;
                 s=s->next;
             }
2013-11-03 13:29
rchunjiang
Rank: 4
来 自:大连
等 级:业余侠客
帖 子:42
专家分:262
注 册:2013-10-25
收藏
得分:0 
回复 3楼 爱编聪聪
这样的话if...else...那儿就不用改了
            //while(q->data>s->data&&s!=NULL)        //首先确保s不为空,才能读取数据
            while(s!=NULL&&q->data>s->data)
就这儿改了就行
2013-11-03 15:49
爱编聪聪
Rank: 2
等 级:论坛游民
帖 子:26
专家分:20
注 册:2013-9-16
收藏
得分:0 
回复 4楼 rchunjiang
//while(q->data>s->data&&s!=NULL)        //首先确保s不为空,才能读取数据
            while(s!=NULL&&q->data>s->data)
可是这两句不是一样的嘛,都是且的关系,就是写的顺序不一样啊
2013-11-03 16:08
爱编聪聪
Rank: 2
等 级:论坛游民
帖 子:26
专家分:20
注 册:2013-9-16
收藏
得分:0 
回复 4楼 rchunjiang
哦哦,我刚改了这一句,就对了,我一直以为//while(q->data>s->data&&s!=NULL)        //首先确保s不为空,才能读取数据
  这两句一样的,可是为什么啊 它们不是且的关系么?      while(s!=NULL&&q->data>s->data)
2013-11-03 16:17
rchunjiang
Rank: 4
来 自:大连
等 级:业余侠客
帖 子:42
专家分:262
注 册:2013-10-25
收藏
得分:0 
回复 6楼 爱编聪聪
是且的关系,但要首先保证s指针不是空的,s->data才能进行,&&操作首先会检查左边的表达式是否为真,如果不不为真就返回否,循环退出,如果为真再检查右边的表达式是否为真,两个都是才继续循环
2013-11-03 16:27
爱编聪聪
Rank: 2
等 级:论坛游民
帖 子:26
专家分:20
注 册:2013-9-16
收藏
得分:0 
回复 7楼 rchunjiang
嗯嗯,我知道了,真是太感谢了!!
2013-11-03 16:29
rchunjiang
Rank: 4
来 自:大连
等 级:业余侠客
帖 子:42
专家分:262
注 册:2013-10-25
收藏
得分:0 
回复 8楼 爱编聪聪
不客气
2013-11-03 16:33
快速回复:链表排序,求改错!!!
数据加载中...
 
   



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

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