| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3691 人关注过本帖
标题:链表排序问题
只看楼主 加入收藏
–★–
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:1512
专家分:0
注 册:2006-5-1
收藏
得分:0 
回复:(SunShining)以下是引用haichuan在2006-4-20 ...
把bubble排序的思想用到N个结点的链表上就变成

1。外循环:进行N-1轮(每轮均从表头开始)遍历
2。内循环:每轮遍历的“相邻结点对”从N-1递降到1对
3。内循环体:如果被访问的“结点对”不符合排序要求则
采取下列两种措施之一(不能“双管齐下”)
⑴数据交换(适宜数据量小的情况下使用)
⑵改变这一对结点在链中的先后顺序(大数据量情况下)
显然措施⑵才体现链表的特色。

落霞与孤鹜齐飞,秋水共长天一色! 心有多大,路有多宽。三教九流,鸡鸣狗盗。兼收并蓄,海纳百川。
2006-05-02 10:16
SunShining
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:31
帖 子:2215
专家分:0
注 册:2006-2-17
收藏
得分:0 
哦.想明白了.是不是链表冒泡.

先遍历出结点的个数..

然后按个数排序..

...不过效率好象不高哦~!

[glow=255,violet,2]闭关修炼ing...[/glow] [FLASH=360,180]http://www./chinaren.swf[/FLASH]
2006-05-02 11:32
xiaoyao11
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2006-4-28
收藏
得分:0 
[CODE][CODE][CODE]你的链表是已经有顺序的还是没有顺序啊
要是没有顺序比较麻烦,要是已经有顺序可以直接比较一个一个比较插入就可以了啊
学习的不是很好大家不要笑话啊!!!!![/CODE][/CODE][/CODE]
2006-05-04 02:11
–★–
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:1512
专家分:0
注 册:2006-5-1
收藏
得分:0 
以下是引用SunShining在2006-5-2 11:32:00的发言:
哦.想明白了.是不是链表冒泡.先遍历出结点的个数..
然后按个数排序.....不过效率好象不高哦~!

1。既然都用链表了,通常在Create阶段就已经自然而然地实施了插入排序。好比打80分,你每摸到1张扑克,是不是随手就将它安插到正确位置上去了呢?
2。就算猛地一下拿到许多牌,理一下也不太麻烦。下面写一个

/*无序链表的冒泡法排序*/

/*
编程任务:用链表实现若干个考分的降序排列
补充规定:最初链表上的准考证号是升序排列
     而沿链表各结点的考分则完全无序
考生信息:㈠准考证号;㈡考分
*/

#include<stdio.h>
#include<stdlib.h>

int total=0; /*总人数*/

struct person
{ /*结点的数据结构*/
long ID; /*准考证号*/
float fen; /*考分*/
struct person* next; /*指向下一个结点*/
};

int main(void)
{ struct person Head={0L,0.0,NULL};
struct person*head=&Head,*p,*q;
void bubble(struct person*);

q=head;
while(1)
{
long ID; float score;
printf("No.%d: ID,score=",total+1); /*提示信息*/
scanf("%ld%*c%f",&ID,&score); /*ID与score之间可用任意字符隔开*/
if(ID<=0L)break; /*约定用不合理的准考证号代表输入到此为止*/
p=(struct person*)malloc(sizeof(struct person));/*假设申请新结点次次成功*/
q->next=p; /*令新结点入链*/
p->next=NULL; /*权作链尾*/
p->ID=ID;
p->fen=score;
total++;
q=p;/*"新"变"旧",让p迎接更新的*/
} /*至此考生信息全部登录到了链表*/

bubble(head);/*用冒泡法对考分排序*/

/*下面是对链表的遍历,以验证登录*/
p=head->next;/*Head结点是空架子*/
while(p!=NULL)
{
printf("%ld: %4.1f\n",p->ID,p->fen);
p=p->next;
}
return 0;
}

/*用冒泡法对total个考分排序*/
void bubble(struct person* src)
{ int i,j;
struct person *p,*q,*r;
for(i=1;i<=total-1;i++) /*第i轮*/
{ r=src;
q=r->next;
p=q->next;
for(j=1;j<=total-i;j++)/*第j次*/
if(q->fen < p->fen)
{ r->next=p;
q->next=p->next;
p->next=q;
r=p;
p=q->next;
}
else
{ r=q;
q=p;
p=p->next;
}
}
}


落霞与孤鹜齐飞,秋水共长天一色! 心有多大,路有多宽。三教九流,鸡鸣狗盗。兼收并蓄,海纳百川。
2006-05-04 10:42
feng1256
Rank: 4
等 级:贵宾
威 望:14
帖 子:2899
专家分:0
注 册:2005-11-24
收藏
得分:0 

不要动不动就直接写个程序

主要是把问题说明白就行了


叁蓙大山:工謪、稅務、嗣發 抱歉:不回答女人的问题
2006-05-04 12:53
songweiwen
Rank: 1
等 级:新手上路
帖 子:112
专家分:0
注 册:2006-2-19
收藏
得分:0 
以下是引用feng1256在2006-5-4 12:53:00的发言:

不要动不动就直接写个程序

主要是把问题说明白就行了

反对!!!!!!!
谢谢给出程序的朋友!!


Finding!!!
2006-05-26 15:58
feng1256
Rank: 4
等 级:贵宾
威 望:14
帖 子:2899
专家分:0
注 册:2005-11-24
收藏
得分:0 
以下是引用songweiwen在2006-5-26 15:58:00的发言:

反对!!!!!!!
谢谢给出程序的朋友!!

你直接享用别人程序的时候,别人正在享用你的工作机会!


叁蓙大山:工謪、稅務、嗣發 抱歉:不回答女人的问题
2006-05-26 16:03
HuiSky
Rank: 1
等 级:新手上路
帖 子:54
专家分:0
注 册:2006-5-13
收藏
得分:0 
struct link *returnlink(struct link *head) /*链表排序(从小到大)*/
{
struct link *p,*pr;
int n,i,j;
p=head;
do
{
pr=head;
do
{
if(p->data<pr->data) /*如果把条件改为p->data>prdata则为从大到小排序*/
{
n=p->data;
p->data=pr->data;
pr->data=n;
}
pr=pr->next;
}while(pr!=NULL);
p=p->next;
}while(p!=NULL);
return(head);
}

2006-05-26 16:27
songweiwen
Rank: 1
等 级:新手上路
帖 子:112
专家分:0
注 册:2006-2-19
收藏
得分:0 
以下是引用feng1256在2006-5-26 16:03:00的发言:

你直接享用别人程序的时候,别人正在享用你的工作机会!

当我消化了他的算法后,他未必比我更有竞争力!!!


Finding!!!
2006-05-26 16:35
快速回复:链表排序问题
数据加载中...
 
   



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

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