| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 618 人关注过本帖
标题:请教个链表排序和插入的问题?
只看楼主 加入收藏
koman
Rank: 1
等 级:新手上路
帖 子:71
专家分:0
注 册:2007-9-12
收藏
 问题点数:0 回复次数:7 
请教个链表排序和插入的问题?

设个空的头地址
怎样把链表按照元素里一个成员的大小排序,插入?
请高手留下方法 最好代码,万谢!
结构类型:
struct student
{
char name[15];
float score;
struct student *next;
};
按score大小 降序排;
我自己看得实在是晕掉了,高手帮个忙!

搜索更多相关主题的帖子: 链表 score student struct name 
2007-10-31 18:19
koman
Rank: 1
等 级:新手上路
帖 子:71
专家分:0
注 册:2007-9-12
收藏
得分:0 

坐等答案

2007-10-31 18:27
koman
Rank: 1
等 级:新手上路
帖 子:71
专家分:0
注 册:2007-9-12
收藏
得分:0 
自己做了个找不出逻辑错误- -!
帮个忙啊!
高手高高手人呢?来个撒 - -!
#include <stdio.h>
#include <malloc.h>
struct score
{
int num;
char name[15];
float score_1;
float score_2;
float score_3;
float score_av;
};
struct student
{
struct score objscore;
struct student *next;
};
struct student *head;
void paixu(struct student *p);
void main()
{
struct student *p,*q;
int i=0;
char yn='y';
struct student *pf,*pb;
printf("请输入学员信息。\n");
pb=(struct student*) malloc(sizeof(struct student));
pb->objscore.num=0;
pb->objscore.score_1=0;
pb->objscore.score_2=0;
pb->objscore.score_3=0;
pb->objscore.score_av=0;
pf=head=pb;
pf=pb;
pb->next=NULL;
do
{
pb=(struct student*) malloc(sizeof(struct student));
pb->objscore.num=0;
pb->objscore.score_1=0;
pb->objscore.score_2=0;
pb->objscore.score_3=0;
pb->objscore.score_av=0;
printf("学号:");
scanf("%d",&pb->objscore.num);
printf("姓名:");
fflush(stdin);
gets(pb->objscore.name);
printf("三门成绩:\n");
printf("成绩1: ");
scanf("%f",&pb->objscore.score_1);
printf("成绩2: ");
scanf("%f",&pb->objscore.score_2);
printf("成绩3: ");
scanf("%f",&pb->objscore.score_3);
pb->objscore.score_av=(pb->objscore.score_3+pb->objscore.score_3+pb->objscore.score_3)/3;
pf->next=pb;
pf=pb;
pb->next=NULL;
i++;
printf("是否继续(y/n)?");
fflush(stdin);
yn=getchar();
}while(yn=='y'||yn=='Y');
paixu(head->next);
p=q=head->next;
while(p!=NULL)
{
printf("学号: %d\n",p->objscore.num);
printf("姓名: %s\n",p->objscore.name);
printf("三门成绩: \n");
printf("成绩1: %.2f\n",p->objscore.score_1);
printf("成绩2: %.2f\n",p->objscore.score_2);
printf("成绩3: %.2f\n",p->objscore.score_3);
printf("平均成绩: %.2f\n",p->objscore.score_av);
p=p->next;
}
free(q);
}
void paixu(struct student *p)
{
struct student *q;
struct score temp;
q=p;
while(p!=NULL)
{
while(q!=NULL)
{
if(q->objscore.score_av > q->next->objscore.score_av)
{
temp=q->objscore;
q->objscore=q->next->objscore;
q->next->objscore=temp;
}
q=q->next;
}
p=p->next;
}
}
2007-10-31 19:50
ondy
Rank: 1
等 级:新手上路
威 望:1
帖 子:88
专家分:0
注 册:2007-9-4
收藏
得分:0 
[QUOTE]
void unionlist(linklist *la ,linklist *lb,linklist *&lc)
{
linklist *pa=la->next,*pb=lb->next,*pc,*s;
lc=(linklist *)malloc(sizeof(linklist));
pc=lc;
while(pa!=NULL&&pb!=NULL)
{
if(pa->data<pb->data)
{
s=(linklist *)malloc(sizeof(linklist));
s->data=pa->data;
pc->next=s;pc=s //尾插法
pa=pa->next;
}
else
{
s=(linklist *)malloc(sizeof(linklist));
s->data=pb->data;
pc->next=s;pc=s //尾插法
pb=pb->next;

}
while(pa!=NULL)
{
s=(linklist *)malloc(sizeof(linklist));
s->data=pa->data;
pc->next=s;pc=s //尾插法
pa=pa->next;
}
while(pb!=NULL)
{
s=(linklist *)malloc(sizeof(linklist));
s->data=pa->data;
pc->next=s;pc=s //尾插法
pb=pb->next;
}

}
}
[/QUOTE]

2007-10-31 20:08
無邪的睡脸
Rank: 2
等 级:等待验证会员
威 望:1
帖 子:344
专家分:13
注 册:2007-9-11
收藏
得分:0 
没时间去调试了!楼主看看是不是这样的一个问题:排序的时候似乎想用冒泡排序,如果是降序的话判断是不是反了?还有p控制外层循环似乎不恰当,最重要的是每次内层循环前q从哪开始?好像一遍过后q==null了。自己改改看吧!我现在时间很紧!不好意思了!
2007-10-31 20:09
koman
Rank: 1
等 级:新手上路
帖 子:71
专家分:0
注 册:2007-9-12
收藏
得分:0 
以下是引用無邪的睡脸在2007-10-31 20:09:24的发言:
没时间去调试了!楼主看看是不是这样的一个问题:排序的时候似乎想用冒泡排序,如果是降序的话判断是不是反了?还有p控制外层循环似乎不恰当,最重要的是每次内层循环前q从哪开始?好像一遍过后q==null了。自己改改看吧!我现在时间很紧!不好意思了!

谢谢LS了 刚开始接触这类题 看得实在太晕了 我照你说的再改改看.

2007-10-31 20:11
ondy
Rank: 1
等 级:新手上路
威 望:1
帖 子:88
专家分:0
注 册:2007-9-4
收藏
得分:0 

选点优的算法冒泡 的时间复杂 O(n^2) 如果数据大的话慢死的


2007-10-31 20:14
koman
Rank: 1
等 级:新手上路
帖 子:71
专家分:0
注 册:2007-9-12
收藏
得分:0 
void paixu() //排序
{

struct student *p,*q;
struct score temp;
p=head;
while(p!=NULL)
{
q=p->next;
while(q!=NULL)
{
if(p->objscore.score_av < q->objscore.score_av)
{
temp=q->objscore;
q->objscore=p->objscore;
p->objscore=temp;
}
q=q->next;
}
p=p->next;
}
}
自己做了个 貌似能实现了
谢谢大家所有LS
2007-10-31 21:39
快速回复:请教个链表排序和插入的问题?
数据加载中...
 
   



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

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