你题目要求既然要用结构链表,而链表就是用指针连接的,怎么可能不用指针 = =
关于结构链表,网上资料一堆,如果有不理解,也可以去查查
下面是我的代码 我基本都写了注释,你看看吧
![](https://video.ask-data.xyz/img.php?b=https://iknow-pic.cdn.bcebos.com/72f082025aafa40fa2590620a064034f79f019b4?x-bce-process=image%2Fresize%2Cm_lfit%2Cw_600%2Ch_800%2Climit_1%2Fquality%2Cq_85%2Fformat%2Cf_auto)
#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;
}