| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 487 人关注过本帖
标题:请教一个链表的问题
只看楼主 加入收藏
jxlghy
Rank: 1
等 级:新手上路
帖 子:24
专家分:0
注 册:2008-11-20
收藏
 问题点数:0 回复次数:3 
请教一个链表的问题
我用链表做了一个学生成绩管理系统,可是给学生成绩排序部分如果调用print函数(该函数是显示学生成绩的函数)就会不对,以下是排序部分的程序(第一个是正确的,第二个是错误的),我不指点为什么用第一种会错,望各位高手指点。谢谢!
//程序1
void sort(STUDENT *h)
{
    int i=0,j;
    STUDENT *t, *p, *q, *r, *s;
    t=p=(STUDENT *)malloc(LEN);
    p->next=h;
    printf("请输入按哪门课程的编号来排序:(0.语文 1.英语 2.数学)\n");
    scanf("%d",&j);
    while (p->next!=NULL)
    {
       r=p;
       q=p->next;
       while(q->next!=NULL)
       {
          if(q->next->score[j] > r->next->score[j])   //按从大到小的顺序排
           r=q;
           q=q->next;
       }
       if(r!=p)
       {
           s=r->next;
           r->next=s->next;
           s->next=p->next;
           p->next=s;
       }
       p=p->next;
    }
    h=t->next;
    free (t);
    p=h;
    while(p!=NULL)
    {
       i++;
       p->order=i;
       p=p->next;
    }
    print(h);
    printf("排序成功!!!\n");
}

//程序2
STUDENT *sort(STUDENT *h)
{
    int i=0,j;
    STUDENT *t, *p, *q, *r, *s;
    t=p=(STUDENT *)malloc(LEN);
    p->next=h;
    printf("请输入按哪门课程的编号来排序:(0.语文 1.英语 2.数学)\n");
    scanf("%d",&j);
    while (p->next!=NULL)
    {
       r=p;
       q=p->next;
       while(q->next!=NULL)
       {
          if(q->next->score[j] > r->next->score[j])   //按从大到小的顺序排
           r=q;
           q=q->next;
       }
       if(r!=p)
       {
           s=r->next;
           r->next=s->next;
           s->next=p->next;
           p->next=s;
       }
       p=p->next;
    }
    h=t->next;
    free (t);
    p=h;
    while(p!=NULL)
    {
       i++;
       p->order=i;
       p=p->next;
    }
    printf("排序成功!!!\n");
    return h;
}
第二种方法是排完之后先不显示成绩,待按显示成绩的键后再显示。
搜索更多相关主题的帖子: 链表 
2008-11-20 12:41
nianshi
Rank: 1
等 级:新手上路
帖 子:199
专家分:0
注 册:2007-11-7
收藏
得分:0 
应该是这里有问题吧:
h=t->next;
    free (t);
 p=h;
你的t并没有初始化啊,t->next里面放的是头指针吗?

行至水穷处 坐看去起时
C语言QQ群1:51871776  群2:26313099  群3:47145282
2008-11-20 16:05
jxlghy
Rank: 1
等 级:新手上路
帖 子:24
专家分:0
注 册:2008-11-20
收藏
得分:0 
链表
t=p=(STUDENT *)malloc(LEN);就是初始化。我不知道为什么调用函数后就会出错。其实第一个程序和第二个区别也不大
2008-11-20 16:13
jxlghy
Rank: 1
等 级:新手上路
帖 子:24
专家分:0
注 册:2008-11-20
收藏
得分:0 
回复 2# 的帖子
t=p=(STUDENT *)malloc(LEN);就是初始化。我不知道为什么调用函数后就会出错。其实第一个程序和第二个区别也不大。第二个程序也有
h=t->next;
    free (t);
p=h;    这三个语句,但是正确。
2008-11-20 16:15
快速回复:请教一个链表的问题
数据加载中...
 
   



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

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