标题:大学数据结构的一道题求解决
只看楼主
DXJAXXY
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2019-11-8
结帖率:66.67%
已结贴  问题点数:16 回复次数:1 
大学数据结构的一道题求解决

题目:实现对学生的成绩进行排序、查找,并统计各分数段的人数。
要求:
(1)分析需求,写出用到的数据结构;(诸如一个记录应包括哪些字段数据,每个字段的数据是什么类型的,应用什么数据结构来保存众多的记录)
(2)排序:按学生分数从高到低进行排序,采用冒泡法或其他快速算法,写出c程序实现;
(3)查找:按学生姓名进行查找,采用顺序查找或二分查找,并实现查找结构的打印,写出c程序实现;
(4)统计各分数段的人数(≥90分、80~89分、70~79分、60~69分、60分以下),打印统计的结果,写出c程序实现;
搜索更多相关主题的帖子: 大学 数据结构 统计 查找 分数 
2019-11-16 22:55
林月儿
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:湖南
等 级:版主
威 望:138
帖 子:2276
专家分:10647
注 册:2015-3-19
得分:16 
程序代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct student  {   
    int score;
    char name[20];
    struct student * next;
}Stu;
/** 创建链表 */
Stu* createLink(int arr[],char* name[],int len,int stat[]){
    Stu *head=(Stu*)malloc(sizeof(Stu));
    Stu *curStu=head;
    for(int i=0;i<len;i++){
        curStu->score=arr[i];
        stat[arr[i]/10]++;
        strcpy(curStu->name,name[i]);
        if(i<len-1){
            Stu *tmpStu=(Stu*)malloc(sizeof(Stu));
            curStu->next=tmpStu;
        }else{
            curStu->next=NULL;
        }
        curStu=curStu->next;
    }
    return head;
}
/** 遍历链表 */
void display(Stu *head){
    Stu *curStu=head;
    while(curStu!=NULL){
        printf("%s:%d\t",curStu->name,curStu->score);
        curStu=curStu->next;
    }
    printf("\n");
}
/** 释放 */ 
void freeLink(Stu *stu){
    if(stu!=NULL){
        freeLink(stu->next);
        free(stu);
    }
}
/** 排序 */
Stu *sort(Stu *stu){
    Stu *p=stu,*q=p->next,*r=q->next;
    bool flag=false;
    if(p->score<q->score){
        p->next=r;
        q->next=p;
        stu=q;
        p=stu,q=p->next,r=q->next;
    }
    while(r!=NULL){
        if(q->score<r->score){
            q->next=r->next;
            r->next=q;
            p->next=r;
            flag=true;
        }
        p=p->next;
        q=p->next;
        r=q->next;
    }
    if(flag) {
        return sort(stu);
    }
    return stu;
}
/** 查找 */
void find(char name[],Stu*h){
    Stu *cur=h;
    while(cur!=NULL&&strcmp(cur->name,name)!=0){
        cur=cur->next;
    } 
    if(cur!=NULL){
        printf("found! %s:%d",cur->name,cur->score);
    }else{
        printf("not found!");
    }
}
int main(){
    int score_arr[]={99,83,54,84,63,76,44,81};
    char* name_arr[]={"aa","bb","cc","dd","ee","ff","gg","hh"};
    int stat[10];
    memset(stat,0,sizeof(stat));
    Stu *head=createLink(score_arr,name_arr,8,stat); 
    display(head);
    for(int i=1;i<10;i++){
        printf("%d~%d:%d\n",i*10,(i+1)*10,stat[i]);
    }
    printf("\nsorted,score:\t");
    head=sort(head);
    display(head);
    find("eee",head);
    freeLink(head);
    return 0;
}


剑栈风樯各苦辛,别时冰雪到时春
2019-11-19 23:01



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-497851-1-1.html




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

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