| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1118 人关注过本帖
标题:链表排序
只看楼主 加入收藏
vic_space
Rank: 1
等 级:新手上路
帖 子:38
专家分:0
注 册:2006-5-24
收藏
 问题点数:0 回复次数:10 
链表排序
下面代码是我程序一部分。。~!我已经建有一链表(head),希望这段程序能为他按学号排序(p->num等均为结点里的学号),~!(p为我从原链表读出的结点,head1为排序后的新链~!)我的思路是把原来的链表结点1个个读出来,接着就用边插入边排序地插入新链~!但就是排不到序。。希望指点。。。

stu *insert_num(stu *head)
{
struct stu *head1,*p,*p1,*p2,*t;
head1=NULL;
t=head;
while(t!=NULL)
{
p=t;
p1=head1;
if (head1==NULL) head1=p;
else
{
while((p->num>p1->num)&&(p1->next!=NULL))
{
p2=p1;
p1=p1->next;
}
if(p->num<p1->num)
{
if(head1==p1) head1=p;
else p2->next=p;
p->next=p1;
}
else p1->next=p;
}
t=t->next;
}
return head1;
}
搜索更多相关主题的帖子: 链表 
2006-06-23 14:33
–★–
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:1512
专家分:0
注 册:2006-5-1
收藏
得分:0 
求为链表排序的函数!!
作者:songweiwen 浏览:75 回复:3 → 『 C语言论坛 』 2006-5-26 8:28:00 [锁定]

链表排序的最加方法(我个人认为啊)
作者:论坛 浏览:78 回复:5 → 『 C语言论坛 』 2006-5-9 0:07:00

落霞与孤鹜齐飞,秋水共长天一色! 心有多大,路有多宽。三教九流,鸡鸣狗盗。兼收并蓄,海纳百川。
2006-06-23 15:18
–★–
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:1512
专家分:0
注 册:2006-5-1
收藏
得分:0 

/*先发一个完整的(尚未调通:sorting死循环)*/
#include<stdio.h>
struct stu
{
int num;
struct stu* next;
};

struct stu *sorting(struct stu *head)
{
struct stu *head1,*p,*p1,*p2,*t;
head1=NULL;
t=head;
while(t!=NULL)
{
p=t;
p1=head1;
if(head1==NULL)
head1=p;
else
{
while((p->num>p1->num)&&(p1->next!=NULL))
{
p2=p1;
p1=p1->next;
}
if(p->num<p1->num)
{
if(head1==p1)
head1=p;
else
p2->next=p;
p->next=p1;
}
else
p1->next=p;
}
t=t->next;
}
return head1;
}

main()
{
struct stu ary[6]={
78,ary+1, 98,ary+2, 68,ary+3,
88,ary+4, 47,ary+5, 99,NULL };
struct stu *head=ary,*p;
p=head;

while(p!=NULL)
{
printf("%d\t",p->num);
p=p->next;
}
printf("\n");

p=sorting(head);

while(p!=NULL)
{
printf("%d\t",p->num);
p=p->next;
}
printf("\n");
}


落霞与孤鹜齐飞,秋水共长天一色! 心有多大,路有多宽。三教九流,鸡鸣狗盗。兼收并蓄,海纳百川。
2006-06-23 15:48
vic_space
Rank: 1
等 级:新手上路
帖 子:38
专家分:0
注 册:2006-5-24
收藏
得分:0 
真的吗?~!我这个不够好么?~!呵呵。。。看看先~!
2006-06-23 15:50
–★–
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:1512
专家分:0
注 册:2006-5-1
收藏
得分:0 
恕我直言,楼主的方法可能是死路一条!
因为在编写调试过程中发生了下列困难
1。抓取老表的首结点作为新表的临时头结点(这无可厚非)
2。关键的困难在于“新表”head1根本不存在对应的独立的存储空间!
因而楼主的“排序”陷入死循环啦。
如果想继续讨论下去,建议楼主先写出伪代码(要足够细致)。也许您
写着写着就恍然大悟了。
ps:看来“流程图”不画还是不行呵!

落霞与孤鹜齐飞,秋水共长天一色! 心有多大,路有多宽。三教九流,鸡鸣狗盗。兼收并蓄,海纳百川。
2006-06-23 16:12
vic_space
Rank: 1
等 级:新手上路
帖 子:38
专家分:0
注 册:2006-5-24
收藏
得分:0 

啊~!这样啊~!头痛。。。什么叫伪代码哦。。呵呵~!

2006-06-23 16:23
–★–
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:1512
专家分:0
注 册:2006-5-1
收藏
得分:0 
/*下面是为楼主的stu结构做成的链表进行排序的伪代码*/
/*用冒泡法进行排序,不改变链接,只交换结点数据*/
/*[注意]这是个偷懒的办法,未发挥出链表的优势*/
0。结构类型 stu 定义:
{ 数据num; 指针next; };
1。定义stu型数组ary[N],并初始化为静态链表
2。定义表头stu *head指向ary[0]
3。冒泡排序过程如下
⑴ 第i轮操作(i=1,2,3,...,N-1)
⑵ 第j次比较(j=1,2,3,...,N-i)与交换
⑶ 循环体:
比较ary[j-1].num与ary[j].num的大小
如果顺序不合要求,则对调这两个结点
中的数据;否则什么都不做。
4。返回head,如果需要的话。

落霞与孤鹜齐飞,秋水共长天一色! 心有多大,路有多宽。三教九流,鸡鸣狗盗。兼收并蓄,海纳百川。
2006-06-23 18:12
–★–
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:1512
专家分:0
注 册:2006-5-1
收藏
得分:0 

/*用C语言具体实现上述伪代码如下*/
#include<stdio.h>
struct stu
{
int num;
struct stu* next;
};

struct stu *sorting(struct stu *head,int numbers)
{
int i,j;
int temp;
struct stu *p,*q;
for(i=1;i<=numbers-1;i++)
{
p=head;q=p->next;
for(j=1;j<=numbers-i;j++)
{
if(p->num > q->num)
{
temp=p->num;
p->num=q->num;
q->num=temp;
}
p=q;q=p->next;
}
}
return head;
}

main()
{
struct stu ary[6]={
78,ary+1, 98,ary+2, 68,ary+3,
88,ary+4, 47,ary+5, 99,NULL };
struct stu *head=ary,*p;
p=head;

while(p!=NULL)
{
printf("%d\t",p->num);
p=p->next;
}
printf("\n");

p=sorting(head, 6);

while(p!=NULL)
{
printf("%d\t",p->num);
p=p->next;
}
printf("\n");
}


落霞与孤鹜齐飞,秋水共长天一色! 心有多大,路有多宽。三教九流,鸡鸣狗盗。兼收并蓄,海纳百川。
2006-06-23 18:24
vic_space
Rank: 1
等 级:新手上路
帖 子:38
专家分:0
注 册:2006-5-24
收藏
得分:0 
哦~!这样啊~!呵呵~!高手哦~!其实冒泡我也想过,不过我的程序的链的结点个数是不确定的,如果要用冒泡的的话我就要在插入结点是加个计数器进去了~!不过这样的冒泡法说得也几清晰~!保存先。。呵呵~!
至于我的程序我用全局变量弄好了~!这样在输入数据的同时就可以建立2条不同的链表,这样就可以边插入边排序了~!而且又不用返回链表了~!
2006-06-23 20:35
mstzl
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2006-10-17
收藏
得分:0 
8楼的结构体初始化错误,
struct stu ary[6]={
78,ary+1, 98,ary+2, 68,ary+3,
88,ary+4, 47,ary+5, 99,NULL };

指针部分直接ary+i无法实现
2006-10-17 17:53
快速回复:链表排序
数据加载中...
 
   



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

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