数据结构之顺序表实现学生信息管理(C语言版)

数据结构之顺序表实现学生信息管理(C语言版),第1张

今天博主呢来分享一下前周的数据结构作业,是一道用顺序表来实现学生信息管理的作业。

大家不要小看这道题,博主在做的时候也是频繁踩坑(也许是博主菜呢,hhh)。

今天分享出来主要就是给需要的同学或路过的同学看看。

下面是解题代码(纯手工打的):

#include
#include
#include
#include
#define maxsize1 20
typedef char Elemtype;
typedef struct
{
    int num;
    char name[maxsize1];
    char sex[maxsize1];
    int score;
}Type;
typedef struct
{
    Type data[maxsize1];
    int length;
}SqList;
int initlist(SqList*& L)
{
    L = (SqList*)malloc(sizeof(SqList));
    //L->data = (Type*)malloc(sizeof(Type));
    L->length = 0;
    return 0;
}
bool insertdata(SqList*& L, Type e, int i)
{
    if (L->length == maxsize1)
    {
        return false;
    }
    else if (i<1 || i>L->length)
    {
        return false;
    }
    else
    {
        int j;
        i--;
        for (j = L->length; j > i; j--)
        {
            L->data[j] = L->data[j - 1];
        }
        L->data[i] = e;
        L->length++;
        return true;
    }
}
int deletedata(SqList*& L, int n)
{
    if (n<1 || n >L->length)
    {
        return false;
    }
    int i = 0;
    for (i = n + 1; i < L->length ; i++)
    {
        L->data[i - 1] = L->data[i];
    }
    L->length--;
    printf("成功删掉第%d个元素\n", n);
    return true;
}
int getlength(SqList*& L)
{
    printf("当前长度为%d\n", L->length);
    return 0;
}
void ifempty(SqList*& L)
{
    if (L->length == 0)
    {
        printf("顺序表为空\n");
    }
    else
    {
        printf("顺序表不为空\n");
    }
}
void finddata(SqList*& L, int n)
{
    if (n<0 || n>L->length)
    {
        printf("输入位置有误\n");
    }
    else
    {
        printf("第%d个元素的学号为%d\n", n, L->data[n].num);
        printf("第%d个元素的姓名为%3s\n", n, L->data[n].name);
        printf("第%d个元素的性别为%3s\n", n, L->data[n].sex);
        printf("第%d个元素的成绩为%d\n", n, L->data[n].score);
    }
}
void printlist(SqList*& L)
{
    if (L->length == 0)
    {
        printf("该顺序表的长度为空\n");

    }
    int j;
    printf("表中数据为\n");
    for (j = 0; j < L->length; j++)
    {

        printf("第%d个元素的学号为%d\n", j, L->data[j].num);
        printf("第%d个元素的姓名为%3s\n", j, L->data[j].name);
        printf("第%d个元素的性别为%3s\n", j, L->data[j].sex);
        printf("第%d个元素的成绩为%d\n", j, L->data[j].score);
    }
}
void locatedata(SqList*& L, int n)
{
    int j ;
    
        for (j = 0; j < L->length; j++)
        {
            if (L->data[j].num == n)
            {
                printf("位置在%d", j );
            }
            else
            {
                break;
            }
        }
    
}
void destroylist(SqList*& L)
{
    free(L);
    printf("释放成功\n");
}
void input(SqList*& L, int n)
{    
    printf("请输入学号\n");
    scanf_s("%d", &L->data[n - 1].num, 250);
    printf("请输入姓名\n");
    scanf_s("%s", &L->data[n - 1].name, 250);
    printf("请输入性别\n");
    scanf_s("%s", &L->data[n - 1].sex, 250);
    printf("请输入成绩\n");
    scanf_s("%d", &L->data[n - 1].score, 250);
    L->length++;
}
int main()
{
    SqList* L;
    printf("欢迎大家来到学生信息管理系统\n");
    initlist(L);
    printf("请输入初始化数据\n");
    /*for (int i = 1; i < 3; i++)
    {
        input(L, i);
    }
    for (int j = 0; j < 2; j++)
    {
        insertdata(L, L->data[j], j+1);
    }*/
    insertdata(L, L->data[0], 1);
    insertdata(L, L->data[1], 2);
    input(L, 1);
    input(L, 2);
    printf("功能如下:\n");
    printf("1.打印信息\n");
    printf("2.获取当前顺序表长度\n");
    printf("3.判断顺序表是否为空\n");
    printf("4.找某位同学的信息\n");
    printf("5.根据学号找同学位置\n");
    printf("6.删除某位同学的信息\n");
    printf("7.销毁顺序表\n");

    int choice;
    
    while (true)
    {
        scanf_s("%d", &choice, 250);
        switch (choice)
        {
            
        case 1:
            printlist(L);
            break;
        case 2:
            getlength(L);
            break;
        case 3:
            ifempty(L);
            break;
        case 4:
            int i;
            printf("想要找哪位同学的信息\n");
            scanf_s("%d", &i, 250);
            finddata(L, i);
            break;
        case 5:
            int j;
            printf("想要找的同学的学号为\n");
            scanf_s("%d", &j, 250);
            locatedata(L, j);
            break;
        case 6:
            int k;
            printf("想要删除哪位同学的信息\n");
            scanf_s("%d", &k, 250);
            deletedata(L, k);
            break;
        case 7:
            destroylist(L);
            break;    
        default:
            break;
        }
    }
    return 0;
}
 

程序执行图:(可能有点瑕疵,大家去看看程序的逻辑就会知道)

 

 

本贴为博主亲手整理。

如有错误,请评论区指出,一起进步。

谢谢大家的浏览.

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/674828.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-19
下一篇 2022-04-19

发表评论

登录后才能评论

评论列表(0条)

保存