c语言数据结构与算法实验:顺序表存储学生信息

本文作者同为大一新生,写这篇文章的目的是记录自己的学习经历,以及帮助一些稍有困难的同学理解数据结构,能力有限,如有错误请指出。本文基于严蔚敏老师的《数据结构与算法(c语言版 第二版)》创作。(建议学习的时候搭配着书看)
学习前提:
1.本文需要有一定的顺序表基础,如果对顺序表不太了解,建议对顺序表的结构稍加学习之后再来看。
2.你需要明确知道实际参数和形式参数之间的关系如果不知道可以看作者的这篇文c语言实际参数与形式参数

其实代码和链表差不多,所以这里我只举四个实现例子,分别是初始化,输入,插入和打印

如果你想学习更多功能的实现可以去看作者的这篇文c语言链表实现学生信息的储存其实两个真的差不多,学会了一个另外一个也会。

上代码

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct  //使用typedef
{
    char no[10];   //学号
    char name[8];   //姓名
    int chengji;    //成绩
}student;
//定义学生信息结构体
typedef struct 
{   
    student *stu;  //指向数据元素基地址     //嵌套结构体,在线性表中塞入student这一数据
    int changdu;    //线性表当前长度
    int listsize;
}sqlist;
//定义一个线性表

void Initlis(sqlist *L)  //构造一个空的顺序表
{   
    L->stu=(student*)malloc(100*sizeof(student));//(*)是强制转换
    L->listsize=100;
    L->changdu=0;    
} 

void inputlist(sqlist *L)   //输入顺序表
{
	int i,n;
	printf("请输入学生的人数");
	scanf("%d",&n);
    if(n>100)
        printf("人数过多,请不要超过100人\n");
    else
    {
	    for(i=0;i<n;i++)
	    {
		    printf("学号:");
		    scanf("%s",L->stu[i].no);
	    	printf("姓名:");
	    	scanf("%s",L->stu[i].name);
	    	printf("成绩:");
		    scanf("%d",&(L->stu[i].chengji));
		    L->changdu++;
	    }
	    printf("\n");
    }
}

void printlist(sqlist L)    //打印顺序表,因为不需要对其中的数据进行改动,所以不需要传递指针
{
    int i;
    for(i=0;i<L.changdu;i++)
    {printf("学号:%s\n",L.stu[i].no);
    printf("姓名:%s\n",L.stu[i].name);
    printf("成绩:%d\n",L.stu[i].chengji);
    }
    printf("\n");
}

void charulist(sqlist *L)
{
    int i,j;
    printf("请输入想要插入的位置:\n");
    scanf("%d",&i);
    if(i<1||i>(L->changdu+1))
        printf("输入的位置不在现表内,请重新输入\n");
    else
    {
        for(j=L->changdu-1;j>=i-1;j--)
        {
            L->stu[j+1]=L->stu[j];
        }
        printf("请输入学生信息:\n");
        printf("学号:");
        scanf("%s",L->stu[i-1].no);
        printf("姓名:");
        scanf("%s",L->stu[i-1].name);
        printf("成绩:");
        scanf("%d",&L->stu[i-1].chengji);
        ++L->changdu;
    }
    
}


int main()
{
    sqlist L;
    int k,n;
    Initlis(&L);
    inputlist(&L);
    printf("输入成功\n");
    printf("——————————————————————————————\n");
    while (1)
    {
        printf("使用服务输入1,结束程序输入0\n");
        scanf("%d",&k);
        if(k==1)
        {
            printf("1-打印所有学生信息\n2-插入学生信息\n");
            printf("请输入使用的项目\n");
            scanf("%d",&n);
            switch (n)
            {
            case 0:printf("已返回上一界面\n");break;
            case 1:printlist(L);break;
            case 2:charulist(&L);break;
            }
        }
        else  
        {   if(k==0)
            {
                printf("谢谢使用");break;
            }
            else
                printf("指令错误,请重新输入\n");
        }
    }   
    return 0;
}
  • 5
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值