| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 554 人关注过本帖
标题:关于C语言中链表排序
只看楼主 加入收藏
赤壁男儿
Rank: 1
等 级:新手上路
帖 子:33
专家分:0
注 册:2009-12-26
结帖率:66.67%
收藏
已结贴  问题点数:3 回复次数:2 
关于C语言中链表排序
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct STUDENT{

    char name[20];
    char sex;
    float chinese,math;
    float sum;
    struct STUDENT *next;
};
typedef    struct    STUDENT ST;
ST *m();
void print(ST *head);
ST *n(ST *m);
void main()
{
    ST *head,*k;
    head=m();
    print(head);
    k=n(head);
    print(k);
}

ST *m()
{
    ST *head,*p,*q;
    char an[20];
    head=(ST *)malloc(sizeof(ST));
    if(head==NULL)
    {
        puts("申请内存失败");
        exit(0);
    }
    q=head;
    puts("姓名");
    gets(an);
    while(strlen(an))
    {
        p=(ST *)malloc(sizeof(ST));
        if(p==NULL)
        {
            puts("申请内存失败");
            exit(0);
        }
        strcpy(p->name,an);
        puts("性别");
        p->sex=getchar();
        puts("请输入数学和语文成绩");
        scanf("%f%f",&p->chinese,&p->math);
        getchar();
        p->sum=p->chinese+p->math;
        q->next=p;
        q=p;
        puts("姓名");
        gets(an);
    }
    q->next=NULL;
    return head;

}

void print(ST *head)
{
    ST *p;
    p=head->next;
    if(p==NULL)
        printf("链表不存在\n");
    else
    {
        printf("名字\t\t性别\t\t语文\t\t数学\t\t总分\n");//控制输出的格式
        while(p!=NULL)
        {
            printf("%s\t\t%c\t\t%2.1f\t\t%2.1f\t\t%2.1f\n",p->name,p->sex,p->chinese,p->math,p->sum);
            p=p->next;
        }
    }
}

ST *n(ST *m)
{
    ST *a;
    ST *max;
    ST *p,*q;
    p=m->next;
    if(p==NULL)
        puts("此链表空的");
    else
    if(p->next==NULL)
    {
        printf("此链表为单链表");
        printf("名字\t\t性别\t\t语文\t\t数学\t\t总分\n");//控制输出的格式
        printf("%s\t\t%c\t\t%2.1f\t\t%2.1f\t\t%2.1f\n",p->name,p->sex,p->chinese,p->math,p->sum);
    }
    else{
        q=p->next;
        while(p->next!=NULL)
            {
                max=p;
                while(q!=NULL)
                {
                    if((max->sum)<(q->sum))
                    {
                        max=q;
                    }
                    q=q->next;   
                }
                  a=max;
                  max=p;
                  p=a;
                  p=p->next;
        }
    }
    return m;
}

//这个程序那里有问题
搜索更多相关主题的帖子: 链表 C语言 
2010-05-02 15:59
hzz063
Rank: 3Rank: 3
来 自:横县百合
等 级:论坛游侠
帖 子:80
专家分:114
注 册:2010-1-27
收藏
得分:3 
/*我只指出你初始化函数的问题,别的函数好像还有,你自己好好找找。*/
程序代码:
ST *m()
{
    ST *head,*p,*q;
    char an[20];
    head=(ST *)malloc(sizeof(ST));
    if(head==NULL)
    {
        puts("申请内存失败");
        exit(0);
    }
    q=head;
    puts("姓名");
    gets(an);
    while(strlen(an))  //怎么是用an字符串长度来做判断条件呢。
    {
        p=(ST *)malloc(sizeof(ST));
        if(p==NULL)
        {
            puts("申请内存失败");
            exit(0);
        }
        strcpy(p->name,an);
        puts("性别");
        p->sex=getchar();
        puts("请输入数学和语文成绩");
        scanf("%f%f",&p->chinese,&p->math); //这句之前没有清空缓存区。
        getchar();
        p->sum=p->chinese+p->math;
        q->next=p;
        q=p;
        puts("姓名");
        gets(an);
    }
    q->next=NULL;
    return head;

}


我在原函数上改了一下;

程序代码:
ST *m()
{
    int i = 2;
    ST *head,*p,*q;
    char an[20];
    head=(ST *)malloc(sizeof(ST));
    if(head==NULL)
    {
        puts("申请内存失败");
        exit(0);
    }
    q=head;

 
    while(i--)  //i是学生数,你可以自己定义
    {
        p=(ST *)malloc(sizeof(ST));
        if(p==NULL)
        {
            puts("申请内存失败");
            exit(0);
        }
        fflush(stdin);  //清空缓冲区,类似getchar();的作用。
        puts("姓名");
        gets(an);
        strcpy(p->name,an);
        fflush(stdin);
        puts("性别");
        p->sex=getchar();
        fflush(stdin);
        puts("请输入数学和语文成绩");
        scanf("%f%f",&p->chinese,&p->math);      
        p->sum=p->chinese+p->math;
        q->next=p;
        q=p;
       
    }
    q->next=NULL;
    return head;

}
我只是调换了一些语句的顺序,我运行了一下,其他的函数有错,你自己先找找看。不懂的话再问吧

一切只因为喜欢。
2010-05-02 17:38
赤壁男儿
Rank: 1
等 级:新手上路
帖 子:33
专家分:0
注 册:2009-12-26
收藏
得分:0 
但是改过这后,我调试发现,我的ST *n(ST *m)这个函数没有实现我按照sum大小排序的功能?哪位高手能指出我的错误之处。我用的是选择法排序。
2010-05-03 14:48
快速回复:关于C语言中链表排序
数据加载中...
 
   



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

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