当前位置: 首页> 健康> 美食 > 数据结构学生信息顺序表

数据结构学生信息顺序表

时间:2025/8/12 4:15:24来源:https://blog.csdn.net/picians/article/details/140251316 浏览次数:0次

主程序

#include "fun.h"

int main(int argc, const char *argv[])
{
    seq_p S=create_seq();
    stu data;
    printf("请问要输入几个学生的数据:");
    int n;
    scanf("%d",&n);
    while(n--)
    {
        printf("姓名:\n");
       scanf("%s",data.name);
        printf("学号:\n");
       scanf("%d",&data.id);
        printf("成绩:\n");
       scanf("%d",&data.score);
       insert_tail(S,data);

    }
    show_seq(S);
    printf("###################任意插入\n");
    stu data2={"张三",22,99};
    insert_loc(S,2,data2);//任意插入
    show_seq(S);
    del_loc(S,1);//任意删除
    printf("###################删除\n");
    show_seq(S);
    stu data3={"李四",35,100};
    chag_loc(S,3,data3);//修改
    printf("###################修改\n");
    show_seq(S);
    printf("###################查找\n");
    find_id(S,3);//id查找
    printf("###################去重\n");
    seq_rm(S);//q去重
    show_seq(S);
    printf("###################销毁\n");
    free_seq(&S);//销毁
    show_seq(S);

    
    return 0;
}


源码

#include "fun.h"

//顺序表的创建
seq_p create_seq()
{
    seq_p S=(seq_p)malloc(sizeof(seq));
    if(S==NULL)
    {
        printf("顺序表创建失败\n");
        return NULL;
    }
    S->len=0;
    return S;
}

//判满
int full_seq(seq_p S)
{
    if(S==NULL)
    {
        printf("入参为空,请检查\n");
        return -1;
    }
    return S->len==MAX;
}
//判空
int empty_seq(seq_p S)
{
    if(S==NULL)
    {
        printf("入参为空,请检查\n");
        return -1;
    }
    return S->len ==0;
}
//尾插
void insert_tail(seq_p S,stu data)
{
    if(S==NULL)
    {
        printf("入参为空,请检查\n");
        return;
    }
    if(full_seq(S))
    {
        printf("表已满,无需插入\n");
        return ;
    }
    S->data[S->len].id=data.id;
    S->data[S->len].score=data.score;
    strcpy(S->data[S->len].name,data.name);
    S->len++;

}
//输出表
void show_seq(seq_p S)
{
    if(S==NULL)
    {
        printf("入参为空,请检查\n");
        return;
    }
    if(empty_seq(S))
    {
        printf("表已满,无需插入\n");
        return ;
    }
    int i=0;
    while(1)
    {
        printf("姓名:%-4s学号:%-4d成绩:%-4d\n",S->data[i].name,S->data[i].id,S->data[i].score);
        if(++i==S->len)return;
    }
}
//任意位置插入学生
void insert_loc(seq_p S,int n,stu data)
{
    if(S==NULL)
    {
        printf("入参为空,请检查\n");
        return;
    }
    if(full_seq(S))
    {
        printf("表已满,无需插入\n");
        return ;
    }
    if(n<0||n>S->len)
    {
        return;
    }
    for(int i=S->len;i>n-1;i--)
    {
        strcpy(S->data[i].name,S->data[i-1].name);
        S->data[i].id=S->data[i-1].id;
        S->data[i].score=S->data[i-1].score;
    }
        strcpy(S->data[n-1].name,data.name);
        S->data[n-1].id=data.id;
        S->data[n-1].score=data.score;
        S->len++;
}
//任意位置删除
void  del_loc(seq_p S,int n)
{
    if(S==NULL)
    {
        printf("入参为空,请检查\n");
        return;
    }
    if(empty_seq(S))
    {
        printf("表已空,无需删除\n");
        return ;
    }
    if(n<0||n>S->len)
    {
        return;
    }
    for(int i=n-1;i<S->len;i++)
    {
        strcpy(S->data[i].name,S->data[i+1].name);
        S->data[i].id=S->data[i+1].id;
        S->data[i].score=S->data[i+1].score;
    }
        
        S->len--;
}
//按位置修改
void  chag_loc(seq_p S,int n,stu data)
{
    if(S==NULL)
    {
        printf("入参为空,请检查\n");
        return;
    }
    if(empty_seq(S))
    {
        printf("表已空,无需插入\n");
        return ;
    }
    if(n<0||n>S->len)
    {
        return;
    }
    int flag=0;
    for(int i=0;i<S->len;i++)
    {
        if(i==n-1)
        {   flag=1;
            strcpy(S->data[i].name,data.name);
            S->data[i].id=data.id;
            S->data[i].score=data.score;
        }
    }
    if(flag==0)
    {
        printf("修改失败\n");

    }
        
}
//按学号查找
void  find_id(seq_p S,int id)
{
    if(S==NULL)
    {
        printf("入参为空,请检查\n");
        return;
    }
    if(empty_seq(S))
    {
        printf("表已空,无需查找\n");
        return ;
    }
    int flag=0;
    for(int i=0;i<S->len;i++)
    {
        if(S->data[i].id==id)
        { 
            flag=1;
            printf("姓名:%-4s学号:%-4d成绩:%-4d\n",S->data[i].name,S->data[i].id,S->data[i].score);

        }
    }
    if(flag==0)
    {
        printf("查无此人\n");

    }
        
}
//去重
void  seq_rm(seq_p S)
{
    if(S==NULL)
    {
        printf("入参为空,请检查\n");
        return;
    }
    if(empty_seq(S))
    {
        printf("表已空,无需去重\n");
        return ;
    }
    
    for(int i=0;i<S->len;i++)
    {
        for(int j=i+1;j<S->len;j++)
        {
            if(S->data[i].name==S->data[j].name||S->data[i].id==S->data[j].id||S->data[i].score==S->data[j].score)
            {
                del_loc(S,j+1);
                j--;
            }


        }
    }

        
}
//销毁
void free_seq(seq_p *S)
{
    if(*S==NULL)
    {
        printf("入参为空,请检查\n");
        return;
    }
    free(*S);
    *S=NULL;
}


头文件

#ifndef __FUN_H__
#define __FUN_H__
#include  <myhead.h>

#define MAX 30

typedef struct student
{
    char name[30];
    int id;
    int score;
}stu;

typedef struct sequece
{
    stu data[MAX];
    int len;
}seq,*seq_p;

seq_p create_seq();
int full_seq(seq_p);
int empty_seq(seq_p);
void insert_tail(seq_p S,stu data);
void show_seq(seq_p S);
void insert_loc(seq_p S,int n,stu data);
void  del_loc(seq_p S,int n);
void  chag_loc(seq_p S,int n,stu data);
void  find_id(seq_p S,int id);
void   seq_rm(seq_p S);
void  free_seq(seq_p *S);
#endif

 

关键字:数据结构学生信息顺序表

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: