幻舞清风 2022-09-28 20:18 采纳率: 85.7%
浏览 49
已结题

C语言顺序表的设计与实践

头文件名:学生.h
#include<stdio.h>
typedef struct Student
{
long number;
char name[10];
char sex[4];
int age;
float grade;
}StudentType;

typedef StudentType DataType;

#define MaxSize 100

typedef struct
{
DataType List[MaxSize];
int size;
}SeqList;

void ListInitiate(SeqList *L)
{
L->size=0;
}

int ListLength(SeqList L)
{
return L.size;
}

int ListInsert(SeqList *L,int i,DataType x)
{
int j;
if(L->size>=MaxSize)
{
printf("顺序表已满无法插入!\n");
return 0;
}
else if (i<0||i>L->size)
{
printf("参数i不合法!\n");
return 0;
}
else
{
for(j=L->size;j>i;j--)
{
L->List[j]=L->List[j-1];
}

    L->List[i]=x;//插入x 
    L->size++;//元素个数加一 
    return 1;
}

}

int ListGet(SeqList L,int i,DataType *x){
if(i<0||i>L.size-1)
{
printf("参数i不合法!\n");
return 0;
}
else
{
*x=L.List[i];
return 1;
}
}

int ListDelete(SeqList *L,int i,DataType *x){
int j;
if(L->size<=0){
printf("顺序表已空无元素可删!\n");
return 0;
}
else if(i<0||i>L->size-1){
printf("参数i不合法");
return 0;
}
else{
*x=L->List[i];
for(j=i+1;j<=L->size-1;j++)
L->List[j-1]=L->List[j];
L->size--;
return 1;
}
}

void ListSort(SeqList L)
{
int i,j;
DataType temp;
for(i = 0;i < ListLength(L) - 1;i++)
{
for(j = 0;j < ListLength(L) - i;j++)
{
if(L.List[j].grade > L.List[j+1].grade)
{
temp = L.List[j];
L.List[j] = L.List[j+1];
L.List[j+1] = temp;
}
}
}
for(i = ListLength(L) - 1;i >=0;i--)
{
printf("%d %s %s %d %.2f\n",L.List[i].number,L.List[i].name,L.List[i].sex,L.List[i].age,L.List[i].grade);
}
return;
}

#include<stdio.h>
#include "学生.h"

int main(void)
{
    SeqList myList;
    int i;
    //定义结构体类型数据变量
    StudentType x[3]={{2000001,"张三","男",20,100},
                     {2000002,"李四","男",21,87},
                     {2000003,"王五","女",22,99}};
    StudentType s;
    
    ListInitiate(&myList);//调用初始化函数
    //插入函数调用
    /*ListInsert(&myList,0,x[0]);
    ListInsert(&myList,1,x[1]);
    ListInsert(&myList,2,x[2]);*/
    for(i=0;i<3;i++)
    {
        if((ListInsert(&myList,i,x[i]))==0)
        {
            printf("错误!");
            return 0;
        }
    }
    
    for(i=0;i<ListLength(myList);i++)
    {
        if(ListGet(myList,i,&s)==0)
        {
            printf("错误!");
            return 1;
        }
        else
        //显示数据
        printf("%d  %s  %s  %d  %.2f\n",s.number,s.name,s.sex,s.age,s.grade); 
    }
    ListSort(myList);
}


img


请从上述代码中指出问题并修改,实现学生按照成绩从高到低排序输出。

  • 写回答

1条回答 默认 最新

  • qzjhjxj 2022-09-29 13:30
    关注

    代码没什么问题,排序函数里一处修改见注释,供参考:

    #include<stdio.h>
    typedef struct Student
    {
        long number;
        char name[10];
        char sex [4];
        int age;
        float grade;
    }StudentType;
    
    typedef StudentType DataType;
    
    #define MaxSize 100
    
    typedef struct
    {
        DataType List[MaxSize];
        int size;
    }SeqList;
    
    void ListInitiate(SeqList* L)
    {
        L->size = 0;
    }
    
    int ListLength(SeqList L)
    {
        return L.size;
    }
    
    int ListInsert(SeqList* L, int i, DataType x)
    {
        int j;
        if (L->size >= MaxSize)
        {
            printf("顺序表已满无法插入!\n");
            return 0;
        }
        else if (i<0 || i>L->size)
        {
            printf("参数i不合法!\n");
            return 0;
        }
        else
        {
            for (j = L->size; j > i; j--)
            {
                L->List[j] = L->List[j - 1];
            }
    
            L->List[i] = x;//插入x 
            L->size++;//元素个数加一 
            return 1;
        }
    }
    
    int ListGet(SeqList L, int i, DataType* x) {
        if (i<0 || i>L.size - 1)
        {
            printf("参数i不合法!\n");
            return 0;
        }
        else
        {
            *x = L.List[i];
            return 1;
        }
    }
    
    int ListDelete(SeqList* L, int i, DataType* x) {
        int j;
        if (L->size <= 0) {
            printf("顺序表已空无元素可删!\n");
            return 0;
        }
        else if (i<0 || i>L->size - 1) {
            printf("参数i不合法");
            return 0;
        }
        else {
            *x = L->List[i];
            for (j = i + 1; j <= L->size - 1; j++)
                L->List[j - 1] = L->List[j];
            L->size--;
            return 1;
        }
    }
    
    void ListSort(SeqList L)
    {
        int i, j;
        DataType temp;
        for (i = 0; i < ListLength(L) - 1; i++)
        {
            for (j = 0; j < ListLength(L) - i - 1; j++)  // j < ListLength(L) - i 修改
            {
                if (L.List[j].grade > L.List[j + 1].grade)
                {
                    temp = L.List[j];
                    L.List[j] = L.List[j + 1];
                    L.List[j + 1] = temp;
                }
            }
        }
        for (i = ListLength(L) - 1; i >= 0; i--)
        {
            printf("%d %s %s %d %.2f\n", L.List[i].number, L.List[i].name, 
                              L.List[i].sex, L.List[i].age, L.List[i].grade);
        }
        return;
    }
    
    //#include<stdio.h>
    //#include "学生.h"
    
    int main(void)
    {
        SeqList myList;
        int i;
        //定义结构体类型数据变量
        StudentType x[3] = { {2000001,"张三","男",20,100},
                             {2000002,"李四","男",21,87},
                             {2000003,"王五","女",22,99} };
        StudentType s;
    
        ListInitiate(&myList);//调用初始化函数
        //插入函数调用
        /*ListInsert(&myList,0,x[0]);
        ListInsert(&myList,1,x[1]);
        ListInsert(&myList,2,x[2]);*/
        for (i = 0; i < 3; i++)
        {
            if ((ListInsert(&myList, i, x[i])) == 0)
            {
                printf("错误!");
                return 0;
            }
        }
        for (i = 0; i < ListLength(myList); i++)
        {
            if (ListGet(myList, i, &s) == 0)
            {
                printf("错误!");
                return 1;
            }
            else
                //显示数据
                printf("%d  %s  %s  %d  %.2f\n", s.number, s.name, s.sex, s.age, s.grade);
        }
        ListSort(myList);
        return 0;
    }
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 10月7日
  • 已采纳回答 9月29日
  • 创建了问题 9月28日

悬赏问题

  • ¥50 三种调度算法报错 有实例
  • ¥15 关于#python#的问题,请各位专家解答!
  • ¥200 询问:python实现大地主题正反算的程序设计,有偿
  • ¥15 smptlib使用465端口发送邮件失败
  • ¥200 总是报错,能帮助用python实现程序实现高斯正反算吗?有偿
  • ¥15 对于squad数据集的基于bert模型的微调
  • ¥15 为什么我运行这个网络会出现以下报错?CRNN神经网络
  • ¥20 steam下载游戏占用内存
  • ¥15 CST保存项目时失败
  • ¥20 java在应用程序里获取不到扬声器设备