jongkhurun_1112 2017-03-19 08:54 采纳率: 0%
浏览 1549

C 单链表做学生管理系统 怎么做排序查询的功能?

struct student
{
char sno[8]; //学号
char name[20]; //姓名
char sex; //性别
int age; //年龄
double score; //分数
struct student *next;
};
typedef struct student NODE;


上面是我的结构体
用单链表链接多个学生信息
但在学生排序查询时不知道怎么把整个结构体移动
求教

  • 写回答

5条回答 默认 最新

  • jongkhurun_1112 2017-04-01 05:20
    关注

    我们老师是用的冒泡
    我觉得还挺好理解的

    
    /************************************************
    *函数名: ch_swap(字符串交换)
    *功能:交换结点内数据
    *返回值:无
    *************************************************/
    void ch_swap(char t1[],char t2[])
    {
        char t[20]={0};
        strcpy(t,t1);
        strcpy(t1,t2);
        strcpy(t2,t);
    }
    
    
    /************************************************
    *函数名: in_swap(数字交换)
    *功能:交换结点内数据
    *返回值:无
    *************************************************/
    void in_swap(int t1,int t2)
    {
        char t=0;
        t=t1;
        t1=t2;
        t2=t;
    }
    
    
    
    
    
    /************************************************
    *函数名: vip_sort(分类排序会员信息)
    *功能:分类排序会员信息
    *返回值:无返回值
    *************************************************/
    void vip_sort(VIP* head)
    {
        int num;    //子菜单选择
        VIP *p1,*p2;        
        int flag;   //flag是用来判断是否找到,
        p2=NULL;
        while(1)
        {
            printf("\n**************排序子菜单*******************\n");
            printf("1.按编号排序(从低到高)\n");
            printf("2.按按消费次数分类(从高到低)\n");
            printf("3.返回主菜单\n");
            printf("*******************************************\n");
            fflush(stdin);
            scanf("%d",&num);   //选择你想要查询的方式    
            switch(num) 
            {
            case 1:     
                while( head != p2)
                {
                    p1 = head;
                    while( p1->next!= p2 )
                    {  
                        if( p1->code > p1->next->code)
                        {
                            ch_swap(p1->clas,p1->next->clas);
                            ch_swap(p1->name,p1->next->name);
                            ch_swap(p1->sex,p1->next->sex);
                            ch_swap(p1->tel,p1->next->tel);
                            ch_swap(p1->birthday,p1->next->birthday);
                            in_swap(p1->times,p1->next->times);
                        }       
                        p1 = p1->next;
                    }
                    p2= p1;
                }
                system("cls");
                printf("通讯录已按照 编号 排序成功");
                printf("\n===编号====会员等级====姓名====性别===电话============生日=======消费次数===\n\n");
                while(p1!=NULL)
                {
                    printf("   %d     %s        %s          %s   %s         %s    %d",p1->code,p1->clas,p1->name,p1->sex,p1->tel,p1->birthday,p1->times);
                    printf("\n");
                    p1=p1->next;
                }
                break;
            case 2: 
                while( head != p2)
                {
                    p1 = head;
                    while( p1->next!= p2 )
                    {  
                        if( p1->times > p1->next->times)
                        {
                            ch_swap(p1->clas,p1->next->clas);
                            ch_swap(p1->name,p1->next->name);
                            ch_swap(p1->sex,p1->next->sex);
                            ch_swap(p1->tel,p1->next->tel);
                            ch_swap(p1->birthday,p1->next->birthday);
                            in_swap(p1->code,p1->next->code);
                        }       
                        p1 = p1->next;
                    }
                    p2= p1;
                }
                system("cls");
                printf("通讯录已按照 编号 排序成功");
                printf("\n===编号====会员等级====姓名====性别===电话============生日=======消费次数===\n\n");
                while(p1!=NULL)
                {
                    printf("   %d     %s        %s          %s   %s         %s    %d",p1->code,p1->clas,p1->name,p1->sex,p1->tel,p1->birthday,p1->times);
                    printf("\n");
                    p1=p1->next;
                }
                break;  
            case 3:return;
            default :printf("你输入错了,请你输入任意键返回排序子菜单...\n");
                     getch();
            }
        }
    }
    
    
    评论

报告相同问题?

悬赏问题

  • ¥50 永磁型步进电机PID算法
  • ¥15 sqlite 附加(attach database)加密数据库时,返回26是什么原因呢?
  • ¥88 找成都本地经验丰富懂小程序开发的技术大咖
  • ¥15 如何处理复杂数据表格的除法运算
  • ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)
  • ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
  • ¥200 uniapp长期运行卡死问题解决
  • ¥15 latex怎么处理论文引理引用参考文献
  • ¥15 请教:如何用postman调用本地虚拟机区块链接上的合约?
  • ¥15 为什么使用javacv转封装rtsp为rtmp时出现如下问题:[h264 @ 000000004faf7500]no frame?