一道简单的c语言结构体题

将下表所示的学生信息建立成一个按学号升序有序的链表,每个结点包括学号、姓名、性别、年龄。统计链表中年龄小于20的学生个数并将对应的学生信息(包括学号、姓名、性别、年龄)输出。

学生信息表

学号 | 姓名 | 性别 | 年龄

305001 Zhang M 18

305002 Wang F 20

305003 Li F 19

305004 Zhao M 21
求大佬解答解答最好别用到指针

你题目要求既然要用结构链表,而链表就是用指针连接的,怎么可能不用指针 = =

关于结构链表,网上资料一堆,如果有不理解,也可以去查查

下面是我的代码 我基本都写了注释,你看看吧

#include<stdio.h>
#include<string.h>
#include<malloc.h>
typedef struct student
{
   int num;//学号
   char name[7];//姓名最多6个字节 留一个给结束符号'\0'
   char sex;// 性别 F/M
   int age;//年龄
   struct student * nextStudent;
}stu;//定义一个结构类型 stu
int main()
{
    int setStuInfo(stu *,int,char *,char,int,stu *);
    stu *pStu=(stu *)malloc(sizeof(stu));//定义头节点 并预申请内存空间 (头节点 为遍历链表而创建,只有成员链表指针指向首节点 其他成员不存储数据)
    stu st[4];//定义大小为4 结构数组变量
    //按学号升序,先录入学号最大的学生 作为链表最后一个节点 依次往前录入
    if(setStuInfo(&st[3],305004,"Zhao",'M',21,&st[3])==0
       || setStuInfo(&st[2],305003,"Li",'F',19,&st[3])==0
       || setStuInfo(&st[1],305002,"Wang",'F',20,&st[2])==0
       || setStuInfo(&st[0],305001,"Zhang",'M',18,&st[1])==0)
        printf("录入发生错误!");
    else
    {
        printf("开始查找 年龄小于20的学生!\n");
        //---------------循环遍历链表,找到年龄小于20的学生并打印----------------------------------------
        pStu->nextStudent=&st[0];//用头节点的链表指针 指向首节点
        while(pStu->nextStudent!=NULL)
        {
            pStu=pStu->nextStudent;
            if(pStu->age<20)
            {
                printf("学号:%d 、姓名:%s 、性别:%c 、年龄:%d \n",pStu->num,pStu->name,pStu->sex,pStu->age);
            }
        }


    }

    return 0;
}

int setStuInfo(stu *pSt,int vNum,char *vName,char vSex,int vAge,stu *vNextStu)
//设置学生信息  返回1设置成功  返回0 设置失败
//参数1 要设置的节点
//参数2~参数4 学号、姓名、性别、年龄   参数5链表下一个节点首地址,如果是最后一个节点 该参数传自己
{
    if(vSex!='F' && vSex!='M')//录入错误检测 我只试写了一条,你想添加规则 自己添加吧
    {
        return 0;
    }

    pSt->num=vNum;
    strcpy(pSt->name,vName);
    pSt->sex=vSex;
    pSt->age=vAge;
    if(vNextStu==pSt)
        pSt->nextStudent=NULL;
    else
        pSt->nextStudent=vNextStu;
    return 1;
}

温馨提示:答案为网友推荐,仅供参考