| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 629 人关注过本帖
标题:[求助]链表排序问题
只看楼主 加入收藏
wyzn12
Rank: 1
等 级:新手上路
帖 子:129
专家分:0
注 册:2006-10-28
收藏
 问题点数:0 回复次数:9 
[求助]链表排序问题
由学号,成绩结构组成的一个链表,怎么才能让它按学号升序排列呢
各位帮帮忙谢谢了!

[此贴子已经被作者于2006-10-31 21:06:09编辑过]

搜索更多相关主题的帖子: 链表 
2006-10-31 21:03
unicorn
Rank: 4
等 级:贵宾
威 望:14
帖 子:1066
专家分:0
注 册:2005-10-25
收藏
得分:0 
排序一般用的都是顺序表..
既然是链表结构 就用树吧 二叉排序树...

unicorn-h.spaces. ◇◆ sava-scratch.spaces.  noh enol ! pue pu!w hw u! shemle aq ll!m noh 
2006-10-31 21:07
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 

/*单链表头文件*/
/*从链表中拆出节点,插入到一新链表中*/

nodelink paixu(nodelink*head1)
{
nodelink p,pre,s,q,head ;
p=*head1 ;
pre=NULL ;
head=NULL ;
s=head ;
q=NULL ;
while(p!=NULL)
{
pre=p->next ;
/*保留P的原值,以便下一次访问*/
p->next=NULL ;
if(head==NULL)head=p ;
else
{
s=head ;
q=NULL ;
/*没找到,下移*/
while((s!=NULL)&&(p->info<=s->info))
{
q=s ;
s=s->next ;
}
if(q==NULL)
{
p->next=head ;
head=p ;
}
else
{
p->next=s ;
q->next=p ;
}
}
p=pre ;
}
return(head);
}


倚天照海花无数,流水高山心自知。
2006-10-31 21:27
wyzn12
Rank: 1
等 级:新手上路
帖 子:129
专家分:0
注 册:2006-10-28
收藏
得分:0 
十分感谢!!

新王登基,血流成河!
2006-10-31 22:42
huzi00008
Rank: 1
等 级:新手上路
帖 子:112
专家分:0
注 册:2006-10-9
收藏
得分:0 
if(q==NULL)
{
p->next=head ;
head=p ;
} / 这俩句我比较迷糊,不理解

2006-11-01 10:00
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 
while((s!=NULL)&&(p->info<=s->info))
{
q=s ;
s=s->next ;
}
if(q==NULL)//表示前面的循环一次都没有执行,说明一刚开始就p->info>s->info,直接把P 链到head中.
{
p->next=head ;
head=p ;
}

倚天照海花无数,流水高山心自知。
2006-11-01 10:23
huzi00008
Rank: 1
等 级:新手上路
帖 子:112
专家分:0
注 册:2006-10-9
收藏
得分:0 
明白了,谢谢jxnu!

2006-11-01 12:00
wyzn12
Rank: 1
等 级:新手上路
帖 子:129
专家分:0
注 册:2006-10-28
收藏
得分:0 
以下是引用huzi00008在2006-11-1 10:00:04的发言:
if(q==NULL)

{

p->next=head ;

head=p ;

}
/ 这俩句我比较迷糊,不理解


我觉得应该是这样理解:就是如果要插入的位置是新链表的首结点之前


新王登基,血流成河!
2006-11-01 13:13
huzi00008
Rank: 1
等 级:新手上路
帖 子:112
专家分:0
注 册:2006-10-9
收藏
得分:0 
那wyzn12 你对else 以后的代码的理解是什么呢?
if(q==NULL)
{
p->next=head ;
head=p ;
}
else
{
p->next=s ;//此时的p以及下面的q 分别又指什么呢?
q->next=p ;
}


2006-11-01 13:59
wyzn12
Rank: 1
等 级:新手上路
帖 子:129
专家分:0
注 册:2006-10-28
收藏
得分:0 
以下是引用huzi00008在2006-11-1 13:59:10的发言:
那wyzn12 你对else 以后的代码的理解是什么呢?

if(q==NULL)

{

p->next=head ;

head=p ;

}

else

{

p->next=s ;//此时的p以及下面的q 分别又指什么呢?

q->next=p ;

}




p是从原链表拆出来的结点,q是新链表中插入p的结点之前的结点

[此贴子已经被作者于2006-11-1 14:35:40编辑过]


新王登基,血流成河!
2006-11-01 14:24
快速回复:[求助]链表排序问题
数据加载中...
 
   



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

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